From ce671c3513769b10877e6181dfc7f6b48cf86e05 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 11 Jul 2026 15:35:05 -0700 Subject: [PATCH] ci: honor frozen target tool versions (#104740) --- .github/workflows/ci.yml | 25 +++++++++++++++++++------ test/scripts/ci-workflow-guards.test.ts | 11 ++++++++++- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 789c6f163a22..609018ebb0cf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1051,8 +1051,8 @@ jobs: run: | if [[ "$COMPATIBILITY_TARGET" == "true" ]]; then # Frozen targets can contain timing-sensitive tests fixed on current main. - # Retry only failures once; deterministic regressions still fail twice. - pnpm --dir ui test -- --retry=1 + # Preserve one retry, but let their browser helpers use their 10-second waits. + pnpm --dir ui test -- --retry=1 --testTimeout=10000 else pnpm --dir ui test fi @@ -2091,11 +2091,24 @@ jobs: "$swift_tools_dir/swiftformat" --version "$swift_tools_dir/swiftlint" version elif [[ "$HISTORICAL_TARGET" == "true" ]]; then - # Frozen release targets before the pinned installer used SwiftFormat 0.61.1. - # Keep their lint contract stable instead of inheriting new Homebrew rules. + # Frozen release targets before the pinned installer used one of these + # reviewed formatter contracts. Fail closed for any unknown minimum. brew install xcodegen swiftlint - swiftformat_version="0.61.1" - swiftformat_checksum="b990400779aceb7d7020796eb9ba814d4480543f671d38fc0ff48cb72f04c584" + swiftformat_min_version="$(awk '$1 == "--min-version" { print $2; exit }' config/swiftformat)" + case "$swiftformat_min_version" in + ""|0.61.1) + swiftformat_version="0.61.1" + swiftformat_checksum="b990400779aceb7d7020796eb9ba814d4480543f671d38fc0ff48cb72f04c584" + ;; + 0.62.1) + swiftformat_version="0.62.1" + swiftformat_checksum="7cb1cb1fae04932047c7015441c543848e8e60e1572d808d080e0a1f1661114a" + ;; + *) + echo "Unsupported frozen-target SwiftFormat minimum: $swiftformat_min_version" >&2 + exit 1 + ;; + esac swiftformat_archive="$RUNNER_TEMP/swiftformat-$swiftformat_version.zip" swift_tools_dir="$RUNNER_TEMP/openclaw-legacy-swift-tools" curl --fail --location --silent --show-error --retry 3 \ diff --git a/test/scripts/ci-workflow-guards.test.ts b/test/scripts/ci-workflow-guards.test.ts index 61671c03ad7d..bbd67fcda103 100644 --- a/test/scripts/ci-workflow-guards.test.ts +++ b/test/scripts/ci-workflow-guards.test.ts @@ -1838,6 +1838,15 @@ describe("ci workflow guards", () => { expect(swiftInstall.run).toContain( 'swiftformat_checksum="b990400779aceb7d7020796eb9ba814d4480543f671d38fc0ff48cb72f04c584"', ); + expect(swiftInstall.run).toContain( + 'swiftformat_checksum="7cb1cb1fae04932047c7015441c543848e8e60e1572d808d080e0a1f1661114a"', + ); + expect(swiftInstall.run).toContain( + 'swiftformat_min_version="$(awk \'$1 == "--min-version" { print $2; exit }\' config/swiftformat)"', + ); + expect(swiftInstall.run).toContain( + 'echo "Unsupported frozen-target SwiftFormat minimum: $swiftformat_min_version" >&2', + ); expect(swiftInstall.run).toContain('echo "$swift_tools_dir" >> "$GITHUB_PATH"'); expect(swiftInstall.run).toContain( '[[ "$("$swift_tools_dir/swiftformat" --version)" == "$swiftformat_version" ]]', @@ -1866,7 +1875,7 @@ describe("ci workflow guards", () => { "${{ needs.preflight.outputs.compatibility_target }}", ); expect(uiTest.run).toContain('if [[ "$COMPATIBILITY_TARGET" == "true" ]]'); - expect(uiTest.run).toContain("pnpm --dir ui test -- --retry=1"); + expect(uiTest.run).toContain("pnpm --dir ui test -- --retry=1 --testTimeout=10000"); expect(uiTest.run).toContain("pnpm --dir ui test"); });