Skip to content

Build Core binaries #25

Build Core binaries

Build Core binaries #25

name: Build Core binaries
on:
workflow_dispatch:
inputs:
core-version:
type: string
required: false
default: ''
description: Core version to use to generate the binaries. It should either be a tag or the version returned by (git describe). If not provided, the version in dependencies.list will be used.
jobs:
build-packages:
runs-on: macos-14
name: Build Core ${{ inputs.core-version }} for ${{ matrix.target }}
outputs:
core-version: ${{ steps.get-core-version.outputs.version }}
strategy:
matrix:
target: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, watchos, watchsimulator, maccatalyst]
xcode: ["14.3.1"]
include:
- target: xros
xcode: "15.2.0"
- target: xrsimulator
xcode: "15.2.0"
steps:
- uses: actions/checkout@v4
- name: Switch to Xcode ${{ matrix.xcode }}
uses: maxim-lobanov/setup-xcode@v1.6.0
with:
xcode-version: ${{ matrix.xcode }}
- name: Get Core Version
id: get-core-version
run: |
REALM_CORE_VERSION=${{ inputs.core-version }}
if [[ -z $REALM_CORE_VERSION ]]; then
REALM_CORE_VERSION=$(sed -n 's/^REALM_CORE_VERSION=\(.*\)$/\1/p' dependencies.list)
fi
echo "version=$REALM_CORE_VERSION" >> "$GITHUB_OUTPUT"
- name: Clone Core
uses: actions/checkout@v4
with:
repository: realm/realm-core
path: core
submodules: recursive
fetch-depth: 0
fetch-tags: true
- name: Checkout Core@${{ steps.get-core-version.outputs.version }}
run: git checkout ${{ steps.get-core-version.outputs.version }} --recurse-submodules -f
working-directory: core
- name: Build for ${{ matrix.target }}
run: sh tools/${{ matrix.target != 'macosx' && format('build-apple-device.sh -p {0} -c Release', matrix.target) || 'build-cocoa.sh -bm' }} -v ${{ steps.get-core-version.outputs.version }}
working-directory: core
- name: Archive binaries
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.target }}
path: core/realm-Release-*.tar.gz
combine-xcframework:
runs-on: macos-14
name: Publish xcframework for Core ${{ inputs.core-version }}
environment:
name: Prebuilds
url: ${{ steps.upload-to-s3.outputs.url }}
needs:
- build-packages
steps:
- uses: actions/checkout@v4
- name: Clone Core
uses: actions/checkout@v4
with:
repository: realm/realm-core
path: core
fetch-depth: 0
fetch-tags: true
- name: Checkout Core@${{ needs.build-packages.outputs.core-version }}
run: git checkout ${{ needs.build-packages.outputs.core-version }}
working-directory: core
- name: Download binaries
uses: actions/download-artifact@v4
with:
path: core
- name: Combine xcframework
run: |
mv binaries-*/* ./
sh tools/build-cocoa.sh -v ${{ needs.build-packages.outputs.core-version }}
mkdir ../release
mv realm-monorepo-xcframework-${{ needs.build-packages.outputs.core-version }}.tar.xz ../release/
working-directory: core
- name: Archive xcframework
uses: actions/upload-artifact@v4
with:
name: Realm-${{ needs.build-packages.outputs.core-version }}.xcframework.tar.xz
path: release
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_KEY }}
aws-region: us-east-1
- name: Upload release folder to S3
id: upload-to-s3
run: |
s3_folder="static.realm.io/downloads/core/${{ needs.build-packages.outputs.core-version }}/cocoa"
aws s3 sync --acl public-read . "s3://$s3_folder"
echo "url=https://$s3_folder/realm-monorepo-xcframework-${{ needs.build-packages.outputs.core-version }}.tar.xz" >> $GITHUB_OUTPUT
working-directory: release