Skip to content

use Dart 3.0.6 for linux CI #3942

use Dart 3.0.6 for linux CI

use Dart 3.0.6 for linux CI #3942

Workflow file for this run

name: Realm Dart CI
on:
push:
branches:
- main
pull_request:
env:
BAAS_URL: ${{ secrets.REALM_QA_URL }}
BAAS_API_KEY: ${{ secrets.ATLAS_QA_PUBLIC_API_KEY }}
BAAS_PRIVATE_API_KEY: ${{ secrets.ATLAS_QA_PRIVATE_API_KEY }}
BAAS_PROJECT_ID: ${{ secrets.ATLAS_QA_PROJECT_ID}}
REALM_CI: true
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
deploy-dart-cluster:
name: Deploy Dart cluster
secrets: inherit
uses: ./.github/workflows/create-cluster.yml
with:
prefix: d
deploy-flutter-cluster:
name: Deploy Flutter cluster
secrets: inherit
uses: ./.github/workflows/create-cluster.yml
with:
prefix: f
create-dart-shared-apps:
name: Create Dart shared Apps
secrets: inherit
needs:
- deploy-dart-cluster
uses: ./.github/workflows/shared-apps.yml
with:
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
env: Dart
create-flutter-shared-apps:
name: Create Flutter shared Apps
secrets: inherit
needs:
- deploy-flutter-cluster
uses: ./.github/workflows/shared-apps.yml
with:
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
env: Flutter
delete-dart-cluster:
runs-on: ubuntu-latest
name: Delete Dart Cluster
timeout-minutes: 5
continue-on-error: true
needs:
- deploy-dart-cluster
- dart-tests-windows
- dart-tests-macos
- dart-tests-macos-arm
- dart-tests-linux
- dart-tests-linux-ubuntu-20
steps:
- uses: realm/ci-actions/mdb-realm/cleanup@338bf3e7575015a28faec8b67614385d122aece7
with:
realmUrl: ${{ env.BAAS_URL }}
atlasUrl: ${{ secrets.ATLAS_QA_URL }}
projectId: ${{ env.BAAS_PROJECT_ID }}
apiKey: ${{ env.BAAS_API_KEY }}
privateApiKey: ${{ env.BAAS_PRIVATE_API_KEY }}
clusterName: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
delete-flutter-cluster:
runs-on: ubuntu-latest
name: Delete Flutter Cluster
timeout-minutes: 5
continue-on-error: true
needs:
- deploy-flutter-cluster
- flutter-desktop-tests-windows
- flutter-desktop-tests-macos
- flutter-desktop-tests-linux
- flutter-desktop-tests-linux-ubuntu-20
- flutter-ios
- flutter-android
steps:
- uses: realm/ci-actions/mdb-realm/cleanup@338bf3e7575015a28faec8b67614385d122aece7
with:
realmUrl: ${{ env.BAAS_URL }}
atlasUrl: ${{ secrets.ATLAS_QA_URL }}
projectId: ${{ env.BAAS_PROJECT_ID }}
apiKey: ${{ env.BAAS_API_KEY }}
privateApiKey: ${{ env.BAAS_PRIVATE_API_KEY }}
clusterName: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
cleanup-dart-shared-apps:
name: Delete Dart shared Apps
secrets: inherit
needs:
- deploy-dart-cluster
- dart-tests-windows
- dart-tests-macos
- dart-tests-macos-arm
- dart-tests-linux
- dart-tests-linux-ubuntu-20
uses: ./.github/workflows/shared-apps.yml
if: always()
with:
cleanup: true
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
env: Dart
cleanup-flutter-shared-apps:
name: Delete Flutter shared Apps
secrets: inherit
needs:
- deploy-flutter-cluster
- flutter-desktop-tests-windows
- flutter-desktop-tests-macos
- flutter-desktop-tests-linux
- flutter-desktop-tests-linux-ubuntu-20
- flutter-ios
- flutter-android
uses: ./.github/workflows/shared-apps.yml
if: always()
with:
cleanup: true
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
env: Flutter
cleanup-dart-matrix:
needs:
- deploy-dart-cluster
- dart-tests-windows
- dart-tests-macos
- dart-tests-macos-arm
- dart-tests-linux
- dart-tests-linux-ubuntu-20
strategy:
fail-fast: false
matrix:
include:
- app: dm
description: dart macos
- app: dma
description: dart macos-arm
- app: dl
description: dart linux
- app: dl2
description: dart linux (ubuntu 20)
- app: dw
description: dart windows
runs-on: ubuntu-latest
name: Cleanup apps for ${{ matrix.description }}
timeout-minutes: 20
if: always()
env:
BAAS_CLUSTER: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
BAAS_DIFFERENTIATOR: ${{ matrix.app }}${{ github.run_id }}${{ github.run_attempt }}
steps:
- name: Checkout
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
submodules: false
- name : Setup Dart SDK
uses: dart-lang/setup-dart@main
with:
sdk: stable
- name: Cleanup Dart apps
run: |
dart run realm_dart delete-apps \
--baas-url ${{ env.BAAS_URL }} \
--atlas-cluster ${{ env.BAAS_CLUSTER }} \
--api-key ${{ env.BAAS_API_KEY }} \
--private-api-key ${{ env.BAAS_PRIVATE_API_KEY }} \
--project-id ${{ env.BAAS_PROJECT_ID }} \
--differentiator '${{ env.BAAS_DIFFERENTIATOR }}'
cleanup-flutter-matrix:
needs:
- deploy-flutter-cluster
- flutter-desktop-tests-windows
- flutter-desktop-tests-macos
- flutter-desktop-tests-linux
- flutter-desktop-tests-linux-ubuntu-20
- flutter-ios
- flutter-android
strategy:
fail-fast: false
matrix:
include:
- app: fm
description: flutter macos
- app: fl
description: flutter linux
- app: fl2
description: flutter linux (ubuntu 20)
- app: fw
description: flutter windows
- app: fa
description: flutter android
- app: fi
description: flutter iOS
runs-on: ubuntu-latest
name: Cleanup apps for ${{ matrix.description }}
timeout-minutes: 20
if: always()
env:
BAAS_CLUSTER: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
BAAS_DIFFERENTIATOR: ${{ matrix.app }}${{ github.run_id }}${{ github.run_attempt }}
steps:
- name: Checkout
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
submodules: false
- name : Setup Dart SDK
uses: dart-lang/setup-dart@main
with:
sdk: stable
- name: Cleanup Flutter apps
run: |
dart run realm_dart delete-apps \
--baas-url ${{ env.BAAS_URL }} \
--atlas-cluster ${{ env.BAAS_CLUSTER }} \
--api-key ${{ env.BAAS_API_KEY }} \
--private-api-key ${{ env.BAAS_PRIVATE_API_KEY }} \
--project-id ${{ env.BAAS_PROJECT_ID }} \
--differentiator '${{ env.BAAS_DIFFERENTIATOR }}'
build-windows:
name: Build Windows
uses: ./.github/workflows/build-native.yml
with:
runner: windows-latest
binary: windows
build: '["windows"]'
build-macos:
name: Build MacOS
uses: ./.github/workflows/build-native.yml
with:
runner: macos-latest
binary: macos
build: '["macos"]'
build-linux:
name: Build Linux
uses: ./.github/workflows/build-native.yml
with:
runner: ubuntu-20.04 # Building on the lowest possible Linux (Ubuntu) version for compatibility
binary: linux
build: '["linux"]'
build-android:
name: Build Android
uses: ./.github/workflows/build-native.yml
with:
runner: ubuntu-20.04
binary: android
build: '["android-x86", "android-x86_64", "android-armeabi-v7a", "android-arm64-v8a"]'
build-ios:
name: Build IOS
uses: ./.github/workflows/build-native.yml
with:
runner: macos-latest
binary: ios
build: '["ios-device", "ios-simulator", "ios-catalyst"]'
build-android-combined:
name: Android binaries combine
needs: build-android
uses: ./.github/workflows/binary-combine-android.yml
build-ios-xcframework:
name: IOS binaries combine
needs: build-ios
uses: ./.github/workflows/binary-combine-ios.yml
# Dart jobs
dart-tests-windows:
name: Windows Dart Tests
uses: ./.github/workflows/dart-desktop-tests.yml
needs:
- build-windows
- deploy-dart-cluster
- create-dart-shared-apps
secrets: inherit
with:
os: windows
runner: windows-latest
app: dw
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
dart-tests-macos:
name: MacOS Dart Tests
uses: ./.github/workflows/dart-desktop-tests.yml
needs:
- build-macos
- deploy-dart-cluster
- create-dart-shared-apps
secrets: inherit
with:
os: macos
runner: macos-latest
app: dm
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
dart-tests-macos-arm:
name: MacOS Arm Dart Tests
uses: ./.github/workflows/dart-desktop-tests.yml
needs:
- build-macos
- deploy-dart-cluster
- create-dart-shared-apps
secrets: inherit
with:
os: macos
runner: macos-arm
architecture: arm
app: dma
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
dart-tests-linux:
name: Linux Dart Tests
uses: ./.github/workflows/dart-desktop-tests.yml
needs:
- build-linux
- deploy-dart-cluster
- create-dart-shared-apps
secrets: inherit
with:
os: linux
runner: ubuntu-latest
app: dl
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
dart-tests-linux-ubuntu-20:
name: Linux Dart Tests (ubuntu 20)
uses: ./.github/workflows/dart-desktop-tests.yml
needs:
- build-linux
- deploy-dart-cluster
- create-dart-shared-apps
secrets: inherit
with:
os: linux
runner: ubuntu-20.04
app: dl2
cluster: ${{ needs.deploy-dart-cluster.outputs.clusterName }}
# Flutter jobs
flutter-desktop-tests-windows:
name: Windows Flutter Tests
uses: ./.github/workflows/flutter-desktop-tests.yml
needs:
- build-windows
- deploy-flutter-cluster
- create-flutter-shared-apps
secrets: inherit
with:
os: windows
runner: windows-latest
app: fw
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
flutter-desktop-tests-macos:
name: MacOS Flutter Tests
uses: ./.github/workflows/flutter-desktop-tests.yml
needs:
- build-macos
- deploy-flutter-cluster
- create-flutter-shared-apps
secrets: inherit
with:
os: macos
runner: macos-13 # workaround to: https://github.com/flutter/flutter/issues/118469 latest is still macos-12 ¯\_(ツ)_/¯
app: fm
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
flutter-desktop-tests-linux:
name: Linux Flutter Tests
uses: ./.github/workflows/flutter-desktop-tests.yml
needs:
- build-linux
- deploy-flutter-cluster
- create-flutter-shared-apps
secrets: inherit
with:
os: linux
runner: ubuntu-latest
app: fl
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
flutter-desktop-tests-linux-ubuntu-20:
name: Linux Flutter Tests (ubuntu 20)
uses: ./.github/workflows/flutter-desktop-tests.yml
needs:
- build-linux
- deploy-flutter-cluster
- create-flutter-shared-apps
secrets: inherit
with:
os: linux
runner: ubuntu-20.04
app: fl2
cluster: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
flutter-ios:
runs-on: macos-latest
name: IOS Flutter Tests
timeout-minutes: 45
needs:
- deploy-flutter-cluster
- build-ios-xcframework
- create-flutter-shared-apps
env:
BAAS_CLUSTER: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
BAAS_DIFFERENTIATOR: fi${{ github.run_id }}${{ github.run_attempt }}
steps:
- name: Checkout
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
submodules: 'recursive'
- name: Enable ccache
run: echo "PATH=/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" >> $GITHUB_ENV
- name: Fetch artifacts
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7
with:
name: librealm-ios
path: binary/ios
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Install dependencies
run: dart pub get
- name: Launch Simulator
uses: futureware-tech/simulator-action@v2
with:
model: 'iPhone 8'
os: 'iOS'
os_version: '>= 14.0'
# This will be a no-op under normal circumstances since the cluster would have been deployed
# in deploy-cluster. It is needed in case we want to re-run the job after the cluster has been reaped.
- name: Create cluster
uses: realm/ci-actions/mdb-realm/deploy@338bf3e7575015a28faec8b67614385d122aece7
with:
realmUrl: ${{ env.BAAS_URL }}
atlasUrl: ${{ secrets.ATLAS_QA_URL }}
projectId: ${{ env.BAAS_PROJECT_ID }}
apiKey: ${{ env.BAAS_API_KEY }}
privateApiKey: ${{ env.BAAS_PRIVATE_API_KEY }}
clusterName: ${{ env.BAAS_CLUSTER }}
- name: Run tests on iOS Simulator
run: |
flutter drive --target=test_driver/app.dart --dart-define=testName="" --suppress-analytics --debug
working-directory: ./flutter/realm_flutter/tests
flutter-android:
runs-on: macos-latest
name: Android Flutter Tests
timeout-minutes: 45
needs:
- deploy-flutter-cluster
- build-android-combined
- create-flutter-shared-apps
env:
BAAS_CLUSTER: ${{ needs.deploy-flutter-cluster.outputs.clusterName }}
BAAS_DIFFERENTIATOR: fa${{ github.run_id }}${{ github.run_attempt }}
steps:
- name: Checkout
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
submodules: 'recursive'
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 11
- name: Fetch artifacts
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7
with:
name: librealm-android
path: binary/android
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Install dependencies
run: dart pub get
# TODO: Move CI run tests on Android Emulator into device farm https://github.com/realm/realm-dart/issues/691
- name: Setup Android Emulator cache
uses: actions/cache@v3
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-29
- name: Create Android Emulator and generate snapshot for caching
if: ${{ steps.avd-cache.outputs.cache-hit != 'true' }}
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 29
force-avd-creation: false
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
arch: x86
ndk: 21.0.6113669
cmake: 3.10.2.4988404
script: echo "Generated Emulator snapshot for caching."
# This will be a no-op under normal circumstances since the cluster would have been deployed
# in deploy-cluster. It is needed in case we want to re-run the job after the cluster has been reaped.
- name: Create cluster
uses: realm/ci-actions/mdb-realm/deploy@338bf3e7575015a28faec8b67614385d122aece7
with:
realmUrl: ${{ env.BAAS_URL }}
atlasUrl: ${{ secrets.ATLAS_QA_URL }}
projectId: ${{ env.BAAS_PROJECT_ID }}
apiKey: ${{ env.BAAS_API_KEY }}
privateApiKey: ${{ env.BAAS_PRIVATE_API_KEY }}
clusterName: ${{ env.BAAS_CLUSTER }}
- name: Run tests on Android Emulator
uses: reactivecircus/android-emulator-runner@v2
with:
force-avd-creation: false
disable-animations: true
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
api-level: 29
ndk: 21.0.6113669
arch: x86
cmake: 3.10.2.4988404
script: flutter build apk --debug --target=test_driver/app.dart && flutter install --debug && flutter drive --target=test_driver/app.dart --dart-define=testName="" --suppress-analytics --debug
working-directory: ./flutter/realm_flutter/tests
# Generator jobs
generator:
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
runs-on: ${{ matrix.os }}-latest
name: Generator Tests
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
submodules: 'recursive'
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Delete generated files
run: find . -name "*.g.dart" -not -path "./generator/*" -delete
shell: bash
- name: Run generator in realm-dart repo
run: |
dart pub get
dart run build_runner build --delete-conflicting-outputs
- name: Run generator in realm-dart/example
run: |
dart pub get
dart run build_runner build --delete-conflicting-outputs
working-directory: ./example/
- name: Run generator in realm_flutter/example
run: |
dart pub get
dart run build_runner build --delete-conflicting-outputs
working-directory: ./flutter/realm_flutter/example/
- name: Install LLVM
run: sudo apt update && sudo apt-get install -y libclang-dev
if: ${{ matrix.os == 'ubuntu' }}
- name: Run ffigen
run: dart run ffigen --config config.yaml
working-directory: ./ffigen
- name: Validate there are no uncommitted changes
run: |
changedFiles=$(git --no-pager diff -w)
if [ "$changedFiles" ]; then
git --no-pager diff -w
exit 1
fi
shell: bash
- name: Run generator tests
run: |
dart pub get
dart test -r expanded --coverage ./coverage/ --test-randomize-ordering-seed random
working-directory: ./generator/
- name: Generate generator coverage report
if: matrix.os == 'ubuntu'
run: |
dart run coverage:format_coverage \
--in coverage/ \
--out ./coverage/lcov.info \
--check-ignore \
--lcov \
--packages .dart_tool/package_config.json \
--report-on lib
working-directory: ./generator/
- name: Publish Generator Coverage
if: matrix.os == 'ubuntu'
id: publish-coverage
uses: coverallsapp/github-action@f350da2c033043742f89e8c0b7b5145a1616da6d
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: generator
path-to-lcov: ./generator/coverage/lcov.info
parallel: true
- name: Output Coveralls response
if: matrix.os == 'ubuntu'
run: echo ${{ steps.publish-coverage.outputs.coveralls-api-result }}
coverage-finished:
needs:
- generator
- dart-tests-linux
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
id: publish-coverage
uses: coverallsapp/github-action@f350da2c033043742f89e8c0b7b5145a1616da6d
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
- name: Output Coveralls response
run: echo ${{ steps.publish-coverage.outputs.coveralls-api-result }}
slack-on-failure:
name: Report failure in main branch
needs:
- cleanup-dart-matrix
- cleanup-flutter-matrix
runs-on: ubuntu-latest
if: always()
steps:
# Run this action to set env.WORKFLOW_CONCLUSION
- uses: technote-space/workflow-conclusion-action@45ce8e0eb155657ab8ccf346ade734257fd196a5
- uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f
if: ${{ github.ref == 'refs/heads/main' && env.WORKFLOW_CONCLUSION == 'FAILURE' }}
# Statuses: neutral, success, skipped, cancelled, timed_out, action_required, failure
with:
status: ${{ env.WORKFLOW_CONCLUSION }}
webhook-url: ${{ secrets.SLACK_DART_WEBHOOK }}
channel: '#realm-github-dart'
message: |
*<https://github.com/realm/realm-dart/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}|_{{workflow}}_ run id: ${{ github.run_id }} has status _{{jobStatus}}_ >*
<{{refUrl}}|`{{ref}}` - {{description}}>
{{#if description}}<{{diffUrl}}|branch: `{{diffRef}}`>{{/if}}