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: - '*' 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 # C++ unit tests - name: Build CppUnitTests .ipa and .xctest for AWS Device Farm run: | set -e bazel run //platform/ios:xcodeproj build_dir="$(mktemp -d)" xcodebuild build-for-testing -scheme CppUnitTests -project MapLibre.xcodeproj -derivedDataPath "$build_dir" ios_cpp_test_app_dir="$(dirname "$(find "$build_dir" -name CppUnitTestsApp.app)")" cd "$ios_cpp_test_app_dir" mkdir Payload mv CppUnitTestsApp.app Payload zip -r CppUnitTestsApp.zip Payload mv CppUnitTestsApp.zip CppUnitTestsApp.ipa cd Payload/CppUnitTestsApp.app/PlugIns zip -r "$ios_cpp_test_app_dir"/CppUnitTests.xctest.zip CppUnitTests.xctest echo ios_cpp_test_artifacts_dir="$ios_cpp_test_app_dir" >> "$GITHUB_ENV" - uses: actions/upload-artifact@v3 with: name: ios-cpp-unit-tests retention-days: 3 path: | ${{ env.ios_cpp_test_artifacts_dir }}/CppUnitTests.xctest.zip ${{ env.ios_cpp_test_artifacts_dir }}/CppUnitTestsApp.ipa