Skip to content

Use Bazel to build XCFramework for release (#1457) #54

Use Bazel to build XCFramework for release (#1457)

Use Bazel to build XCFramework for release (#1457) #54

Workflow file for this run

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