Amplify Canaries #251
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Amplify Canaries | |
on: | |
pull_request: | |
paths: | |
- ".github/workflows/amplify_canaries.yaml" | |
schedule: | |
# 6am pacific time daily, only runs on default branch | |
- cron: "0 13 * * *" | |
# Cancels in-progress job when there is another push to same ref. | |
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-or-runs-for-the-current-workflow | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
# Ensure an app pulling in published Amplify libraries can build properly | |
build: | |
runs-on: macos-latest | |
# These permissions are needed to interact with GitHub's OIDC Token endpoint. | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
channel: | |
- "beta" | |
- "stable" | |
flutter-version: | |
- "any" # latest | |
include: | |
- channel: "stable" | |
flutter-version: "3.10.1" | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # 3.6.0 | |
with: | |
persist-credentials: false | |
- name: Install dependencies | |
uses: ./.github/composite_actions/install_dependencies | |
with: | |
channel: ${{ matrix.channel }} | |
flutter-version: ${{ matrix.flutter-version }} | |
# Flutter requires Java 11 to build android apps with Gradle. | |
- uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # 3.12.0 | |
with: | |
distribution: "corretto" # Amazon Corretto Build of OpenJDK | |
java-version: "11" | |
- name: Build Canary (iOS) | |
run: build-support/build_canary.sh ios --no-codesign | |
- name: Build Canary (Android) | |
run: build-support/build_canary.sh apk | |
- name: Log failing builds | |
if: ${{ failure() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: BuildCanaryTestFailure | |
value: 1 | |
dimensions: channel=${{ matrix.channel }} | |
- name: Log succeeding builds | |
if: ${{ success() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: BuildCanaryTestFailure | |
value: 0 | |
dimensions: channel=${{ matrix.channel }} | |
e2e-android: | |
runs-on: | |
labels: amplify-flutter_ubuntu-latest_4-core | |
# These permissions are needed to interact with GitHub's OIDC Token endpoint. | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
channel: | |
- "beta" | |
- "stable" | |
flutter-version: | |
- "any" # latest | |
include: | |
- channel: "stable" | |
flutter-version: "3.10.1" | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # 3.6.0 | |
with: | |
persist-credentials: false | |
submodules: true | |
- name: Install dependencies | |
uses: ./.github/composite_actions/install_dependencies | |
with: | |
channel: ${{ matrix.channel }} | |
flutter-version: ${{ matrix.flutter-version }} | |
# Flutter requires Java 11 to build android apps with Gradle. | |
- uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # 3.12.0 | |
with: | |
distribution: "corretto" # Amazon Corretto Build of OpenJDK | |
java-version: "11" | |
# Must be run before `fetch_backends` so that `pubspec.lock` is present. | |
- name: Pub Upgrade | |
working-directory: canaries | |
run: flutter pub upgrade | |
- name: Fetch Amplify backend configurations | |
uses: ./.github/composite_actions/fetch_backends | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
scope: amplified_todo | |
secret-identifier: ${{ secrets.AWS_SECRET_IDENTIFIER }} | |
- name: Run Canary | |
timeout-minutes: 45 | |
uses: ./.github/composite_actions/launch_android_emulator | |
with: | |
# Perform a build to reduce startup time of `flutter test` and prevent timeout | |
script: cd canaries && flutter build apk --debug && flutter test -d emulator-5554 integration_test/main_test.dart | |
- name: Log failing android runs | |
if: ${{ failure() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: E2ECanaryTestFailure | |
value: 1 | |
dimensions: channel=${{ matrix.channel }},platform=android | |
- name: Log succeeding android runs | |
if: ${{ success() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: E2ECanaryTestFailure | |
value: 0 | |
dimensions: channel=${{ matrix.channel }},platform=android | |
e2e-ios: | |
runs-on: macos-latest-xl | |
# These permissions are needed to interact with GitHub's OIDC Token endpoint. | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
channel: | |
- "beta" | |
- "stable" | |
flutter-version: | |
- "any" # latest | |
include: | |
- channel: "stable" | |
flutter-version: "3.10.1" | |
ios-version: | |
- "14.5" | |
- "16" | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # 3.6.0 | |
with: | |
persist-credentials: false | |
submodules: true | |
- name: Install dependencies | |
uses: ./.github/composite_actions/install_dependencies | |
with: | |
channel: ${{ matrix.channel }} | |
flutter-version: ${{ matrix.flutter-version }} | |
# Must be run before `fetch_backends` so that `pubspec.lock` is present. | |
- name: Pub Upgrade | |
working-directory: canaries | |
run: flutter pub upgrade | |
- name: Fetch Amplify backend configurations | |
uses: ./.github/composite_actions/fetch_backends | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
scope: amplified_todo | |
secret-identifier: ${{ secrets.AWS_SECRET_IDENTIFIER }} | |
- name: Launch iOS simulator | |
uses: ./.github/composite_actions/launch_ios_simulator | |
timeout-minutes: 20 | |
with: | |
ios-version: ${{ matrix.ios-version }} | |
- name: Run iOS integration tests | |
timeout-minutes: 45 | |
working-directory: canaries | |
run: | | |
# Perform a build to reduce startup time of `flutter test` and prevent timeout | |
flutter build ios --simulator --target=integration_test/main_test.dart | |
flutter test -d test integration_test/main_test.dart --verbose | |
- name: Log failing ios runs | |
if: ${{ failure() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: E2ECanaryTestFailure | |
value: 1 | |
dimensions: channel=${{ matrix.channel }},platform=ios | |
- name: Log succeeding ios runs | |
if: ${{ success() }} | |
uses: ./.github/composite_actions/log_metric | |
with: | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
metric-name: E2ECanaryTestFailure | |
value: 0 | |
dimensions: channel=${{ matrix.channel }},platform=ios |