From ba6978846acb22492a8b4196809058d92a326ee5 Mon Sep 17 00:00:00 2001 From: Luis Padron Date: Sat, 20 Jan 2024 15:46:42 -0500 Subject: [PATCH] Add Bazel build support for swift-snapshot-testing Refactors the Bazel support to better match the Package.swift structure: - Makes the following targets available: `AccessibilitySnapshotCore`, `AccessibilitySnapshotCore_ObjC`, `FBSnapshotTestCase_Accessibility`, `FBSnapshotTestCase_Accessibility_ObjC`, `AccessibilitySnapshot`. - The module `AccessibilitySnapshot` uses `swift-snapshot-testing` and the `FBSnapshotTestCase_Accessibility*` modules use `iOSSnapshotTestCase`. - Adds custom BUILD file for `swift-snapshot-testing` to allow it to build with Bazel. I opted for this vs. registry because it's a simple BUILD files. --- BUILD.bazel | 101 ------------------ Bazel/non_bzlmod_deps.bzl | 11 +- Bazel/swift_snapshot_testing.BUILD.bazel | 14 +++ MODULE.bazel | 1 + README.md | 65 +++++++++++ .../AccessibilitySnapshot/Core/BUILD.bazel | 73 +++++++++++++ .../Core}/Info.plist | 0 .../SnapshotTesting/BUILD.bazel | 37 +++++++ .../SnapshotTesting/Info.plist | 24 +++++ .../iOSSnapshotTestCase/BUILD.bazel | 74 +++++++++++++ .../iOSSnapshotTestCase/Info.plist | 24 +++++ 11 files changed, 322 insertions(+), 102 deletions(-) delete mode 100644 BUILD.bazel create mode 100644 Bazel/swift_snapshot_testing.BUILD.bazel create mode 100644 Sources/AccessibilitySnapshot/Core/BUILD.bazel rename Sources/{ => AccessibilitySnapshot/Core}/Info.plist (100%) create mode 100644 Sources/AccessibilitySnapshot/SnapshotTesting/BUILD.bazel create mode 100644 Sources/AccessibilitySnapshot/SnapshotTesting/Info.plist create mode 100644 Sources/AccessibilitySnapshot/iOSSnapshotTestCase/BUILD.bazel create mode 100644 Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Info.plist diff --git a/BUILD.bazel b/BUILD.bazel deleted file mode 100644 index 363d26ab..00000000 --- a/BUILD.bazel +++ /dev/null @@ -1,101 +0,0 @@ -load( - "@build_bazel_rules_apple//apple:ios.bzl", - "ios_framework", -) -load( - "@build_bazel_rules_swift//swift:swift.bzl", - "swift_library", -) - -objc_library( - name = "AccessibilitySnapshotCoreObjC.lib", - srcs = glob( - ["Sources/AccessibilitySnapshot/Core/ObjC/**/*.m"], - allow_empty = False, - ), - hdrs = glob( - ["Sources/AccessibilitySnapshot/Core/ObjC/include/**/*.h"], - allow_empty = False, - ), - defines = ["BAZEL_PACKAGE"], - module_name = "AccessibilitySnapshotCore_ObjC", - tags = ["manual"], - visibility = ["//visibility:public"], - deps = [], -) - -swift_library( - name = "AccessibilitySnapshotCoreSwift.lib", - srcs = glob( - ["Sources/AccessibilitySnapshot/Core/Swift/**/*.swift"], - allow_empty = False, - ), - defines = ["BAZEL_PACKAGE"], - module_name = "AccessibilitySnapshotCore", - tags = ["manual"], - visibility = ["//visibility:public"], - deps = [":AccessibilitySnapshotCoreObjC.lib"], -) - -swift_library( - name = "AccessibilitySnapshot_iOSSnapshotTestCase_Swift.lib", - testonly = True, - srcs = glob(["Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/**/*.swift"]), - defines = ["BAZEL_PACKAGE"], - tags = ["manual"], - visibility = ["//visibility:public"], - deps = [ - ":AccessibilitySnapshotCoreObjC.lib", - ":AccessibilitySnapshotCoreSwift.lib", - "@ios_snapshot_test_case//:iOSSnapshotTestCase", - ], -) - -objc_library( - name = "AccessibilitySnapshot_iOSSnapshotTestCase_ObjC.lib", - testonly = True, - srcs = glob( - ["Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/**/*.m"], - allow_empty = False, - ), - hdrs = glob( - ["Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/**/*.h"], - allow_empty = False, - ), - defines = ["BAZEL_PACKAGE"], - module_name = "AccessibilitySnapshot", - tags = ["manual"], - visibility = ["//visibility:public"], - deps = [":AccessibilitySnapshot_iOSSnapshotTestCase_Swift.lib"], -) - -ios_framework( - name = "AccessibilitySnapshotCore", - bundle_id = "com.squareup.AccessibilitySnapshotCore", - families = [ - "iphone", - "ipad", - ], - infoplists = ["Sources/Info.plist"], - minimum_os_version = "13.0", - resources = glob( - ["Sources/AccessibilitySnapshot/Core/Swift/Assets/**/*"], - allow_empty = False, - ), - visibility = ["//visibility:public"], - deps = [":AccessibilitySnapshotCoreSwift.lib"], -) - -ios_framework( - name = "AccessibilitySnapshot_iOSSnapshotTestCase", - testonly = True, - bundle_id = "com.squareup.AccessibilitySnapshot", - families = [ - "iphone", - "ipad", - ], - infoplists = ["Sources/Info.plist"], - minimum_os_version = "13.0", - visibility = ["//visibility:public"], - deps = [":AccessibilitySnapshot_iOSSnapshotTestCase_ObjC.lib"], -) diff --git a/Bazel/non_bzlmod_deps.bzl b/Bazel/non_bzlmod_deps.bzl index cde5b2b9..0a9b04fb 100644 --- a/Bazel/non_bzlmod_deps.bzl +++ b/Bazel/non_bzlmod_deps.bzl @@ -4,7 +4,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # -- Non-bzlmod versions -IOS_SNAPSHOT_TEST_CASE_VERSION = "57b023c8bb3df361e2fae01532cd066ec0b65d2e" +IOS_SNAPSHOT_TEST_CASE_VERSION = "57b023c8bb3df361e2fae01532cd066ec0b65d2e" # NOTE: this is 8.0.0 with some Bazel build fixes +SWIFT_SNAPSHOT_TESTING_VERSION = "1.8.2" # -- Module extension @@ -20,6 +21,14 @@ def non_bzlmod_repositories(): patch_args = ["-p1"], ) + http_archive( + name = "swift_snapshot_testing", + url = "https://github.com/pointfreeco/swift-snapshot-testing/archive/refs/tags/%s.tar.gz" % SWIFT_SNAPSHOT_TESTING_VERSION, + strip_prefix = "swift-snapshot-testing-%s" % SWIFT_SNAPSHOT_TESTING_VERSION, + sha256 = "f924de0b1e326b108120593e802cd0b6577edf7fbb8a87c6841a428722d3b14d", + build_file = "//Bazel:swift_snapshot_testing.BUILD.bazel", + ) + def _non_bzlmod_deps_impl(_): non_bzlmod_repositories() diff --git a/Bazel/swift_snapshot_testing.BUILD.bazel b/Bazel/swift_snapshot_testing.BUILD.bazel new file mode 100644 index 00000000..e617ccbf --- /dev/null +++ b/Bazel/swift_snapshot_testing.BUILD.bazel @@ -0,0 +1,14 @@ +""" +Defines build targets for pointfreeco/swift-snapshot-testing. +""" + +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "SnapshotTesting", + srcs = glob(["Sources/SnapshotTesting/**/*.swift"]), + deps = [], + tags = ["manual"], + visibility = ["//visibility:public"], + testonly = True, +) diff --git a/MODULE.bazel b/MODULE.bazel index 4b3db2d8..79b68771 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,6 +26,7 @@ non_bzlmod_deps = use_extension("//Bazel:non_bzlmod_deps.bzl", "non_bzlmod_deps" use_repo( non_bzlmod_deps, "ios_snapshot_test_case", + "swift_snapshot_testing", ) apple_cc_configure = use_extension("@apple_support//crosstool:setup.bzl", "apple_cc_configure_extension") diff --git a/README.md b/README.md index e52498b7..de6c8922 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,71 @@ github "cashapp/AccessibilitySnapshot" ``` +
+

