name: Build Apple on: push: branches: - main pull_request: branches: - "**" workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: true jobs: build: name: Build App (${{ matrix.platform }}) runs-on: namespace-profile-macos-large strategy: fail-fast: false matrix: include: - platform: macOS cache-id: macos destination: platform=macOS rust-targets: x86_64-apple-darwin,aarch64-apple-darwin - platform: iOS Simulator cache-id: ios-simulator destination: platform=iOS Simulator,name=iPhone 17 Pro rust-targets: aarch64-apple-ios-sim,x86_64-apple-ios env: CARGO_INCREMENTAL: 0 RUST_BACKTRACE: short RUSTC_WRAPPER: sccache SCCACHE_CACHE_SIZE: 20G steps: - name: Checkout uses: https://code.forgejo.org/actions/checkout@v4 with: token: ${{ github.token }} fetch-depth: 0 submodules: recursive - name: Select Xcode shell: bash run: | set -euo pipefail candidates=( "/Applications/Xcode_26.1.app/Contents/Developer" "/Applications/Xcode_26_1.app/Contents/Developer" "/Applications/Xcode.app/Contents/Developer" "/Applications/Xcode/Xcode.app/Contents/Developer" ) selected="" for candidate in "${candidates[@]}"; do if [[ -d "$candidate" ]]; then selected="$candidate" break fi done if [[ -z "$selected" ]] && command -v xcode-select >/dev/null 2>&1; then selected="$(xcode-select -p)" fi if [[ -z "$selected" ]]; then echo "::error ::Unable to locate an Xcode toolchain" >&2 exit 1 fi echo "DEVELOPER_DIR=$selected" >> "$GITHUB_ENV" DEVELOPER_DIR="$selected" /usr/bin/xcodebuild -version || true - name: Prepare Cache Dirs shell: bash run: | set -euo pipefail cache_root="${NSC_CACHE_PATH:-${HOME}/.cache/burrow}" shared_root="${NSC_SHARED_CACHE_PATH:-${cache_root}/shared}" lane_root="${NSC_LANE_CACHE_PATH:-${cache_root}/lane/${{ matrix.cache-id }}}" mkdir -p \ "${shared_root}/cargo" \ "${shared_root}/rustup" \ "${shared_root}/sccache" \ "${shared_root}/homebrew" \ "${shared_root}/apple/PackageCache" \ "${shared_root}/apple/SourcePackages" \ "${lane_root}/cargo-target" \ "${lane_root}/DerivedData" echo "CARGO_HOME=${shared_root}/cargo" >> "${GITHUB_ENV}" echo "CARGO_TARGET_DIR=${lane_root}/cargo-target" >> "${GITHUB_ENV}" echo "RUSTUP_HOME=${shared_root}/rustup" >> "${GITHUB_ENV}" echo "SCCACHE_DIR=${shared_root}/sccache" >> "${GITHUB_ENV}" echo "HOMEBREW_CACHE=${shared_root}/homebrew" >> "${GITHUB_ENV}" echo "APPLE_PACKAGE_CACHE=${shared_root}/apple/PackageCache" >> "${GITHUB_ENV}" echo "APPLE_SOURCE_PACKAGES=${shared_root}/apple/SourcePackages" >> "${GITHUB_ENV}" echo "APPLE_DERIVED_DATA=${lane_root}/DerivedData" >> "${GITHUB_ENV}" df -h "${shared_root}" "${lane_root}" || true - name: Install Rust shell: bash run: | set -euo pipefail export PATH="${CARGO_HOME}/bin:${PATH}" if ! command -v rustup >/dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.93.1 else rustup set profile minimal rustup toolchain install 1.93.1 rustup default 1.93.1 fi mkdir -p "${CARGO_HOME}/bin" echo "${CARGO_HOME}/bin" >> "${GITHUB_PATH}" export PATH="${CARGO_HOME}/bin:${PATH}" rustup show active-toolchain toolchain="$(rustup show active-toolchain | awk '{print $1}')" cargo_bin="$(rustup which --toolchain "${toolchain}" cargo)" rustc_bin="$(rustup which --toolchain "${toolchain}" rustc)" targets='${{ matrix.rust-targets }}' for target in ${targets//,/ }; do rustup target add --toolchain "${toolchain}" "${target}" done "${rustc_bin}" --version "${cargo_bin}" --version - name: Install Protobuf shell: bash run: | set -euo pipefail if ! command -v protoc >/dev/null 2>&1; then brew install protobuf fi if ! command -v sccache >/dev/null 2>&1; then brew install sccache fi - name: Build shell: bash working-directory: Apple run: | set -euo pipefail xcodebuild build \ -project Burrow.xcodeproj \ -scheme App \ -destination '${{ matrix.destination }}' \ -skipPackagePluginValidation \ -skipMacroValidation \ -onlyUsePackageVersionsFromResolvedFile \ -clonedSourcePackagesDirPath "$APPLE_SOURCE_PACKAGES" \ -packageCachePath "$APPLE_PACKAGE_CACHE" \ -derivedDataPath "$APPLE_DERIVED_DATA" \ CODE_SIGNING_ALLOWED=NO \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_IDENTITY="" \ DEVELOPMENT_TEAM=""