Use Bazel to build XCFramework for release (#1457) #54
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: ios-ci | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
tags: | |
- 'ios-*' | |
paths: | |
- CMakeLists.txt | |
- 'platform/ios/**' | |
- 'platform/darwin/**' | |
- ".github/workflows/ios-ci.yml" | |
- "bin/**" | |
- "expression-test/**" | |
- "include/**" | |
- "metrics/**" | |
- "platform/default/**" | |
- "render-test/**" | |
- "scripts/**" | |
- "src/**" | |
- "test/**" | |
- "vendor/**" | |
- ".gitmodules" | |
- "!**/*.md" | |
- WORKSPACE | |
- BUILD.bazel | |
- .bazelrc | |
- .bazelversion | |
pull_request: | |
branches: | |
- main | |
paths: | |
- CMakeLists.txt | |
- 'platform/ios/**' | |
- 'platform/darwin/**' | |
- ".github/workflows/ios-ci.yml" | |
- "bin/**" | |
- "expression-test/**" | |
- "include/**" | |
- "metrics/**" | |
- "platform/default/**" | |
- "render-test/**" | |
- "scripts/**" | |
- "src/**" | |
- "test/**" | |
- "vendor/**" | |
- ".gitmodules" | |
- "!**/*.md" | |
- WORKSPACE | |
- BUILD.bazel | |
- .bazelrc | |
- .bazelversion | |
jobs: | |
build: | |
runs-on: [self-hosted, macOS, ARM64] | |
concurrency: | |
# cancel jobs on PRs only | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
env: | |
BUILDTYPE: Debug | |
HOMEBREW_NO_AUTO_UPDATE: 1 | |
HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
defaults: | |
run: | |
working-directory: platform/ios | |
shell: bash | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
path: /user/local/lib/node_modules | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
- name: Cache Bazel | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-bazel-${{ hashFiles('.bazelversion', '.bazelrc', 'WORKSPACE', 'WORKSPACE.bazel', 'MODULE.bazel') }} | |
restore-keys: | | |
${{ runner.os }}-bazel- | |
path: ~/.cache/bazel | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: npm install | |
run: npm ci --ignore-scripts | |
- name: Prepare ccache | |
run: ccache --clear | |
- name: Cache ccache | |
uses: actions/cache@v3 | |
env: | |
cache-name: ccache-v1 | |
with: | |
path: ~/.ccache' | |
key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} | |
restore-keys: | | |
${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} | |
${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} | |
${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} | |
- name: Clear ccache statistics | |
run: | | |
ccache --zero-stats | |
ccache --max-size=2G | |
ccache --show-stats | |
- run: cp bazel/example_config.bzl bazel/config.bzl | |
- name: Check debug symbols | |
run: bazel run //platform:check-public-symbols | |
- name: Lint plist files | |
run: bazel run //platform/ios:lint-plists | |
- name: Running iOS tests | |
run: bazel test //platform/ios/test:ios_test --test_output=errors | |
- name: Running iOS UI tests | |
run: bazel test //platform/ios/iosapp-UITests:uitest --test_output=errors | |
# size test | |
- name: Build app for size test & output size | |
working-directory: ./ | |
run: | | |
bazel build --compilation_mode=opt //platform/ios:size --//:maplibre_platform=ios | |
cp "$(bazel cquery --compilation_mode=opt --output=files //platform/ios:size --//:maplibre_platform=ios)" ./size | |
- name: Upload size test result | |
uses: actions/upload-artifact@v3 | |
with: | |
name: size-test-result | |
path: | | |
./size | |
# render test | |
- name: Build RenderTest .ipa and .xctest for AWS Device Farm | |
run: | | |
set -e | |
bazel run //platform/ios:xcodeproj | |
build_dir="$(mktemp -d)" | |
xcodebuild build-for-testing -scheme RenderTest -project MapLibre.xcodeproj -derivedDataPath "$build_dir" | |
render_test_app_dir="$(dirname "$(find "$build_dir" -name RenderTestApp.app)")" | |
cd "$render_test_app_dir" | |
mkdir Payload | |
mv RenderTestApp.app Payload | |
zip -r RenderTestApp.zip Payload | |
mv RenderTestApp.zip RenderTestApp.ipa | |
cd Payload/RenderTestApp.app/PlugIns | |
zip -r "$render_test_app_dir"/RenderTest.xctest.zip RenderTest.xctest | |
echo render_test_artifacts_dir="$render_test_app_dir" >> "$GITHUB_ENV" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ios-render-test | |
retention-days: 3 | |
path: | | |
${{ env.render_test_artifacts_dir }}/RenderTest.xctest.zip | |
${{ env.render_test_artifacts_dir }}/RenderTestApp.ipa |