From a7f912233c429533def63657e31cc217a4a3e5ac Mon Sep 17 00:00:00 2001
From: Sebastian Villena <97059974+ruisebas@users.noreply.github.com>
Date: Wed, 1 Nov 2023 18:11:11 -0400
Subject: [PATCH] chore: Building per platform and running tests without
building
---
.../build_amplify_swift_for_testing.yml | 68 +++++
.github/workflows/build_and_test_amplify.yml | 237 +++++++++++-------
.github/workflows/run_unit_tests.yml | 15 +-
.../xcschemes/Amplify-Package.xcscheme | 200 +++++++++------
4 files changed, 333 insertions(+), 187 deletions(-)
create mode 100644 .github/workflows/build_amplify_swift_for_testing.yml
diff --git a/.github/workflows/build_amplify_swift_for_testing.yml b/.github/workflows/build_amplify_swift_for_testing.yml
new file mode 100644
index 0000000000..dc78d7267e
--- /dev/null
+++ b/.github/workflows/build_amplify_swift_for_testing.yml
@@ -0,0 +1,68 @@
+name: Build the Amplify Package for Testing
+on:
+ workflow_call:
+ inputs:
+ platform:
+ type: string
+ required: true
+
+permissions:
+ contents: read
+ actions: write
+
+jobs:
+ build-amplify-swift:
+ name: Build Amplify-Package | ${{ inputs.platform }}
+ runs-on: macos-13
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 #v3.5.3
+ with:
+ persist-credentials: false
+
+ - name: Get build parameters for ${{ inputs.platform }}
+ id: platform
+ uses: ./.github/composite_actions/get_platform_parameters
+ with:
+ platform: ${{ inputs.platform }}
+ xcode_version: '14.3'
+
+ - name: Attempt to use the dependencies cache
+ id: dependencies-cache
+ timeout-minutes: 4
+ continue-on-error: true
+ uses: actions/cache/restore@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
+ with:
+ path: ~/Library/Developer/Xcode/DerivedData/Amplify
+ key: amplify-packages-${{ hashFiles('Package.resolved') }}
+ restore-keys: |
+ amplify-packages-
+
+ - name: Attempt to restore the build cache from main
+ id: build-cache
+ timeout-minutes: 4
+ continue-on-error: true
+ uses: actions/cache/restore@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
+ with:
+ path: ${{ github.workspace }}/Build
+ key: Amplify-${{ inputs.platform }}-cache-main
+
+ - name: Build Amplify-Package for Testing
+ id: build-package
+ continue-on-error: true
+ uses: ./.github/composite_actions/run_xcodebuild
+ with:
+ scheme: Amplify-Package
+ destination: ${{ steps.platform.outputs.destination }}
+ sdk: ${{ steps.platform.outputs.sdk }}
+ xcode_path: /Applications/Xcode_14.3.app
+ cloned_source_packages_path: ~/Library/Developer/Xcode/DerivedData/Amplify
+ derived_data_path: ${{ github.workspace }}/Build
+ disable_package_resolution: ${{ steps.dependencies-cache.outputs.cache-hit }}
+ build_for_testing: true
+
+ - name: Save the build cache
+ uses: actions/cache/save@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
+ with:
+ path: ${{ github.workspace }}/Build
+ key: Amplify-${{ inputs.platform }}-cache-${{ github.ref_name }}
\ No newline at end of file
diff --git a/.github/workflows/build_and_test_amplify.yml b/.github/workflows/build_and_test_amplify.yml
index e120f18447..d04ce8d2a8 100644
--- a/.github/workflows/build_and_test_amplify.yml
+++ b/.github/workflows/build_and_test_amplify.yml
@@ -7,100 +7,157 @@ permissions:
actions: write
jobs:
- build-amplify-swift:
- name: Build for ${{ matrix.platform }}
- runs-on: macos-13
- strategy:
- fail-fast: false
- matrix:
- platform: [iOS, macOS, tvOS, watchOS]
- steps:
- - name: Checkout repository
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 #v3.5.3
- with:
- persist-credentials: false
+ build-amplify-swift-iOS:
+ name: Build for iOS
+ uses: ./.github/workflows/build_amplify_swift_for_testing.yml
+ with:
+ platform: iOS
- - name: Get build parameters for ${{ matrix.platform }}
- id: platform
- uses: ./.github/composite_actions/get_platform_parameters
- with:
- platform: ${{ matrix.platform }}
- xcode_version: '14.3'
-
- - name: Attempt to use the dependencies cache
- id: dependencies-cache
- timeout-minutes: 4
- continue-on-error: true
- uses: actions/cache/restore@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
- with:
- path: ~/Library/Developer/Xcode/DerivedData/Amplify
- key: amplify-packages-${{ hashFiles('Package.resolved') }}
- restore-keys: |
- amplify-packages-
+ build-amplify-swift-macOS:
+ name: Build for macOS
+ uses: ./.github/workflows/build_amplify_swift_for_testing.yml
+ with:
+ platform: macOS
- - name: Attempt to restore the build cache from main
- id: build-cache
- timeout-minutes: 4
- continue-on-error: true
- uses: actions/cache/restore@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
- with:
- path: ${{ github.workspace }}/Build
- key: Amplify-${{ matrix.platform }}-cache-main
+ build-amplify-swift-tvOS:
+ name: Build for tvOS
+ uses: ./.github/workflows/build_amplify_swift_for_testing.yml
+ with:
+ platform: tvOS
- - name: Build Amplify-Package for Testing
- id: build-package
- continue-on-error: true
- uses: ./.github/composite_actions/run_xcodebuild
- with:
- scheme: Amplify-Package
- destination: ${{ steps.platform.outputs.destination }}
- sdk: ${{ steps.platform.outputs.sdk }}
- xcode_path: /Applications/Xcode_14.3.app
- cloned_source_packages_path: ~/Library/Developer/Xcode/DerivedData/Amplify
- derived_data_path: ${{ github.workspace }}/Build
- disable_package_resolution: ${{ steps.dependencies-cache.outputs.cache-hit }}
- build_for_testing: true
-
- - name: Save the build cache
- uses: actions/cache/save@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
- with:
- path: ${{ github.workspace }}/Build
- key: Amplify-${{ matrix.platform }}-cache-${{ github.ref_name }}
+ build-amplify-swift-watchOS:
+ name: Build for watchOS
+ uses: ./.github/workflows/build_amplify_swift_for_testing.yml
+ with:
+ platform: watchOS
- run-unit-tests:
- name: ${{ matrix.scheme.name }} Unit Tests
- needs: [build-amplify-swift]
+ run-unit-tests-iOS:
+ name: ${{ matrix.scheme }} Unit Tests
+ needs: [build-amplify-swift-iOS]
strategy:
fail-fast: false
matrix:
- platform: [iOS, macOS, tvOS, watchOS]
scheme: [
- { name: Amplify, reportCoverage: true },
- { name: AWSPluginsCore, reportCoverage: true },
- { name: AWSAPIPlugin, reportCoverage: true },
- { name: AWSCloudWatchLoggingPlugin, reportCoverage: true },
- { name: AWSCognitoAuthPlugin, reportCoverage: true },
- { name: AWSDataStorePlugin, reportCoverage: true },
- { name: AWSLocationGeoPlugin, reportCoverage: true },
- { name: AWSPredictionsPlugin, reportCoverage: true },
- { name: AWSPinpointAnalyticsPlugin, reportCoverage: true },
- { name: AWSPinpointPushNotificationsPlugin, reportCoverage: true },
- { name: AWSS3StoragePlugin, reportCoverage: true },
- { name: CoreMLPredictionsPlugin, reportCoverage: true },
- { name: InternalAWSPinpointUnitTests, reportCoverage: false },
+ Amplify,
+ AWSPluginsCore,
+ AWSAPIPlugin,
+ AWSCloudWatchLoggingPlugin,
+ AWSCognitoAuthPlugin,
+ AWSDataStorePlugin,
+ AWSLocationGeoPlugin,
+ AWSPredictionsPlugin,
+ AWSPinpointAnalyticsPlugin,
+ AWSPinpointPushNotificationsPlugin,
+ AWSS3StoragePlugin,
+ CoreMLPredictionsPlugin,
+ InternalAWSPinpointUnitTests
]
uses: ./.github/workflows/run_unit_tests.yml
with:
- scheme: ${{ matrix.scheme.name }}
- platform: ${{ matrix.platform }}
+ scheme: ${{ matrix.scheme }}
+ platform: iOS
xcode_version: '14.3'
- generate_coverage_report: ${{ matrix.platform == 'iOS' && matrix.scheme.reportCoverage }}
- build_cache_key: Amplify-${{ matrix.platform }}-cache-${{ github.ref_name }}
+ generate_coverage_report: ${{ matrix.scheme != 'InternalAWSPinpointUnitTests' }}
+ build_cache_key: Amplify-iOS-cache-${{ github.ref_name }}
test_without_building: true
+ delete_build_cache_on_success: ${{ github.ref_name != 'main'}}
+
+ run-unit-tests-macOS:
+ name: ${{ matrix.scheme }} Unit Tests
+ needs: [build-amplify-swift-macOS]
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: [
+ Amplify,
+ AWSPluginsCore,
+ AWSAPIPlugin,
+ AWSCloudWatchLoggingPlugin,
+ AWSCognitoAuthPlugin,
+ AWSDataStorePlugin,
+ AWSLocationGeoPlugin,
+ AWSPredictionsPlugin,
+ AWSPinpointAnalyticsPlugin,
+ AWSPinpointPushNotificationsPlugin,
+ AWSS3StoragePlugin,
+ CoreMLPredictionsPlugin,
+ InternalAWSPinpointUnitTests
+ ]
+ uses: ./.github/workflows/run_unit_tests.yml
+ with:
+ scheme: ${{ matrix.scheme }}
+ platform: macOS
+ xcode_version: '14.3'
+ generate_coverage_report: false
+ build_cache_key: Amplify-macOS-cache-${{ github.ref_name }}
+ test_without_building: true
+ delete_build_cache_on_success: ${{ github.ref_name != 'main'}}
+
+ run-unit-tests-tvOS:
+ name: ${{ matrix.scheme }} Unit Tests
+ needs: [build-amplify-swift-tvOS]
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: [
+ Amplify,
+ AWSPluginsCore,
+ AWSAPIPlugin,
+ AWSCloudWatchLoggingPlugin,
+ AWSCognitoAuthPlugin,
+ AWSDataStorePlugin,
+ AWSLocationGeoPlugin,
+ AWSPredictionsPlugin,
+ AWSPinpointAnalyticsPlugin,
+ AWSPinpointPushNotificationsPlugin,
+ AWSS3StoragePlugin,
+ CoreMLPredictionsPlugin,
+ InternalAWSPinpointUnitTests
+ ]
+ uses: ./.github/workflows/run_unit_tests.yml
+ with:
+ scheme: ${{ matrix.scheme }}
+ platform: tvOS
+ xcode_version: '14.3'
+ generate_coverage_report: false
+ build_cache_key: Amplify-tvOS-cache-${{ github.ref_name }}
+ test_without_building: true
+ delete_build_cache_on_success: ${{ github.ref_name != 'main'}}
+
+ run-unit-tests-watchOS:
+ name: ${{ matrix.scheme }} Unit Tests
+ needs: [build-amplify-swift-watchOS]
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: [
+ Amplify,
+ AWSPluginsCore,
+ AWSAPIPlugin,
+ AWSCloudWatchLoggingPlugin,
+ AWSCognitoAuthPlugin,
+ AWSDataStorePlugin,
+ AWSLocationGeoPlugin,
+ AWSPredictionsPlugin,
+ AWSPinpointAnalyticsPlugin,
+ AWSPinpointPushNotificationsPlugin,
+ AWSS3StoragePlugin,
+ CoreMLPredictionsPlugin,
+ InternalAWSPinpointUnitTests
+ ]
+ uses: ./.github/workflows/run_unit_tests.yml
+ with:
+ scheme: ${{ matrix.scheme }}
+ platform: watchOS
+ xcode_version: '14.3'
+ generate_coverage_report: false
+ build_cache_key: Amplify-watchOS-cache-${{ github.ref_name }}
+ test_without_building: true
+ delete_build_cache_on_success: ${{ github.ref_name != 'main'}}
report-coverage:
name: ${{ matrix.file.scheme }} Coverage Report
- needs: [run-unit-tests]
+ needs: [run-unit-tests-iOS]
strategy:
fail-fast: false
matrix:
@@ -123,28 +180,16 @@ jobs:
scheme: ${{ matrix.file.scheme }}
flags: ${{ matrix.file.flags }}
- delete-package-cache:
- if: github.ref_name != 'main'
- name: Delete ${{ matrix.platform }} cache
- runs-on: ubuntu-latest
- needs: [run-unit-tests]
- continue-on-error: true
- env:
- GH_TOKEN: ${{ github.token }}
- strategy:
- fail-fast: false
- matrix:
- platform: [iOS, macOS, tvOS, watchOS]
- steps:
- - run: |
- gh cache delete Amplify-${{ matrix.platform }}-cache-${{ github.ref_name }}
- shell: bash
-
unit-test-pass-confirmation:
runs-on: ubuntu-latest
name: Confirm Passing Unit Tests
if: ${{ !cancelled() }}
- needs: [ run-unit-tests ]
+ needs: [
+ run-unit-tests-iOS,
+ run-unit-tests-macOS,
+ run-unit-tests-tvOS,
+ run-unit-tests-watchOS
+ ]
env:
EXIT_CODE: ${{ contains(needs.*.result, 'failure') && 1 || 0 }}
steps:
diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml
index e0ed630279..6383499913 100644
--- a/.github/workflows/run_unit_tests.yml
+++ b/.github/workflows/run_unit_tests.yml
@@ -36,6 +36,10 @@ on:
type: boolean
required: false
default: false
+ delete_build_cache_on_success:
+ required: false
+ type: boolean
+ default: false
permissions:
contents: read
@@ -112,8 +116,8 @@ jobs:
test_without_building: ${{ inputs.test_without_building && steps.dependencies-cache.outputs.cache-hit}}
other_flags: -test-iterations 3 -retry-tests-on-failure
- - name: Delete the old build cache on main
- if: github.ref_name == 'main' && steps.build-cache.outputs.cache-hit
+ - name: Delete the build cache
+ if: ${{ inputs.delete_build_cache_on_success && steps.build-cache.outputs.cache-hit }}
env:
GH_TOKEN: ${{ github.token }}
continue-on-error: true
@@ -121,13 +125,6 @@ jobs:
gh cache delete ${{ steps.build-cache.outputs.cache-primary-key }}
shell: bash
- - name: Save the new build cache on main
- if: github.ref_name == 'main'
- uses: actions/cache/save@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
- with:
- path: ${{ github.workspace }}/Build
- key: ${{ steps.build-cache.outputs.cache-primary-key }}
-
- name: Store Coverage Report File
if: ${{ inputs.generate_coverage_report == true }}
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce #v3.1.2
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/Amplify-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/Amplify-Package.xcscheme
index 0da3673ffa..ee77e8cc78 100644
--- a/.swiftpm/xcode/xcshareddata/xcschemes/Amplify-Package.xcscheme
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/Amplify-Package.xcscheme
@@ -9,8 +9,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -597,16 +653,6 @@
ReferencedContainer = "container:">
-
-
-
-
-
-
-
-