Calculate core version with 'git describe' and update automatically in changelog as well #4403
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-arm | |
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}} | |
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' | |
- 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 | |
working-directory: ./flutter/realm_flutter/tests | |
- 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: ./flutter/realm_flutter/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}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 | |
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@v2 | |
- 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." | |
- 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 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 | |
working-directory: ./flutter/realm_flutter/tests | |
- 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: ./flutter/realm_flutter/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] | |
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: | |
- 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}} |