Bazel

+ +Add the following to your `MODULE.bazel` file: + +```starlark +bazel_dep( + name = "accessibility_snapshot", + version = "x.x.x", +) +``` + +Use the provided targets in the `BUILD.bazel` files. There is a `*_library` target for each target suffixed with `.lib` that can be used as a dependency. Without the suffix you will get an `ios_framework` target (dynamic). + +```starlark + +swift_library( + name = "MyLibrary", + ..., + deps = [ + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore.lib", + ], +) +``` + +To use [iOSSnapshotTestCase](https://github.com/uber/ios-snapshot-test-case) you can add a dependency on the `//Sources/AccessibilitySnapshot/iOSSnapshotTestCase:AccessibilitySnapshot_iOSSnapshotTestCase` targets. + +For example: + +```starlark +swift_test( + name = "MyLibraryTests", + ..., + deps = [ + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore.lib", + "//Sources/AccessibilitySnapshot/iOSSnapshotTestCase:AccessibilitySnapshot_iOSSnapshotTestCase", + ], +) +``` + +```swift +import AccessibilitySnapshot_iOSSnapshotTestCase +``` + +To use [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing) you can add a dependency on the `//Sources/AccessibilitySnapshot/SnapshotTesting:AccessibilitySnapshot_SnapshotTesting` targets. + +For example: + +```starlark +swift_test( + name = "MyLibraryTests", + ..., + deps = [ + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore.lib", + "//Sources/AccessibilitySnapshot/SnapshotTesting:AccessibilitySnapshot_SnapshotTesting", + ], +) +``` + +```swift +import AccessibilitySnapshot_SnapshotTesting +``` + +
+ ## Usage AccessibilitySnapshot builds on top of existing snapshot frameworks to add support for snapshotting your app's accessibility. By default it uses the [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing) framework for snapshotting, but can be switched over to [iOSSnapshotTestCase](https://github.com/uber/ios-snapshot-test-case) as well. diff --git a/Sources/AccessibilitySnapshot/Core/BUILD.bazel b/Sources/AccessibilitySnapshot/Core/BUILD.bazel new file mode 100644 index 00000000..63905423 --- /dev/null +++ b/Sources/AccessibilitySnapshot/Core/BUILD.bazel @@ -0,0 +1,73 @@ +load( + "@build_bazel_rules_apple//apple:ios.bzl", + "ios_framework", +) +load( + "@build_bazel_rules_swift//swift:swift.bzl", + "swift_library", +) + +# -- AccessibilitySnapshotCore + +swift_library( + name = "AccessibilitySnapshotCore.lib", + srcs = glob( + ["Swift/**/*.swift"], + allow_empty = False, + ), + data = glob( + ["Swift/Assets/**/*"], + allow_empty = True, + ), + defines = ["BAZEL_PACKAGE"], + module_name = "AccessibilitySnapshotCore", + tags = ["manual"], + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshotCore_ObjC.lib"], +) + +ios_framework( + name = "AccessibilitySnapshotCore", + bundle_id = "com.squareup.AccessibilitySnapshotCore", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = "13.0", + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshotCore.lib"], +) + +# -- AccessibilitySnapshotCore_ObjC + +objc_library( + name = "AccessibilitySnapshotCore_ObjC.lib", + srcs = glob( + ["ObjC/**/*.m"], + allow_empty = False, + ), + hdrs = glob( + ["ObjC/include/**/*.h"], + allow_empty = False, + ), + defines = ["BAZEL_PACKAGE"], + includes = ["ObjC/include"], + module_name = "AccessibilitySnapshotCore_ObjC", + tags = ["manual"], + visibility = ["//visibility:public"], + deps = [], +) + +ios_framework( + name = "AccessibilitySnapshotCore_ObjC", + bundle_id = "com.squareup.AccessibilitySnapshotCore_ObjC", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = "13.0", + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshotCore_ObjC.lib"], +) diff --git a/Sources/Info.plist b/Sources/AccessibilitySnapshot/Core/Info.plist similarity index 100% rename from Sources/Info.plist rename to Sources/AccessibilitySnapshot/Core/Info.plist diff --git a/Sources/AccessibilitySnapshot/SnapshotTesting/BUILD.bazel b/Sources/AccessibilitySnapshot/SnapshotTesting/BUILD.bazel new file mode 100644 index 00000000..6b424a3b --- /dev/null +++ b/Sources/AccessibilitySnapshot/SnapshotTesting/BUILD.bazel @@ -0,0 +1,37 @@ +load( + "@build_bazel_rules_apple//apple:ios.bzl", + "ios_framework", +) +load( + "@build_bazel_rules_swift//swift:swift.bzl", + "swift_library", +) + +swift_library( + name = "AccessibilitySnapshot_SnapshotTesting.lib", + testonly = True, + srcs = glob(["**/*.swift"]), + defines = ["BAZEL_PACKAGE"], + module_name = "AccessibilitySnapshot_SnapshotTesting", + tags = ["manual"], + visibility = ["//visibility:public"], + deps = [ + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore.lib", + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore_ObjC.lib", + "@swift_snapshot_testing//:SnapshotTesting", + ], +) + +ios_framework( + name = "AccessibilitySnapshot_SnapshotTesting", + testonly = True, + bundle_id = "com.squareup.AccessibilitySnapshot", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = "13.0", + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshot_SnapshotTesting.lib"], +) diff --git a/Sources/AccessibilitySnapshot/SnapshotTesting/Info.plist b/Sources/AccessibilitySnapshot/SnapshotTesting/Info.plist new file mode 100644 index 00000000..609619b0 --- /dev/null +++ b/Sources/AccessibilitySnapshot/SnapshotTesting/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + NSPrincipalClass + + + diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/BUILD.bazel b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/BUILD.bazel new file mode 100644 index 00000000..6188fbbf --- /dev/null +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/BUILD.bazel @@ -0,0 +1,74 @@ +load( + "@build_bazel_rules_apple//apple:ios.bzl", + "ios_framework", +) +load( + "@build_bazel_rules_swift//swift:swift.bzl", + "swift_library", +) + +# -- AccessibilitySnapshot_iOSSnapshotTestCase + +swift_library( + name = "AccessibilitySnapshot_iOSSnapshotTestCase.lib", + testonly = True, + srcs = glob(["Swift/**/*.swift"]), + defines = ["BAZEL_PACKAGE"], + module_name = "AccessibilitySnapshot_iOSSnapshotTestCase", + tags = ["manual"], + visibility = ["//visibility:public"], + deps = [ + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore.lib", + "//Sources/AccessibilitySnapshot/Core:AccessibilitySnapshotCore_ObjC.lib", + "@ios_snapshot_test_case//:iOSSnapshotTestCase", + ], +) + +ios_framework( + name = "AccessibilitySnapshot_iOSSnapshotTestCase", + testonly = True, + bundle_id = "com.squareup.AccessibilitySnapshot", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = "13.0", + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshot_iOSSnapshotTestCase.lib"], +) + +# -- AccessibilitySnapshot_iOSSnapshotTestCase_ObjC + +objc_library( + name = "AccessibilitySnapshot_iOSSnapshotTestCase_ObjC.lib", + testonly = True, + srcs = glob( + ["ObjC/**/*.m"], + allow_empty = False, + ), + hdrs = glob( + ["ObjC/include/**/*.h"], + allow_empty = False, + ), + defines = ["BAZEL_PACKAGE"], + includes = ["ObjC/include"], + module_name = "AccessibilitySnapshot_iOSSnapshotTestCase_ObjC", + tags = ["manual"], + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshot_iOSSnapshotTestCase.lib"], +) + +ios_framework( + name = "AccessibilitySnapshot_iOSSnapshotTestCase_ObjC", + testonly = True, + bundle_id = "com.squareup.AccessibilitySnapshot_ObjC", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = "13.0", + visibility = ["//visibility:public"], + deps = [":AccessibilitySnapshot_iOSSnapshotTestCase_ObjC.lib"], +) diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Info.plist b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Info.plist new file mode 100644 index 00000000..609619b0 --- /dev/null +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + NSPrincipalClass + + +