mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 21:35:42 +00:00
68 lines
2.6 KiB
Bash
Executable File
68 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Keeps Bazel macOS builds in sync with the installed Xcode version.
|
|
#
|
|
# Needed on macOS runners and developer machines because Bazel's generated
|
|
# local_config_xcode/local_config_apple_cc repositories bake in the discovered
|
|
# Xcode version. If Xcode is upgraded in place, the DEVELOPER_DIR path stays the
|
|
# same, so Bazel can otherwise keep using stale Xcode metadata.
|
|
#
|
|
# 1. Writes .bazelrc.xcode with mactools-scoped flags:
|
|
# - action_env for Apple build remote cache key invalidation
|
|
# - DEVELOPER_DIR pointing to the active Xcode for Apple builds
|
|
#
|
|
# 2. Runs `bazel clean --expunge` when the version actually changes, because
|
|
# local_config_apple_cc (a cached repository rule) bakes in the old version
|
|
# and can only be refreshed by clearing the output base.
|
|
#
|
|
# .bazelrc imports the generated file via: try-import %workspace%/.bazelrc.xcode
|
|
|
|
set -euo pipefail
|
|
|
|
DEVELOPER_DIR=""
|
|
if [ -d "/Applications/Xcode.app/Contents/Developer" ]; then
|
|
DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
|
|
else
|
|
DEVELOPER_DIR=$(xcode-select -p 2>/dev/null || true)
|
|
fi
|
|
|
|
XCODE_BUILD_VERSION=$(DEVELOPER_DIR="$DEVELOPER_DIR" xcodebuild -version 2>/dev/null | awk '/Build version/ {print $3}' || true)
|
|
|
|
if [ -z "$XCODE_BUILD_VERSION" ]; then
|
|
echo "ERROR: Could not detect full Xcode build version."
|
|
echo "mactools/Sparkle builds require full Xcode, not just Command Line Tools."
|
|
echo "Install Xcode at /Applications/Xcode.app or select it with xcode-select."
|
|
exit 1
|
|
fi
|
|
|
|
BAZELRC_XCODE=".bazelrc.xcode"
|
|
EXPECTED_LINE="common:mactools --action_env=XCODE_BUILD_VERSION=${XCODE_BUILD_VERSION}"
|
|
|
|
# Check if the file already has the right version (first line is the version marker)
|
|
if [ -f "$BAZELRC_XCODE" ]; then
|
|
CURRENT_FIRST_LINE=$(head -1 "$BAZELRC_XCODE")
|
|
if [ "$CURRENT_FIRST_LINE" = "$EXPECTED_LINE" ]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Xcode Bazel config changed (or first run) — expunge local cache to clear
|
|
# stale local_config_apple_cc, then write the new config
|
|
OLD_CONFIG="missing"
|
|
if [ -f "$BAZELRC_XCODE" ]; then
|
|
OLD_CONFIG=$(head -1 "$BAZELRC_XCODE")
|
|
fi
|
|
echo "Xcode Bazel config changed: ${OLD_CONFIG} -> ${EXPECTED_LINE}"
|
|
echo "Running bazel clean --expunge to clear stale toolchain config..."
|
|
bazel clean --expunge 2>/dev/null || true
|
|
|
|
cat > "$BAZELRC_XCODE" << EOF
|
|
${EXPECTED_LINE}
|
|
common:mactools --repo_env=DEVELOPER_DIR=${DEVELOPER_DIR}
|
|
EOF
|
|
|
|
if [ -n "${GITHUB_ENV:-}" ]; then
|
|
echo "DEVELOPER_DIR=${DEVELOPER_DIR}" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
echo "Updated ${BAZELRC_XCODE} — next macOS Bazel build will rebuild with Xcode ${XCODE_BUILD_VERSION}"
|