RDART-1010: Allow configuration of generator per realm model class #4887
Workflow file for this run
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: Realm Dart CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
env: | |
REALM_CI: true | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
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: Build combine Android | |
needs: build-android | |
uses: ./.github/workflows/binary-combine-android.yml | |
build-ios-xcframework: | |
name: Build combine iOS | |
needs: build-ios | |
uses: ./.github/workflows/binary-combine-ios.yml | |
# Dart jobs | |
deploy-cluster-dart-windows: | |
name: Deploy Cluster for Dart Windows | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: dw${{ github.run_id }}${{ github.run_attempt }} | |
dart-tests-windows: | |
name: Dart Tests Windows | |
uses: ./.github/workflows/dart-desktop-tests.yml | |
needs: | |
- build-windows | |
- deploy-cluster-dart-windows | |
secrets: inherit | |
with: | |
os: windows | |
runner: windows-latest | |
differentiator: dw${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-dart-windows: | |
name: Cleanup Cluster for Dart Windows | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- dart-tests-windows | |
secrets: inherit | |
with: | |
differentiator: dw${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-dart-macos: | |
name: Deploy Cluster for Dart MacOS | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: dm${{ github.run_id }}${{ github.run_attempt }} | |
dart-tests-macos: | |
name: Dart Tests MacOS | |
uses: ./.github/workflows/dart-desktop-tests.yml | |
needs: | |
- build-macos | |
- deploy-cluster-dart-macos | |
secrets: inherit | |
with: | |
os: macos | |
runner: macos-latest | |
differentiator: dm${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-dart-macos: | |
name: Cleanup Cluster for Dart macOS | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- dart-tests-macos | |
secrets: inherit | |
with: | |
differentiator: dm${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-dart-macos-arm: | |
name: Deploy Cluster for Dart MacOS Arm | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: dma${{ github.run_id }}${{ github.run_attempt }} | |
dart-tests-macos-arm: | |
name: Dart Tests MacOS Arm | |
uses: ./.github/workflows/dart-desktop-tests.yml | |
needs: | |
- build-macos | |
- deploy-cluster-dart-macos-arm | |
secrets: inherit | |
with: | |
os: macos | |
runner: macos-14 | |
architecture: arm | |
differentiator: dma${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-dart-macos-arm: | |
name: Cleanup Cluster for Dart macOS Arm | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- dart-tests-macos-arm | |
secrets: inherit | |
with: | |
differentiator: dma${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-dart-linux: | |
name: Deploy Cluster for Dart Linux | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: dl${{ github.run_id }}${{ github.run_attempt }} | |
dart-tests-linux: | |
name: Dart Tests Linux | |
uses: ./.github/workflows/dart-desktop-tests.yml | |
needs: | |
- build-linux | |
- deploy-cluster-dart-linux | |
secrets: inherit | |
with: | |
os: linux | |
runner: ubuntu-latest | |
differentiator: dl${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-dart-linux: | |
name: Cleanup Cluster for Dart Linux | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- dart-tests-linux | |
secrets: inherit | |
with: | |
differentiator: dl${{ github.run_id }}${{ github.run_attempt }} | |
# Flutter jobs | |
deploy-cluster-flutter-windows: | |
name: Deploy Cluster for Flutter Windows | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: fw${{ github.run_id }}${{ github.run_attempt }} | |
flutter-tests-windows: | |
name: Flutter Tests Windows | |
uses: ./.github/workflows/flutter-desktop-tests.yml | |
needs: | |
- build-windows | |
- deploy-cluster-flutter-windows | |
secrets: inherit | |
with: | |
os: windows | |
runner: windows-latest | |
differentiator: fw${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-flutter-windows: | |
name: Cleanup Cluster for Flutter Windows | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- flutter-tests-windows | |
secrets: inherit | |
with: | |
differentiator: fw${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-flutter-macos: | |
name: Deploy Cluster for Flutter MacOS | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: fm${{ github.run_id }}${{ github.run_attempt }} | |
flutter-tests-macos: | |
name: Flutter Tests MacOS | |
uses: ./.github/workflows/flutter-desktop-tests.yml | |
needs: | |
- build-macos | |
- deploy-cluster-flutter-macos | |
secrets: inherit | |
with: | |
os: macos | |
runner: macos-13 # workaround to: https://github.com/flutter/flutter/issues/118469 latest is still macos-12 ¯\_(ツ)_/¯ | |
differentiator: fm${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-flutter-macos: | |
name: Cleanup Cluster for Flutter macOS | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- flutter-tests-macos | |
secrets: inherit | |
with: | |
differentiator: fm${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-flutter-linux: | |
name: Deploy Cluster for Flutter Linux | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: fl${{ github.run_id }}${{ github.run_attempt }} | |
flutter-tests-linux: | |
name: Flutter Tests Linux | |
uses: ./.github/workflows/flutter-desktop-tests.yml | |
needs: | |
- build-linux | |
- deploy-cluster-flutter-linux | |
secrets: inherit | |
with: | |
os: linux | |
runner: ubuntu-latest | |
differentiator: fl${{ github.run_id }}${{ github.run_attempt }} | |
cleanup-cluster-flutter-linux: | |
name: Cleanup Cluster for Flutter Linux | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- flutter-tests-linux | |
secrets: inherit | |
with: | |
differentiator: fl${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-flutter-ios: | |
name: Deploy Cluster for Flutter iOS | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: fi${{ github.run_id }}${{ github.run_attempt }} | |
flutter-tests-ios: | |
runs-on: macos-latest | |
name: Flutter Tests iOS | |
timeout-minutes: 45 | |
needs: | |
- deploy-cluster-flutter-ios | |
- build-ios-xcframework | |
env: | |
BAAS_DIFFERENTIATOR: fi${{ github.run_id }}${{ github.run_attempt }} | |
BAAS_BAASAAS_API_KEY: ${{ secrets.BAASAAS_API_KEY}} | |
defaults: | |
run: | |
working-directory: packages/realm/tests | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
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@v4 | |
with: | |
name: librealm-ios | |
path: packages/realm_dart/binary/ios | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'stable' | |
- name: Setup Melos | |
run: | | |
dart pub global activate melos | |
dart pub global run melos bootstrap | |
- name: Install dependencies | |
run: dart pub get | |
- name: Launch Simulator | |
uses: futureware-tech/simulator-action@v3 | |
with: | |
model: 'iPhone SE (3rd generation)' | |
os: 'iOS' | |
os_version: '>= 14.0' | |
- name: Run tests on iOS Simulator | |
run: | | |
flutter test integration_test/all_tests.dart \ | |
--dart-define=BAAS_BAASAAS_API_KEY=$BAAS_BAASAAS_API_KEY \ | |
--dart-define=BAAS_DIFFERENTIATOR=$BAAS_DIFFERENTIATOR \ | |
--file-reporter=json:test-results.json \ | |
--suppress-analytics | |
- name: Publish Test Report | |
uses: dorny/[email protected] | |
if: success() || failure() | |
with: | |
name: Test Results Flutter iOS | |
path: test-results.json | |
reporter: dart-json | |
only-summary: true | |
working-directory: packages/realm/tests | |
cleanup-cluster-flutter-ios: | |
name: Cleanup Cluster for Flutter iOS | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- flutter-tests-ios | |
secrets: inherit | |
with: | |
differentiator: fi${{ github.run_id }}${{ github.run_attempt }} | |
deploy-cluster-flutter-android: | |
name: Deploy Cluster for Flutter Android | |
uses: ./.github/workflows/deploy-baas.yml | |
secrets: inherit | |
with: | |
differentiator: fa${{ github.run_id }}${{ github.run_attempt }} | |
flutter-tests-android: | |
runs-on: ubuntu-latest | |
name: Flutter Tests Android | |
timeout-minutes: 45 | |
needs: | |
- deploy-cluster-flutter-android | |
- build-android-combined | |
env: | |
BAAS_DIFFERENTIATOR: fa${{ github.run_id }}${{ github.run_attempt }} | |
BAAS_BAASAAS_API_KEY: ${{ secrets.BAASAAS_API_KEY}} | |
defaults: | |
run: | |
working-directory: packages/realm/tests | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
- name: Enable KVM | |
run: | | |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
sudo udevadm control --reload-rules | |
sudo udevadm trigger --name-match=kvm | |
- name: Gradle cache | |
uses: gradle/gradle-build-action@v3 | |
- name: Set up Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Fetch artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: librealm-android | |
path: packages/realm_dart/binary/android | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'stable' | |
- name: Setup Melos | |
run: | | |
dart pub global activate melos | |
dart pub global run melos bootstrap | |
- name: Install dependencies | |
run: dart pub get | |
# Hack to free up space on the runner to ensure we have enough diskspace to run the emulator | |
- name: Remove unnecessary files (dotnet, etc.) | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
# 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@v4 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
key: avd-33-x86_64 | |
- name: Create Android Emulator and generate snapshot for caching | |
if: ${{ steps.avd-cache.outputs.cache-hit != 'true' }} | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
force-avd-creation: false | |
disable-animations: true | |
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
api-level: 31 | |
arch: x86_64 | |
ndk: 25.2.9519653 | |
cmake: 3.10.2.4988404 | |
script: echo "Generated Emulator snapshot for caching." | |
- 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: 31 | |
arch: x86_64 | |
ndk: 25.2.9519653 | |
cmake: 3.10.2.4988404 | |
script: cd packages/realm/tests && flutter test integration_test/all_tests.dart --dart-define=BAAS_BAASAAS_API_KEY=$BAAS_BAASAAS_API_KEY --dart-define=BAAS_DIFFERENTIATOR=$BAAS_DIFFERENTIATOR --file-reporter=json:test-results.json --suppress-analytics | |
- name: Publish Test Report | |
uses: dorny/[email protected] | |
if: success() || failure() | |
with: | |
name: Test Results Flutter Android | |
path: test-results.json | |
reporter: dart-json | |
only-summary: true | |
working-directory: packages/realm/tests | |
cleanup-cluster-flutter-android: | |
name: Cleanup Cluster for Flutter Android | |
uses: ./.github/workflows/terminate-baas.yml | |
if: always() | |
needs: | |
- flutter-tests-android | |
secrets: inherit | |
with: | |
differentiator: fa${{ github.run_id }}${{ github.run_attempt }} | |
# Generator jobs | |
generator: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu, macos, windows] | |
defaults: | |
run: | |
shell: bash | |
working-directory: packages/realm_generator | |
runs-on: ${{ matrix.os }}-latest | |
name: Generator Tests | |
timeout-minutes: 30 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'stable' | |
- name: Setup Melos | |
run: | | |
dart pub global activate melos | |
dart pub global run melos bootstrap | |
- name: Delete generated files in realm_dart | |
run: | | |
find . -name "*.g.dart" -delete | |
find . -name "*.realm.dart" -delete | |
working-directory: packages/realm_dart | |
- name: Run generator in realm_dart | |
run: | | |
dart pub get | |
dart run build_runner build --delete-conflicting-outputs | |
working-directory: packages/realm_dart | |
- name: Run generator in realm_dart/example | |
run: | | |
dart pub get | |
dart run build_runner build --delete-conflicting-outputs | |
working-directory: packages/realm_dart/example | |
- name: Run generator in realm/example | |
run: | | |
dart pub get | |
dart run build_runner build --delete-conflicting-outputs | |
working-directory: packages/realm/example | |
- name: Install LLVM | |
run: sudo apt update && sudo apt-get install -y libclang-dev | |
if: ${{ matrix.os == 'ubuntu' }} | |
- name: Run ffigen | |
run: >- | |
dart pub global activate ffigen && | |
dart pub global run ffigen --config ffigen.yaml | |
working-directory: packages/realm_dart/ | |
- 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 | |
coverage-finished: | |
needs: | |
- 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 | |
slack-on-failure: | |
name: Report failure in main branch | |
needs: | |
- dart-tests-linux | |
- dart-tests-macos | |
- dart-tests-macos-arm | |
- dart-tests-windows | |
- flutter-tests-linux | |
- flutter-tests-macos | |
- flutter-tests-windows | |
- flutter-tests-ios | |
- flutter-tests-android | |
runs-on: ubuntu-latest | |
if: always() && github.ref == 'refs/heads/main' | |
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}} |