openclaw/scripts/install-xcodegen.sh
RoboClaw 5387e99732
fix: native tool installs fail on transient receive errors (#177395)
* fix: native tool installs fail on transient receive errors

Keep the existing bounded curl retries for immutable, checksum-pinned GET downloads, including receive errors. Preserve terminal failures and checksum-before-extraction ordering.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>

* fix: native tool installs fail on transient receive errors

Worked on by:
- @vincentkoc

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
OpenClaw-Publication: 7ed54039-69b4-4006-8d6e-b9ecf90aedd1

---------

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-10-19 14:57:24 +00:00

46 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
if [[ "$#" -ne 1 ]]; then
echo "usage: $0 <install-directory>" >&2
exit 2
fi
readonly xcodegen_version="2.46.0"
readonly xcodegen_checksum="4d9e34b62172d645eed6457cac13fc222569974098ef4ee9c3368bedf0196806"
install_dir="$1"
temp_dir="$(mktemp -d)"
trap 'rm -rf "$temp_dir"' EXIT
archive="$temp_dir/xcodegen.zip"
extract_dir="$temp_dir/extract"
# Immutable GETs can retry transport errors too; curl resets --output on retry.
# Bound individual transfers and the retry window. curl resets --max-time for
# each retry, while a started retry can outlive --retry-max-time.
curl --fail --location --no-progress-meter --show-error \
--connect-timeout 10 --max-time 120 \
--retry 3 --retry-all-errors --retry-max-time 120 \
--output "$archive" \
"https://github.com/yonaskolb/XcodeGen/releases/download/$xcodegen_version/xcodegen.zip" \
2> >(sed 's/^Warning: /::warning::/' >&2)
if [[ "$(shasum -a 256 "$archive" | awk '{print $1}')" != "$xcodegen_checksum" ]]; then
echo "xcodegen archive checksum mismatch" >&2
exit 1
fi
mkdir -p "$install_dir" "$extract_dir"
unzip -q "$archive" -d "$extract_dir"
prefix_dir="$(cd "$(dirname "$install_dir")" && pwd)"
share_dir="$prefix_dir/share/xcodegen"
rm -rf "$share_dir"
mkdir -p "$(dirname "$share_dir")"
cp -R "$extract_dir/xcodegen/share/xcodegen" "$share_dir"
install -m 0755 "$extract_dir/xcodegen/bin/xcodegen" "$install_dir/xcodegen"
# XcodeGen resolves SettingPresets relative to its executable, so keep the
# release archive's bin/../share layout intact or project generation will fail.
[[ "$("$install_dir/xcodegen" --version)" == "Version: $xcodegen_version" ]]