Skip to content

Next

Next #89

Workflow file for this run

name: Prepare Release
on:
push:
branches:
- "dp/test_release"
env:
XCODE_VERSION: "['14.1', '14.2', '14.3.1', '15.0.1', '15.1']"
PLATFORM: "['ios', 'osx', 'watchos', 'tvos', 'catalyst', visionos]"
BUILD_PLATFORM: "['ios', 'iossimulator', 'osx', 'watchos', 'watchossimulator', 'tvos', 'tvossimulator', 'catalyst']"
DOC_VERSION: '14.3.1'
XCFRAMEWORK_VERSION: '15.0.1'
jobs:
prepare:
runs-on: ubuntu-latest
name: Prepare outputs
outputs:
XCODE_VERSIONS_MATRIX: ${{ env.XCODE_VERSION }}
BUILD_PLATFORM_MATRIX: ${{ env.BUILD_PLATFORM }}
PLATFORM_MATRIX: ${{ env.PLATFORM }}
steps:
- name: Compute outputs
run: |
echo "XCODE_VERSIONS_MATRIX=${{ env.XCODE_VERSION }}" >> $GITHUB_OUTPUT
echo "PLATFORM_MATRIX=${{ env.PLATFORM }}" >> $GITHUB_OUTPUT
build-docs:
runs-on: macos-13
name: Package docs and upload them to the draft release
needs: prepare
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.DOC_VERSION }}
- name: Install Gems
run: |
gem install jazzy -v 0.14.4
- name: Checkout
uses: actions/checkout@v4
- name: Package docs files
run: ./build.sh release-package-docs
- name: Upload artifact to artifacts library
uses: actions/upload-artifact@v3
with:
name: realm-docs.zip
path: docs/realm-docs.zip
build-examples:
runs-on: macos-13
name: Package examples and upload them to the draft release
needs: prepare
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run release_package-examples package and uploads the example folder
run: ./build.sh release-package-examples
- name: Upload artifact to artifacts library
uses: actions/upload-artifact@v3
with:
name: realm-examples.zip
path: realm-examples.zip
build-product:
runs-on: ubuntu-latest
name: Package product for platform ${{ matrix.platform }}, target ${{ matrix.target }}, xcode version ${{ matrix.xcode-version }} and configuration ${{ matrix.configuration }}.
needs: prepare
strategy:
matrix:
platform: ${{ fromJSON(needs.prepare.outputs.BUILD_PLATFORM_MATRIX) }}
target: [Realm, RealmSwift]
xcode-version: ${{ fromJSON(needs.prepare.outputs.XCODE_VERSIONS_MATRIX) }}
configuration: [release]
include:
- platform: ios
target: Realm
xcode-version: 15.1
configuration: static
- platform: iossimulator
target: Realm
xcode-version: 15.1
configuration: static
- platform: visionos
target: Realm
xcode-version: 15.1
configuration: release
- platform: visionos
target: Realmswift
xcode-version: 15.1
configuration: release
- platform: visionossimulator
target: Realm
xcode-version: 15.1
configuration: release
- platform: visionossimulator
target: Realmswift
xcode-version: 15.1
configuration: release
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Creates on demand XCode Cloud's workflows with a build action for ${{ matrix.platform }} in ${{ matrix.xcode-version }} with configuration ${{ matrix.configuration }}
id: create-workflow
run: |
workflow_id=$(echo $(ruby ./scripts/xcode_cloud_helper.rb --create-build-workflow "${{ matrix.platform }}-${{ matrix.target }}-${{ matrix.configuration }}" --token ${{ steps.token.outputs.token }} --xcode-version ${{ matrix.xcode-version }}))
echo "WORKFLOW_ID=$workflow_id" >> $GITHUB_OUTPUT
- name: Runs the XCode Cloud workflow created by the prevous step which that a package for ${{ matrix.platform }} in ${{ matrix.xcode-version }} with configuration ${{ matrix.configuration }}
id: build-run
run: |
build_run_id=$(echo $(ruby ./scripts/xcode_cloud_helper.rb --run-release-workflow ${{ steps.create-workflow.outputs.WORKFLOW_ID }} --token ${{ steps.token.outputs.token }} --branch ${{ github.ref_name }}))
echo "BUILD_RUN_ID=$build_run_id" >> $GITHUB_OUTPUT
- name: Check build status and wait for it to finish
run: |
ruby ./scripts/xcode_cloud_helper.rb --token ${{ steps.token.outputs.token }} --check-workflow-status ${{ steps.build-run.outputs.BUILD_RUN_ID }}
- name: Download package from XCode Cloud artifacts ${{ matrix.platform }} in ${{ matrix.xcode-version }} with configuration ${{ matrix.configuration }}
run: |
ruby ./scripts/xcode_cloud_helper.rb --download-build-artifact ${{ steps.build-run.outputs.BUILD_RUN_ID }} --token ${{ steps.token.outputs.token }}
- name: Upload artifact to artifacts library
uses: actions/upload-artifact@v3
with:
name: package-${{ matrix.platform }}-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
path: product.zip
package-xcframework:
runs-on: macos-13
name: Package products for each xcode version
needs: build-product
strategy:
matrix:
platform: ${{ fromJSON(needs.prepare.outputs.PLATFORM_MATRIX) }}
target: [RealmSwift]
xcode-version: ${{ fromJSON(needs.prepare.outputs.XCODE_VERSIONS_MATRIX) }}
configuration: [release]
include:
- platform: ios
target: Realm
xcode-version: 15.1
configuration: static
- platform: ios
target: Realm
xcode-version: 15.1
configuration: release
- platform: osx
target: Realm
xcode-version: 15.1
configuration: release
- platform: catalyst
target: Realm
xcode-version: 15.1
configuration: release
- platform: tvos
target: Realm
xcode-version: 15.1
configuration: release
- platform: watchos
target: Realm
xcode-version: 15.1
configuration: release
- platform: visionos
target: Realm
xcode-version: 15.1
configuration: release
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCFRAMEWORK_VERSION }}
- name: Download ${{ matrix.target }} for ${{ matrix.platform }}
uses: actions/download-artifact@v3
with:
name: package-${{ matrix.platform }}-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
path: build/package-${{ matrix.platform }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: package-${{ matrix.platform }}-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
- name: Download ${{ matrix.target }} for ${{ matrix.platform }} simulator
uses: actions/download-artifact@v3
if: ${{ matrix.platform }} == 'ios' || ${{ matrix.platform }} == 'tvos' || ${{ matrix.platform }} == 'watchos' || ${{ matrix.platform }} == 'visionos'
with:
name: package-${{ matrix.platform }}simulator-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
path: build/package-${{ matrix.platform }}simulator-${{ matrix.target }}-${{ matrix.configuration }}.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.platform }} == 'ios' || ${{ matrix.platform }} == 'tvos' || ${{ matrix.platform }} == 'watchos' || ${{ matrix.platform }} == 'visionos'
with:
name: package-${{ matrix.platform }}simulator-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.zip
- name: Create xcframework for ${{ matrix.platform }} in ${{ matrix.xcode-version }} with configuration ${{ matrix.configuration }}
id: build-run
run: |
./build.sh release-create-xcframework ${{ matrix.platform }} ${{ matrix.target }} ${{ matrix.configuration }}
build/xcframework/${{ matrix.target }}.xcframework
- name: Upload xcframework to artifacts library
uses: actions/upload-artifact@v3
with:
name: realm-${{ matrix.platform }}-${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}.xcframework.zip
path: build/xcframework/${{ matrix.target }}.xcframework.zip
create-xcframeworks:
runs-on: macos-13
name: Package products for each platform into a xcframework ${{ matrix.xcode-version }}-${{ matrix.target }}-${{ matrix.configuration }}
needs: package-xcframework
strategy:
matrix:
xcode-version: ${{ fromJSON(needs.prepare.outputs.XCODE_VERSIONS_MATRIX) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCFRAMEWORK_VERSION }}
- name: Download ios xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
with:
name: realm-ios-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-ios-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-ios-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download osx xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
with:
name: realm-osx-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-osx-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-osx-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download tvos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
with:
name: realm-tvos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-tvos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-tvos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download watchos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
with:
name: realm-watchos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-watchos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-watchos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download catalyst xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
with:
name: realm-catalyst-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-catalyst-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-catalyst-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download visionos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
path: build/realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- name: Download ios xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-ios-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-ios-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-ios-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download osx xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-osx-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-osx-${{ matrix.xcode-version }}-RealmSwift-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
with:
name: realm-osx-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download tvos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-tvos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-tvos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-tvos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download watchos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-watchos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-watchos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-watchos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download catalyst xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-catalyst-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-catalyst-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-catalyst-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download visionos xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
path: build/realm-visionos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-visionos-${{ matrix.xcode-version }}-Realm-release.xcframework.zip
- name: Download ios xcframework for ${{ matrix.xcode_version }}
uses: actions/download-artifact@v3
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-ios-${{ matrix.xcode-version }}-Realm-static.xcframework.zip
path: build/realm-ios-${{ matrix.xcode-version }}-RealmSwift-static.xcframework.zip
- uses: geekyeggo/delete-artifact@v2
if: ${{ matrix.xcode-version }} == '15.1'
with:
name: realm-ios-${{ matrix.xcode-version }}-Realm-static.xcframework.zip
test-package-examples:
runs-on: ubuntu-latest
name: Test examples
needs: create-xcframeworks
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Run release_test-package-examples_15.1 which runs test over the packages produces by the previous step and wait for it to complete or fail
run: ruby ./scripts/xcode_cloud_helper.rb --run-release-workflow release_test-package-examples_15.1 --token ${{ steps.token.outputs.token }}
test-ios-static:
runs-on: ubuntu-latest
name: Run tests on iOS with configuration Static
needs: create-xcframeworks
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Run release_ios-static_15.1 which runs test over the packages produces by the previous step and wait for it to complete or fail
run: ruby ./scripts/xcode_cloud_helper.rb --run-release-workflow release_test-ios-static_15.1 --token ${{ steps.token.outputs.token }}
test-osx-static:
runs-on: ubuntu-latest
name: Run tests on macOS
needs: create-xcframeworks
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Run release_osx_15.1 which runs test over the packages produces by the previous step and wait for it to complete or fail
run: ruby ./scripts/xcode_cloud_helper.rb --run-release-workflow release_test-osx_15.1 --token ${{ steps.token.outputs.token }}
test-installation:
runs-on: ubuntu-latest
name: Run installation test for ${{ matrix.platform }}, ${{ matrix.installation }} and ${{ matrix.linkage }}
needs: create-xcframeworks
env:
XCODE_VERSION: '14.3.1'
strategy:
matrix:
platform: [ios, osx, watchos, tvos, catalyst]
installation: [cocoapods, spm, carthage]
linkage: [static, dynamic]
exclude:
- platform: catalyst
installation: carthage
- installation: carthage
linkage: static
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Creates an XCode Cloud workflow to run the test and runs build
run: |
ruby ./scripts/xcode_cloud_helper.rb --create-release-workflow-and-run test-installation-${{ matrix.platform }}-${{ matrix.installation }}-${{ matrix.linkage }} --xcode-version "$XCODE_VERSION" --token ${{ steps.token.outputs.token }} --team-id ${{ secrets.APPLE_STORE_CONNECT_TEAM_ID }}
test-installation-xcode: # we run this installation tests separatly because we need xcode cloud workflows previsously created with a GITHUB token so we can download the release package for this tests
runs-on: ubuntu-latest
name: Run installation xcframework ${{ matrix.platform }}, ${{ matrix.linkage }} in ${{ matrix.xcode_version }}
needs: create-xcframeworks
strategy:
max-parallel: 5
matrix:
platform: [osx]
xcode_version: ['14.1', '14.2', '14.3.1', '15.0.1', '15.1']
linkage: [dynamic]
include:
- platform: ios
xcode_version: '14.3.1'
linkage: dynamic
- platform: watchos
xcode_version: '14.3.1'
linkage: dynamic
- platform: tvos
xcode_version: '14.3.1'
linkage: dynamic
- platform: catalyst
xcode_version: '14.3.1'
linkage: dynamic
- platform: ios
installation: '14.3.1'
linkage: static
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Token
id: token
uses: yuki0n0/[email protected]
with:
# UUID. Can get from App Store Connect.
issuer id: ${{ secrets.APPLE_STORE_CONNECT_ISSUER_ID }}
# Key ID. Can get from App Store Connect.
key id: ${{ secrets.APPLE_STORE_CONNECT_KEY_ID }}
# P8 private key. Can get from App Store Connect.
key: ${{ secrets.APPLE_STORE_CONNECT_API_KEY }}
- name: Run installation tests for ${{ matrix.platform }} xcframework ${{ matrix.linkage }} in xcode version ${{ matrix.xcode-version }}
run: |
ruby ./scripts/xcode_cloud_helper.rb --run-release-workflow "release_test-installation-${{ matrix.platform }}-xcframework-${{ matrix.linkage }}_${{ matrix.xcode-version }}" --token ${{ steps.token.outputs.token }}