From 34cabbb34f6f84ef8bbf55acb25c7e577ad450cd Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Mon, 27 Jul 2026 13:25:44 +0200 Subject: [PATCH 1/2] CI: Run Swift tests on GitHub Actions --- .github/workflows/test.yml | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f91e660973..6e9d5cda5d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,6 +32,7 @@ jobs: metrics-changed: ${{ steps.set-flags.outputs.metrics-changed }} python-changed: ${{ steps.set-flags.outputs.python-changed }} rust-changed: ${{ steps.set-flags.outputs.rust-changed }} + swift-changed: ${{ steps.set-flags.outputs.swift-changed }} yaml-changed: ${{ steps.set-flags.outputs.yaml-changed }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -83,6 +84,12 @@ jobs: **/Cargo.lock **/*.rs base_sha: ${{ github.event.pull_request.base.sha || github.event.before }} + - id: changed-files-swift + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 + with: + files: | + glean-core/ios/** + base_sha: ${{ github.event.pull_request.base.sha || github.event.before }} - id: changed-files-yaml uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: @@ -99,6 +106,7 @@ jobs: METRICS_CHANGED: ${{ github.ref_name == 'main' || steps.changed-files-metrics.outputs.any_changed }} PYTHON_CHANGED: ${{ github.ref_name == 'main' || steps.changed-files-python.outputs.any_changed }} RUST_CHANGED: ${{ github.ref_name == 'main' || steps.changed-files-rust.outputs.any_changed }} + SWIFT_CHANGED: ${{ github.ref_name == 'main' || steps.changed-files-swift.outputs.any_changed }} YAML_CHANGED: ${{ github.ref_name == 'main' || steps.changed-files-yaml.outputs.any_changed }} run: | echo "cargo-changed=$CARGO_CHANGED" >> $GITHUB_OUTPUT @@ -107,6 +115,7 @@ jobs: echo "metrics-changed=$METRICS_CHANGED" >> $GITHUB_OUTPUT echo "python-changed=$PYTHON_CHANGED" >> $GITHUB_OUTPUT echo "rust-changed=$RUST_CHANGED" >> $GITHUB_OUTPUT + echo "swift-changed=$SWIFT_CHANGED" >> $GITHUB_OUTPUT echo "yaml-changed=$YAML_CHANGED" >> $GITHUB_OUTPUT test-rust: @@ -321,6 +330,57 @@ jobs: make build-python-wheel GLEAN_BUILD_TARGET="$target" GLEAN_BUILD_EXTRA="--zig" done + test-swift: + runs-on: macos-latest + needs: [decide-runs] + if: needs.decide-runs.outputs.rust-changed == 'true' || needs.decide-runs.outputs.swift-changed == 'true' + steps: + - *checkout + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 + + - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 + with: + ruby-version: '3.4' + + - name: Install xcpretty + run: | + gem install --no-document xcpretty + + - name: Show Ruby environment + run: | + ruby --version + gem env + xcpretty --version || true + + - name: Setup build environment + run: | + set -x + rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios + + # For some reason everything works fine if we use the host clang, + # not the Xcode-bundled clang. + echo '[target.aarch64-apple-darwin]' >> ~/.cargo/config.toml + echo 'linker = "/usr/bin/cc"' >> ~/.cargo/config.toml + + # List available devices -- allows us to see what's there + DEVICES=$(xcrun xctrace list devices 2>&1) + echo "$DEVICES" + # Pick a device and start it + UUID=$(echo "$DEVICES" | grep --max-count=1 'iPhone 17 Simulator (26' | awk -F'[()]' '{print $4}') + xcrun simctl boot "$UUID" + + - name: Run iOS build + run: | + make build-swift + + - name: Run iOS test + run: | + make test-swift + test-kotlin: runs-on: ubuntu-latest needs: [decide-runs] From 74f326133041ddab0d4ebd1a6c5202bd9289c986 Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Wed, 9 Sep 2026 15:37:42 +0200 Subject: [PATCH 2/2] CI: Build & test iOS sample app --- .github/workflows/test.yml | 40 +++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6e9d5cda5d..8b5c8f7f3e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -89,6 +89,7 @@ jobs: with: files: | glean-core/ios/** + samples/ios/app/** base_sha: ${{ github.event.pull_request.base.sha || github.event.before }} - id: changed-files-yaml uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 @@ -356,7 +357,8 @@ jobs: gem env xcpretty --version || true - - name: Setup build environment + - &swift-build-environment + name: Setup build environment run: | set -x rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios @@ -381,6 +383,42 @@ jobs: run: | make test-swift + test-swift-sample: + runs-on: macos-latest + needs: [decide-runs] + if: needs.decide-runs.outputs.rust-changed == 'true' || needs.decide-runs.outputs.swift-changed == 'true' + steps: + - *checkout + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 + + - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 + with: + ruby-version: '3.4' + + - name: Install xcpretty + run: | + gem install --no-document xcpretty + + - name: Show Ruby environment + run: | + ruby --version + gem env + xcpretty --version || true + + - *swift-build-environment + + - name: Build XCFramework archive + run: | + make build-xcframework + + - name: Test sample app + run: | + make test-ios-sample + test-kotlin: runs-on: ubuntu-latest needs: [decide-runs]