--- name: iOS app on: pull_request: paths: - .github/workflows/ios.yml - ios/build-rust-library.sh - ios/.swiftformat - ios/**/*.swift - ios/**/*.xctestplan workflow_dispatch: permissions: {} jobs: check-formatting: name: Check formatting runs-on: macos-13 steps: - name: Install SwiftFormat run: | brew update brew upgrade swiftformat - name: Checkout repository uses: actions/checkout@v4 - name: Check formatting run: | swiftformat --version swiftformat --lint . working-directory: ios swiftlint: name: Run swiftlint runs-on: macos-13 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Run swiftlint run: | brew install swiftlint swiftlint --version swiftlint --reporter github-actions-logging working-directory: ios test: name: Unit tests runs-on: macos-13-xlarge env: SOURCE_PACKAGES_PATH: .spm steps: - name: Checkout repository uses: actions/checkout@v4 - name: Configure cache uses: actions/cache@v3 with: path: ios/${{ env.SOURCE_PACKAGES_PATH }} key: ${{ runner.os }}-spm-${{ hashFiles('ios/**/Package.resolved') }} restore-keys: | ${{ runner.os }}-spm- - name: Setup go-lang uses: actions/setup-go@v3 with: go-version: 1.21.13 - name: Install xcbeautify run: | brew update brew install xcbeautify - name: Install protobuf run: | brew update brew install protobuf - name: Set up yeetd to workaround XCode being slow in CI run: | wget https://github.com/biscuitehh/yeetd/releases/download/1.0/yeetd-normal.pkg sudo installer -pkg yeetd-normal.pkg -target / yeetd & - name: Configure Xcode uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '15.0.1' - name: Configure Rust # Since the https://github.com/actions/runner-images/releases/tag/macos-13-arm64%2F20240721.1 release # Brew does not install tools at the correct location anymore # This update broke the rust build script which was assuming the cargo binary was located in ~/.cargo/bin/cargo # The workaround is to fix brew paths by running brew bundle dump, and then brew bundle # WARNING: This has to be the last brew "upgrade" commands that is ran, # otherwise the brew path will be broken again. run: | brew bundle dump brew bundle rustup default stable rustup update stable rustup target add aarch64-apple-ios-sim - name: Configure Xcode project run: | cp Base.xcconfig.template Base.xcconfig cp App.xcconfig.template App.xcconfig cp PacketTunnel.xcconfig.template PacketTunnel.xcconfig cp Screenshots.xcconfig.template Screenshots.xcconfig cp Api.xcconfig.template Api.xcconfig working-directory: ios/Configurations - name: Run unit tests run: | set -o pipefail && env NSUnbufferedIO=YES xcodebuild \ -project MullvadVPN.xcodeproj \ -scheme MullvadVPN \ -testPlan MullvadVPNCI \ -destination "platform=iOS Simulator,name=iPhone 15" \ -clonedSourcePackagesDirPath "$SOURCE_PACKAGES_PATH" \ -disableAutomaticPackageResolution \ -resultBundlePath xcode-test-report \ test 2>&1 | xcbeautify working-directory: ios/ - name: Archive test report if: always() run: zip -r test-report.zip ios/xcode-test-report.xcresult - name: Store test report artifact if: always() uses: actions/upload-artifact@v4 with: name: test-report path: test-report.zip