From f7d61b4352952aae852454f7571cf59d42b695ff Mon Sep 17 00:00:00 2001 From: Dallin Romney Date: Thu, 23 Jul 2026 12:26:49 +0900 Subject: [PATCH] fix(ci): skip new OpenClawKit suite for frozen targets (#112860) --- .github/workflows/ci.yml | 5 +++++ test/scripts/ci-workflow-guards.test.ts | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62bddd1e9d07..5656122db3d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,6 +110,7 @@ jobs: run_macos_node: ${{ steps.manifest.outputs.run_macos_node }} macos_node_matrix: ${{ steps.manifest.outputs.macos_node_matrix }} run_macos_swift: ${{ steps.manifest.outputs.run_macos_swift }} + run_openclawkit_tests: ${{ steps.manifest.outputs.run_openclawkit_tests }} run_ios_build: ${{ steps.manifest.outputs.run_ios_build }} run_android_job: ${{ steps.manifest.outputs.run_android_job }} run_protocol_event_coverage: ${{ steps.manifest.outputs.run_protocol_event_coverage }} @@ -525,6 +526,7 @@ jobs: const targetWorkflow = existsSync(".github/workflows/ci.yml") ? readFileSync(".github/workflows/ci.yml", "utf8") : ""; + const supportsOpenClawKitTests = targetWorkflow.includes("openclawkit-tests-contract-v1"); const supportsCurrentAndroidCi = targetWorkflow.includes("android-ci-contract-v2"); const useCompatibleAndroidCi = compatibilityTarget && !supportsCurrentAndroidCi; const supportsFormatCheck = @@ -703,6 +705,7 @@ jobs: ), run_macos_swift: runMacos && (!frozenTarget || compatibilityTarget || supportsCurrentMacosSwiftCi), + run_openclawkit_tests: runMacos && supportsOpenClawKitTests, run_ios_build: runIosBuild, run_android_job: runAndroid, run_protocol_event_coverage: runProtocolEventCoverage, @@ -3096,7 +3099,9 @@ jobs: fi swift build --package-path apps/shared/OpenClawKit --target OpenClawKit --disable-default-traits + # openclawkit-tests-contract-v1: the target owns an independently runnable package suite. - name: OpenClawKit tests + if: needs.preflight.outputs.run_openclawkit_tests == 'true' run: | set -euo pipefail openclawkit_scratch="$(mktemp -d "$RUNNER_TEMP/openclawkit.XXXXXX")" diff --git a/test/scripts/ci-workflow-guards.test.ts b/test/scripts/ci-workflow-guards.test.ts index ce1c5265cbec..e42a4e7ee787 100644 --- a/test/scripts/ci-workflow-guards.test.ts +++ b/test/scripts/ci-workflow-guards.test.ts @@ -83,6 +83,7 @@ function runCiManifestFixture(options: { iosBuildCapability?: boolean; androidCiCapabilities?: boolean; nativeI18nCapabilities?: boolean; + openClawKitTests?: boolean; protocolCoverage?: boolean; qaSmokePlan?: boolean; formatCheck?: boolean; @@ -204,6 +205,9 @@ function runCiManifestFixture(options: { ...((options.androidCiCapabilities ?? options.bundledPlanner) ? ["android-ci-contract-v2"] : []), + ...((options.openClawKitTests ?? options.bundledPlanner) + ? ["openclawkit-tests-contract-v1"] + : []), ].join("\n"), ); const outputPath = path.join(root, "manifest.out"); @@ -3825,6 +3829,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" expect(legacy.outputs.historical_target).toBe("true"); expect(legacy.outputs.run_ios_build).toBe("false"); expect(legacy.outputs.run_native_i18n).toBe("false"); + expect(legacy.outputs.run_openclawkit_tests).toBe("false"); expect(legacy.outputs.run_qa_smoke_ci).toBe("false"); expect(legacy.outputs.run_channel_contracts_shards).toBe("false"); expect(legacy.outputs.run_protocol_event_coverage).toBe("false"); @@ -3854,6 +3859,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" expect(current.status, current.output).toBe(0); expect(current.outputs.run_ios_build).toBe("true"); expect(current.outputs.run_native_i18n).toBe("true"); + expect(current.outputs.run_openclawkit_tests).toBe("true"); expect(current.outputs.run_qa_smoke_ci).toBe("true"); expect(current.outputs.run_channel_contracts_shards).toBe("true"); expect(current.outputs.run_protocol_event_coverage).toBe("true"); @@ -4091,6 +4097,9 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" const swiftLint = workflow.jobs["macos-swift"].steps.find( (step: { name?: string }) => step.name === "Swift lint", ); + const openClawKitTests = workflow.jobs["macos-swift"].steps.find( + (step: { name?: string }) => step.name === "OpenClawKit tests", + ); expect(swiftInstall.run).toContain("brew install xcodegen swiftlint"); expect(swiftInstall.run).not.toContain("brew install xcodegen swiftlint swiftformat"); expect(swiftInstall.run).toContain( @@ -4118,6 +4127,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" expect(swiftInstall.run).toContain('elif [[ "$HISTORICAL_TARGET" == "true" ]]'); expect(swiftLint.run).toContain("swiftlint lint --config config/swiftlint.yml"); expect(swiftLint.run).toContain('elif [[ "$HISTORICAL_TARGET" == "true" ]]'); + expect(openClawKitTests.if).toBe("needs.preflight.outputs.run_openclawkit_tests == 'true'"); const checkShard = workflow.jobs["check-shard"].steps.find( (step: { name?: string }) => step.name === "Run check shard",