From 7c6ad1e6ceaa8a3fd310b0ded4d1f53fdba159be Mon Sep 17 00:00:00 2001 From: Gronod Date: Sat, 12 Sep 2026 08:34:37 +0100 Subject: [PATCH] fix(m9): pin prebuilt xcodegen for macOS 12 CI (#109) brew install xcodegen resolves to a formula requiring Xcode 15.3, which cannot be installed on the macOS 12 runner (Xcode 14.2), failing run 31390 before project generation. Install a pinned prebuilt XcodeGen 2.38.0 release via scripts/ensure-host-tools.sh, shared by the build-and-test and package jobs (package-release.sh also runs xcodegen). Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .gitea/workflows/macos.yml | 12 ++++++++--- scripts/ensure-host-tools.sh | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100755 scripts/ensure-host-tools.sh diff --git a/.gitea/workflows/macos.yml b/.gitea/workflows/macos.yml index 7a0b901..b75e74e 100644 --- a/.gitea/workflows/macos.yml +++ b/.gitea/workflows/macos.yml @@ -24,10 +24,11 @@ jobs: - name: Assert Xcode 14 toolchain run: xcodebuild -version | grep -E "Xcode 14." || (echo "Unexpected Xcode version" && exit 1) + # Homebrew's xcodegen formula requires Xcode 15.3, which cannot be + # installed on macOS 12 (#109). The script installs a pinned + # prebuilt release instead. - name: Ensure host tools - run: | - command -v xcodegen || brew install xcodegen - python3 -c "import dmgbuild" 2>/dev/null || pip3 install dmgbuild + run: scripts/ensure-host-tools.sh - name: Generate Xcode project run: xcodegen generate --spec project.yml @@ -134,6 +135,11 @@ jobs: - name: Checkout uses: actions/checkout@v4 + # scripts/package-release.sh runs `xcodegen generate` and dmgbuild; + # see build-and-test for why brew is not used on macOS 12 (#109). + - name: Ensure host tools + run: scripts/ensure-host-tools.sh + - name: Package release run: scripts/package-release.sh env: diff --git a/scripts/ensure-host-tools.sh b/scripts/ensure-host-tools.sh new file mode 100755 index 0000000..9c0afef --- /dev/null +++ b/scripts/ensure-host-tools.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# scripts/ensure-host-tools.sh +# +# Bootstrap host tools needed by CI on the macOS 12 runner: +# - xcodegen: pinned prebuilt release from GitHub (Homebrew's current +# formula requires Xcode 15.3, which cannot be installed on macOS 12). +# - dmgbuild: via pip3 (used by scripts/package-release.sh). +# +# Safe to run repeatedly: existing tools are left alone. + +set -eu + +XCODEGEN_VERSION="2.38.0" +INSTALL_ROOT="${XCODEGEN_HOME:-$HOME/.local/xcodegen/$XCODEGEN_VERSION}" + +echo "==> Ensuring dmgbuild" +python3 -c "import dmgbuild" 2>/dev/null || pip3 install dmgbuild + +if command -v xcodegen >/dev/null 2>&1; then + echo "==> xcodegen already on PATH: $(xcodegen --version)" +else + echo "==> Installing xcodegen $XCODEGEN_VERSION (prebuilt)" + TMP="${RUNNER_TEMP:-${TMPDIR:-/tmp}}" + ZIP="$TMP/xcodegen-$XCODEGEN_VERSION.zip" + curl -fL --retry 3 \ + "https://github.com/yonaskolb/XcodeGen/releases/download/$XCODEGEN_VERSION/xcodegen.zip" \ + -o "$ZIP" + rm -rf "$INSTALL_ROOT" + mkdir -p "$INSTALL_ROOT" + # Zip contains xcodegen/{bin/xcodegen,share/xcodegen/SettingPresets}; + # XcodeGen resolves its presets relative to the binary, so keep the tree. + unzip -q "$ZIP" -d "$INSTALL_ROOT" + BIN_DIR="$INSTALL_ROOT/xcodegen/bin" + chmod +x "$BIN_DIR/xcodegen" + if [ -n "${GITHUB_PATH:-}" ]; then + echo "$BIN_DIR" >> "$GITHUB_PATH" + fi + PATH="$BIN_DIR:$PATH" + echo "==> Installed: $("$BIN_DIR/xcodegen" --version)" +fi -- 2.39.5