GHA: Enable Sync Tests #510
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: PR Build | |
on: | |
pull_request: | |
paths-ignore: | |
- '**.md' | |
env: | |
REALM_DISABLE_ANALYTICS: true | |
CMAKE_C_COMPILER: /usr/local/opt/ccache/libexec/clang | |
CMAKE_CXX_COMPILER: /usr/local/opt/ccache/libexec/clang++ | |
RELEASE_BRANCHES: "[ 'master', 'releases', 'feature/github-actions' ]" | |
REALM_QA_URL: https://realm-qa.mongodb.com | |
ATLAS_QA_URL: https://cloud-qa.mongodb.com | |
jobs: | |
static-analysis: | |
uses: ./.github/workflows/include-static-analysis.yml | |
deploy-baas: | |
name: Deploy BAAS Cluster | |
uses: ./.github/workflows/include-deploy-baas.yml | |
with: | |
BaseUrl: https://realm-qa.mongodb.com | |
AtlasBaseUrl: https://cloud-qa.mongodb.com | |
secrets: | |
AtlasProjectId: ${{ secrets.ATLAS_QA_PROJECT_ID }} | |
AtlasPublicKey: ${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} | |
AtlasPrivateKey: ${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} | |
check-cache: | |
uses: ./.github/workflows/include-check-cache.yml | |
# TODO The actual build takes 45 seconds. Is there a reason we do this? Is it because swig doesn't work on Windows? | |
build-jni-swig-stub: | |
runs-on: ubuntu-latest | |
needs: check-cache | |
if: needs.check-cache.outputs.jni-swig-stub-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
- name: Load build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/jni-swig-stub/build/generated/sources/jni | |
key: jni-swig-stubs-${{ needs.check-cache.outputs.packages-sha }} | |
# Manually install SWIG 4.1.0 as only 4.0.2 is pre-installed | |
# 4.1.0 is not available in apt-get, so use brew instead | |
# https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#ubuntu-22041-lts | |
# It seems to be required to manually add brew dirs to the PATH. This does not happen automatically. | |
- name: Install SWIG | |
run: | | |
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)" | |
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" | |
test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bash_profile | |
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.profile | |
brew install swig | |
echo "/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH | |
echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH | |
- name: Build JNI Stub | |
working-directory: ./packages | |
run: ./gradlew :jni-swig-stub:assemble -PignoreNativeLibs=true | |
# TODO Do we need to cache something or just built it every time? | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: jni-stub-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/jni-swig-stub/build/generated/sources/jni/* | |
retention-days: 1 | |
build-jvm-linux-native-lib: | |
runs-on: ubuntu-latest | |
needs: [check-cache, build-jni-swig-stub] | |
if: always() && | |
(needs.build-jni-swig-stub.result == 'success' || needs.build-jni-swig-stub.result == 'skipped') && | |
needs.check-cache.outputs.jni-linux-lib-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
- name: Setup build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/cinterop/src/jvmMain/linux-build-dir | |
key: jni-linux-lib-${{ needs.check-cache.outputs.packages-sha }} | |
- name: Restore JNI Swig Stubs | |
uses: actions/download-artifact@v3 | |
with: | |
name: jni-stub-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/jni-swig-stub/build/generated/sources/jni | |
- name: Build Docker image | |
uses: docker/build-push-action@v3 | |
with: | |
tags: jvm-native-lib-linux:latest | |
file: ./packages/cinterop/src/jvmMain/generic.Dockerfile | |
push: false | |
- name: Build native lib | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: jvm-native-lib-linux:latest | |
shell: bash | |
options: -v ${{ github.workspace }}:/work | |
run: | | |
cd /work/packages/cinterop/src/jvmMain/ | |
rm -rf linux-build-dir | |
mkdir linux-build-dir | |
cd linux-build-dir | |
cmake ../../jvm | |
make -j8 | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: jni-linux-lib-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/cinterop/src/jvmMain/linux-build-dir/librealmc.so | |
retention-days: 1 | |
# TODO Is the `if` check enough? Should we also compare the swig stub? | |
build-jvm-windows-native-lib: | |
runs-on: windows-latest | |
needs: [check-cache, build-jni-swig-stub] | |
if: always() && | |
(needs.build-jni-swig-stub.result == 'success' || needs.build-jni-swig-stub.result == 'skipped') && | |
needs.check-cache.outputs.jni-windows-lib-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
# TODO See https://github.com/microsoft/vcpkg/issues/25349 which might describe the error here https://github.com/realm/realm-kotlin/runs/8099890473?check_suite_focus=true | |
# -- Building for: Visual Studio 17 2022 | |
# -- Running vcpkg install | |
# Error: while checking out port openssl with git tree 7e4d802e3bde4154c227c0dd1da75c719be9f07a | |
# Error: Failed to tar port directory | |
# error: tar failed with exit code: (128). | |
# fatal: not a tree object: 7e4d802e3bde4154c227c0dd1da75c719be9f07a | |
# TODO Implement better work-around here: https://mongodb.slack.com/archives/C017MBM0A30/p1661889411467029?thread_ts=1661888738.117769&cid=C017MBM0A30 | |
fetch-depth: 0 | |
submodules: "recursive" | |
- name: Setup build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/cinterop/src/jvmMain/windows-build-dir | |
key: jni-windows-lib-${{ needs.check-cache.outputs.packages-sha }} | |
enableCrossOsArchive: true | |
- name: Restore JNI Swig Stubs | |
uses: actions/download-artifact@v3 | |
with: | |
name: jni-stub-${{ needs.check-cache.outputs.version-label }} | |
path: ${{ github.workspace }}/packages/jni-swig-stub/build/generated/sources/jni | |
- name: Build native lib | |
shell: powershell | |
working-directory: packages | |
run: | | |
cd cinterop\src\jvmMain | |
Remove-Item -Path windows-build-dir -Force -Recurse -ErrorAction Ignore | |
mkdir windows-build-dir | |
cd windows-build-dir | |
cmake ` | |
..\..\jvm ` | |
-DCMAKE_GENERATOR_PLATFORM=x64 ` | |
-DCMAKE_BUILD_TYPE=Release ` | |
-DREALM_ENABLE_SYNC=ON ` | |
-DREALM_NO_TESTS=1 ` | |
-DVCPKG_TARGET_TRIPLET=x64-windows-static | |
cmake --build . --config Release | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: jni-windows-lib-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/cinterop/src/jvmMain/windows-build-dir/Release/realmc.dll | |
retention-days: 1 | |
# TODO If building jvm lib for windows fails, this step just skips instead of failing the entire build, why? | |
build-jvm-packages: | |
runs-on: macos-latest | |
needs: [check-cache, build-jvm-linux-native-lib, build-jvm-windows-native-lib] | |
if: always() && | |
(needs.build-jvm-linux-native-lib.result == 'success' || needs.build-jvm-linux-native-lib.result == 'skipped') && | |
(needs.build-jvm-windows-native-lib.result == 'success' || needs.build-jvm-windows-native-lib.result == 'skipped') && | |
needs.check-cache.outputs.packages-jvm-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
# TODO This matches 23.2.8568313, but what happens if we a define specific ndk version in our build? | |
- name: Setup NDK | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r23c | |
- name: Debug environment | |
run: | | |
env | |
type cmake | |
cmake --version | |
type ninja | |
ninja --version | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Setup build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-jvm-sync-${{ needs.check-cache.outputs.packages-sha }} | |
- name: Restore Linux JNI lib | |
uses: actions/download-artifact@v3 | |
with: | |
name: jni-linux-lib-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/cinterop/src/jvmMain/linux-build-dir | |
- name: Restore Windows JNI lib | |
uses: actions/download-artifact@v3 | |
with: | |
name: jni-windows-lib-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/cinterop/src/jvmMain/windows-build-dir/Release | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=jvm -PcopyJvmABIs=true | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-jvm-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
build-android-packages: | |
runs-on: ubuntu-latest | |
needs: check-cache | |
if: | | |
needs.check-cache.outputs.packages-android-cache-hit != 'true' || | |
needs.check-cache.outputs.needs.check-cache.outputs.android-test-base-apk-cache-hit != 'true' || | |
needs.check-cache.outputs.needs.check-cache.outputs.android-test-sync-apk-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# Manually install SWIG 4.1.0 as only 4.0.2 is pre-installed | |
# 4.1.0 is not available in apt-get, so use brew instead | |
# https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#ubuntu-22041-lts | |
# It seems to be required to manually add brew dirs to the PATH. This does not happen automatically. | |
- name: Install SWIG | |
run: | | |
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)" | |
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" | |
test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bash_profile | |
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.profile | |
brew install swig | |
echo "/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH | |
echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
# TODO This matches 23.2.8568313, but what happens if we a define specific ndk version in our build? | |
- name: Setup NDK | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r23c | |
- name: Debug environment | |
run: | | |
env | |
type cmake | |
cmake --version | |
type ninja | |
ninja --version | |
- name: Build Android Base Test Apk | |
working-directory: packages | |
run: ./gradlew :test-base:assembleAndroidTest -PignoreNativeLibs=true | |
- name: Build Android Sync Test Apk | |
working-directory: packages | |
run: | | |
./gradlew :test-sync:assembleAndroidTest -PignoreNativeLibs=true \ | |
-PsyncTestUrl=https://realm-qa.mongodb.com \ | |
-PsyncTestAppNamePrefix=and-devfarm-${{ needs.deploy-baas.outputs.runId }} \ | |
-PsyncTestLoginPublicApiKey=${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} \ | |
-PsyncTestLoginPrivateApiKey=${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} \ | |
-PsyncTestClusterName=${{ needs.deploy-baas.outputs.clusterName }} | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=android -PignoreNativeLibs=true | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Store build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-android-sync-${{ needs.check-cache.outputs.packages-sha }} | |
- name: Store build cache for Android Test APK | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/test-base/build/outputs/apk/androidTest/debug/test-base-debug-androidTest.apk | |
key: android-base-test-apk-key-${{ needs.check-cache.outputs.packages-sha }} | |
# TODO Must match naming found in include-check-cache.yml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-android-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
- name: Upload Android Base Test APK | |
uses: actions/upload-artifact@v3 | |
with: | |
name: android-base-test-apk-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/test-base/build/outputs/apk/androidTest/debug/test-base-debug-androidTest.apk | |
retention-days: 1 | |
- name: Upload Android Sync Test APK | |
uses: actions/upload-artifact@v3 | |
with: | |
name: android-sync-test-apk-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/test-sync/build/outputs/apk/androidTest/debug/test-sync-debug-androidTest.apk | |
retention-days: 1 | |
# TODO: ccache is not being used by this build for some reason | |
build-macos-x64-packages: | |
runs-on: macos-latest | |
needs: check-cache | |
# needs: static-analysis | |
if: needs.check-cache.outputs.packages-macos-x64-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
- name: Debug environment | |
run: | | |
env | |
type cmake | |
cmake --version | |
type ninja | |
ninja --version | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=macosX64 -PignoreNativeLibs=true | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Store build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-macos-x64-sync-${{ needs.check-cache.outputs.packages-sha }} | |
# TODO Must match naming found in include-check-cache.yml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-macos-x64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
# TODO: ccache is not being used by this build for some reason | |
build-macos-arm64-packages: | |
runs-on: macos-latest | |
needs: check-cache | |
# needs: static-analysis | |
if: needs.check-cache.outputs.packages-macos-arm64-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=macosArm64 -PignoreNativeLibs=true | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Store build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-macos-arm64-sync-${{ needs.check-cache.outputs.packages-sha }} | |
# TODO Must match naming found in include-check-cache.yml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-macos-arm64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
# TODO: ccache is not being used by this build for some reason | |
build-ios-x64-packages: | |
runs-on: macos-latest | |
needs: check-cache | |
# needs: static-analysis | |
if: needs.check-cache.outputs.packages-ios-x64-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=iosX64 -PignoreNativeLibs=true | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Store build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-ios-x64-sync-${{ needs.check-cache.outputs.packages-sha }} | |
# TODO Must match naming found in include-check-cache.yml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-ios-x64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
# TODO: ccache is not being used by this build for some reason | |
build-ios-arm64-packages: | |
runs-on: macos-latest | |
needs: check-cache | |
# needs: static-analysis | |
if: needs.check-cache.outputs.packages-ios-arm64-cache-hit != 'true' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
# TODO I'm not sure this catches changes to our Config.kt, what is the impact? | |
# https://github.com/actions/setup-java#caching-packages-dependencies | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
# TODO Default behavior is only caching from main/master. Unclear what the best caching strategy is for us. | |
# TODO What is the rules and limits for caching on Github -> 10 GB limit, automatic evicition | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
# TODO This cmake version is not being used by the Android builds. Figure out why. | |
- name: Setup cmake | |
uses: jwlawson/actions-setup-cmake@v1.13 | |
with: | |
cmake-version: '3.25.2' | |
# TODO This Ninja version is not being used by the Android builds. Figure out why. | |
- name: Setup ninja | |
uses: cmelchior/setup-ninja@master | |
with: | |
version: '1.11.0' | |
# TODO This might not work on Windows: https://github.com/hendrikmuhs/ccache-action#notes-on-windows-support | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.2 | |
with: | |
key: ${{ github.job }} | |
max-size: '2.0G' | |
- name: Prepend ccache executables to the PATH | |
run: echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
# TODO See https://github.com/hendrikmuhs/ccache-action/issues/94 | |
- name: Configure ccache | |
run: | | |
ccache --set-config="compiler_check=content" | |
ccache --show-config | |
echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang | |
echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ | |
- name: Build packages | |
working-directory: packages | |
run: ./gradlew publishCIPackages -Prealm.kotlin.targets=iosArm64 -PignoreNativeLibs=true | |
# TODO Figure out naming schema and retention policy | |
# We cannot use artifacts as they cannot be shared between workflows, so use cache instead. | |
- name: Store build cache | |
uses: actions/cache@v3 | |
with: | |
path: ./packages/build/m2-buildrepo | |
key: packages-m2-ios-arm64-sync-${{ needs.check-cache.outputs.packages-sha }} | |
# TODO Must match naming found in include-check-cache.yml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages-ios-arm64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo/**/* | |
retention-days: 1 | |
# TODO Compare speed between emulator and Device Farm | |
# TODO We should be able to move this into a reusable work-flow | |
test-android-packages-emulator: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
type: [base, sync] | |
include: | |
- type: base | |
test-title: Unit Test Results - Android Base (Emulator) | |
- type: sync | |
test-title: Unit Test Results - Android Sync (Emulator) | |
runs-on: macos-latest | |
needs: [check-cache, deploy-baas, build-android-packages, build-jvm-packages] | |
if: | | |
always() && | |
(needs.build-android-packages.result == 'success' || needs.build-android-packages.result == 'skipped') && | |
(needs.build-jvm-packages.result == 'success' || needs.build-jvm-packages.result == 'skipped') && | |
(needs.deploy-baas.result == 'success') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
- name: Restore m2-buildrepo (Android) | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-android-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore m2-buildrepo (JVM) | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-jvm-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
# TODO Can we read api level from Config.kt | |
# TODO This action does not support using `\` to split multiline scripts. | |
- name: Run Integration Tests | |
env: | |
SSH_AUTH_SOCK: /tmp/ssh_agent.sock | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: 31 | |
target: default # Only `google_apis` are available on 33, which has issues creating temporary folders | |
arch: x86_64 | |
profile: Nexus 6 | |
disk-size: 4096M | |
ram-size: 2048M | |
heap-size: 1024M | |
script: | | |
adb logcat -c | |
adb logcat > logcat.txt & | |
cd packages && ./gradlew :test-${{ matrix.type }}:connectedCheck -PincludeSdkModules=false -PsyncTestUrl=https://realm-qa.mongodb.com -PsyncTestAppNamePrefix=jvm-andemu-${{ needs.deploy-baas.outputs.runId }} -PsyncTestLoginPublicApiKey=${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} -PsyncTestLoginPrivateApiKey=${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} -PsyncTestClusterName=${{ needs.deploy-baas.outputs.clusterName }} -info --stacktrace --no-daemon | |
- name: Archive LogCat data | |
uses: actions/upload-artifact@v3 | |
if: always() || failure() | |
with: | |
name: logcat-${{ matrix.type }}-emulator.txt | |
path: logcat.txt | |
retention-days: 1 | |
- name: Publish Unit Test Results | |
uses: dorny/test-reporter@v1 | |
if: always() || failure() | |
with: | |
name: ${{ matrix.test-title }} | |
path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml | |
reporter: java-junit | |
list-suites: failed | |
list-tests: failed | |
fail-on-error: true | |
# TODO Enable Sync tests here as well | |
test-android-packages-device-farm: | |
name: AWS Device Farm | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
type: [sync] # [base, sync] | |
include: | |
- type: base | |
appId: io.realm.testapp | |
- type: sync | |
appId: io.realm.sync.testapp | |
runs-on: ubuntu-latest | |
needs: [ check-cache, deploy-baas, build-android-packages, build-jvm-packages ] | |
if: | | |
always() && | |
(needs.build-android-packages.result == 'success' || needs.build-android-packages.result == 'skipped') && | |
(needs.build-jvm-packages.result == 'success' || needs.build-jvm-packages.result == 'skipped') && | |
(needs.deploy-baas.result == 'success') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Restore Android Test APK | |
uses: actions/download-artifact@v3 | |
with: | |
name: android-${{ matrix.type }}-test-apk-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/test-${{ matrix.type }}/build/outputs/apk/androidTest/debug | |
- name: Configure AWS Credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_DEVICEFARM_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_DEVICEFARM_SECRET_ACCESS_KEY }} | |
aws-region: us-west-2 | |
- name: Run the tests | |
uses: ./.github/actions/run-android-device-farm-test | |
id: run_android_tests | |
with: | |
apk-path: ${{ github.workspace }}/packages/test-${{ matrix.type }}/build/outputs/apk/androidTest/debug/test-${{ matrix.type }}-debug-androidTest.apk | |
app-id: ${{ matrix.appId }} | |
project-arn: ${{ secrets.DEVICEFARM_PROJECT_ARN }} | |
device-pool-arn: ${{ secrets.DEVICEFARM_POOL_ARN }} | |
test-macos-packages: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest] # , macos-arm] | |
type: [base, sync] | |
include: | |
- os: macos-latest | |
type: base | |
os-id: macos | |
package-prefix: macos-x64 | |
test-title: Unit Test Results - MacOS x64 Base | |
- os: macos-latest | |
type: sync | |
os-id: macos | |
package-prefix: macos-x64 | |
test-title: Unit Test Results - MacOS x64 Sync | |
# - os: macos-arm | |
# package-prefix: macos-arm64 | |
# test-title: Results - MacOS arm64 Base | |
runs-on: ${{ matrix.os }} | |
# TODO Do we need to wait for all matrix builds? | |
# Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. | |
needs: [check-cache, deploy-baas, build-macos-x64-packages] #, build-macos-arm64-packages] | |
if: | | |
always() && | |
(needs.build-macos-x64-packages.result == 'success' || needs.build-macos-x64-packages.result == 'skipped') && | |
(needs.deploy-baas.result == 'success') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
- name: Restore m2-buildrepo | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Run tests | |
working-directory: packages | |
run: > | |
./gradlew :test-${{ matrix.type }}:macosTest | |
-PincludeSdkModules=false | |
-PsyncTestUrl=https://realm-qa.mongodb.com | |
-PsyncTestAppNamePrefix=jvm-${{ matrix.os-id }}-${{ needs.deploy-baas.outputs.runId }} | |
-PsyncTestLoginPublicApiKey=${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} | |
-PsyncTestLoginPrivateApiKey=${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} | |
-PsyncTestClusterName=${{ needs.deploy-baas.outputs.clusterName }} | |
-info --stacktrace --no-daemon | |
- name: Publish Unit Test Results | |
uses: dorny/test-reporter@v1 | |
if: always() || failure() | |
with: | |
name: ${{ matrix.test-title }} | |
path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml | |
reporter: java-junit | |
list-suites: failed | |
list-tests: failed | |
fail-on-error: true | |
test-ios-packages: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest] # , macos-arm] | |
type: [base, sync] | |
include: | |
- os: macos-latest | |
type: base | |
package-prefix: x64 | |
test-title: Unit Test Results - iOS x64 Base | |
test-task: iosTest | |
- os: macos-latest | |
type: sync | |
package-prefix: x64 | |
test-title: Unit Test Results - iOS x64 Sync | |
test-task: runCloudIosTests | |
# - os: macos-arm | |
# package-prefix: macos-arm64 | |
# test-title: Results - MacOS arm64 Base | |
runs-on: ${{ matrix.os }} | |
# TODO Do we need to wait for all matrix builds? | |
# Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. | |
needs: [check-cache, deploy-baas, build-macos-x64-packages, build-ios-x64-packages] # , build-ios-arm64-packages] | |
if: | | |
always() && | |
(needs.build-ios-x64-packages.result == 'success' || needs.build-ios-x64-packages.result == 'skipped') && | |
(needs.deploy-baas.result == 'success') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
- name: Restore m2-buildrepo (mac) | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-macos-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore m2-buildrepo (ios) | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-ios-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
# App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. | |
- name: Run tests | |
working-directory: packages | |
run: > | |
./gradlew :test-${{ matrix.type }}:${{ matrix.test-task }} | |
-PincludeSdkModules=false | |
-PsyncTestUrl=https://realm-qa.mongodb.com | |
-PsyncTestAppNamePrefix=jvm-ios-${{ needs.deploy-baas.outputs.runId }} | |
-PsyncTestLoginPublicApiKey=${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} | |
-PsyncTestLoginPrivateApiKey=${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} | |
-PsyncTestClusterName=${{ needs.deploy-baas.outputs.clusterName }} | |
-info --stacktrace --no-daemon | |
# IOS Sync Tests currently don't create XML test output, so look in the build log for failures instead. | |
# This is expected to be fixed in Kotlin 1.9.0. | |
# - name: Publish Unit Test Results | |
# uses: dorny/test-reporter@v1 | |
# if: always() || failure() | |
# with: | |
# name: ${{ matrix.test-title }} | |
# path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml | |
# reporter: java-junit | |
# list-suites: failed | |
# list-tests: failed | |
# fail-on-error: true | |
# TODO Investigate why these tests seem to hang for the `run tests` step with no log output. Could it be related to the test failing, but not being picked up? | |
test-jvm-packages: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest, ubuntu-latest, windows-latest] # TODO Should we also test om MacOS arm64? | |
type: [base, sync] | |
include: | |
- os: macos-latest | |
os-id: mac | |
type: base | |
test-title: Unit Test Results - Base JVM MacOS x64 | |
- os: ubuntu-latest | |
os-id: ubu | |
type: base | |
test-title: Unit Test Results - Base JVM Linux | |
- os: windows-latest | |
os-id: win | |
type: base | |
test-title: Unit Test Results - Base JVM Windows | |
- os: macos-latest | |
os-id: mac | |
type: sync | |
test-title: Unit Test Results - Sync JVM MacOS x64 | |
- os: ubuntu-latest | |
os-id: ubu | |
type: sync | |
test-title: Unit Test Results - Sync JVM Linux | |
- os: windows-latest | |
os-id: win | |
type: sync | |
test-title: Unit Test Results - Sync JVM Windows | |
runs-on: ${{ matrix.os }} | |
needs: [check-cache, build-jvm-packages, deploy-baas] | |
if: | | |
always() && | |
(needs.build-jvm-packages.result == 'success' || needs.build-jvm-packages.result == 'skipped') && | |
(needs.deploy-baas.result == 'success') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup Java 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: zulu | |
java-version: 11 | |
- name: Setup Gradle and task/dependency caching | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
- name: Restore m2-buildrepo | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-jvm-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
# App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. | |
- name: Run tests | |
working-directory: packages | |
run: > | |
./gradlew :test-${{ matrix.type }}:jvmTest | |
-PincludeSdkModules=false | |
-PsyncTestUrl=https://realm-qa.mongodb.com | |
-PsyncTestAppNamePrefix=jvm-${{ matrix.os-id }}-${{ needs.deploy-baas.outputs.runId }} | |
-PsyncTestLoginPublicApiKey=${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} | |
-PsyncTestLoginPrivateApiKey=${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} | |
-PsyncTestClusterName=${{ needs.deploy-baas.outputs.clusterName }} | |
-info --stacktrace --no-daemon | |
- name: Publish Unit Test Results | |
uses: dorny/test-reporter@v1 | |
if: always() || failure() | |
with: | |
name: ${{ matrix.test-title }} | |
path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml | |
reporter: java-junit | |
list-suites: failed | |
list-tests: failed | |
fail-on-error: true | |
package-all-artifacts: | |
runs-on: ubuntu-latest | |
needs: [check-cache, build-jvm-packages, build-android-packages, build-macos-x64-packages, build-macos-arm64-packages, build-ios-x64-packages, build-ios-arm64-packages] | |
if: | | |
always() && | |
(needs.build-android-packages.result == 'success' || needs.build-android-packages.result == 'skipped') && | |
(needs.build-jvm-packages.result == 'success' || needs.build-jvm-packages.result == 'skipped') && | |
(needs.build-macos-x64-packages.result == 'success' || needs.build-ios-x64-packages.result == 'skipped') && | |
(needs.build-macos-arm64-packages.result == 'success' || needs.build-macos-arm64-packages.result == 'skipped') && | |
(needs.build-ios-x64-packages.result == 'success' || needs.build-ios-x64-packages.result == 'skipped') && | |
(needs.build-ios-arm64-packages.result == 'success' || needs.build-ios-arm64-packages.result == 'skipped') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Restore Android artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-android-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore JVM artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-jvm-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore JVM artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-jvm-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore MacOS x64 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-macos-x64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore MacOS arm64 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-macos-arm64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore iOS x64 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-ios-x64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Restore iOS arm64 artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: packages-ios-arm64-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
- name: Upload artifacts bundle | |
uses: actions/upload-artifact@v3 | |
with: | |
name: all-packages-${{ needs.check-cache.outputs.version-label }} | |
path: ./packages/build/m2-buildrepo | |
retention-days: 7 | |
integration-tests: | |
uses: ./.github/workflows/include-integration-tests.yml | |
needs: [check-cache, package-all-artifacts] | |
if: | | |
always() && | |
(needs.package-all-artifacts.result == 'success' || needs.package-all-artifacts.result == 'skipped') | |
with: | |
version-label: ${{ needs.check-cache.outputs.version-label }} | |
# TODO: Should only deploy snapshots from certain branches. For now deploy always until GHA branch is closer to being done. | |
deploy-snapshot: | |
uses: ./.github/workflows/include-deploy-snapshot.yml | |
needs: [ | |
check-cache, | |
static-analysis, | |
integration-tests, | |
test-jvm-packages, | |
test-macos-packages, | |
test-ios-packages, | |
test-android-packages-emulator, | |
test-android-packages-device-farm, | |
package-all-artifacts | |
] | |
if: always() && | |
endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && | |
needs.check-cache.result == 'success' && | |
needs.static-analysis.result == 'success' && | |
needs.static-analysis.result == 'success' && | |
needs.integration-tests.result == 'success' && | |
needs.test-jvm-packages.result == 'success' && | |
needs.test-macos-packages.result == 'success' && | |
needs.test-ios-packages.result == 'success' && | |
needs.test-android-packages-emulator.result == 'success' && | |
needs.test-android-packages-device-farm.result == 'success' && | |
needs.package-all-artifacts.result == 'success' | |
secrets: inherit | |
with: | |
version-label: ${{ needs.check-cache.outputs.version-label }} | |
cleanup-baas: | |
uses: ./.github/workflows/include-cleanup-baas.yml | |
if: always() | |
name: Cleanup BAAS Cluster | |
needs: [deploy-baas, test-jvm-packages, test-ios-packages, test-macos-packages, test-android-packages-emulator] | |
with: | |
BaseUrl: https://realm-qa.mongodb.com | |
AtlasBaseUrl: https://cloud-qa.mongodb.com | |
AppIdPrefix: ${{ needs.deploy-baas.outputs.runId }} | |
secrets: | |
AtlasProjectId: ${{ secrets.ATLAS_QA_PROJECT_ID }} | |
AtlasPublicKey: ${{ secrets.ATLAS_QA_PUBLIC_API_KEY }} | |
AtlasPrivateKey: ${{ secrets.ATLAS_QA_PRIVATE_API_KEY }} | |