From a3f6f24b79a5c35bb2267c8936e733c55be67c5f Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Mon, 4 May 2026 12:13:43 -0700 Subject: [PATCH] ci: gate slack live qa credentials --- .github/workflows/openclaw-release-checks.yml | 14 ++++++++++---- .github/workflows/qa-live-transports-convex.yml | 1 + test/scripts/package-acceptance-workflow.test.ts | 12 ++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.github/workflows/openclaw-release-checks.yml b/.github/workflows/openclaw-release-checks.yml index 95c2a3f2757..92686c9c7ac 100644 --- a/.github/workflows/openclaw-release-checks.yml +++ b/.github/workflows/openclaw-release-checks.yml @@ -208,12 +208,19 @@ jobs: RELEASE_PROFILE_INPUT: ${{ inputs.release_profile }} RELEASE_RERUN_GROUP_INPUT: ${{ inputs.rerun_group }} RELEASE_LIVE_SUITE_FILTER_INPUT: ${{ inputs.live_suite_filter }} + RELEASE_QA_SLACK_LIVE_CI_ENABLED: ${{ vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED || 'false' }} RELEASE_PACKAGE_ACCEPTANCE_PACKAGE_SPEC_INPUT: ${{ inputs.package_acceptance_package_spec }} run: | set -euo pipefail qa_live_matrix_enabled=true qa_live_telegram_enabled=true - qa_live_slack_enabled=true + qa_live_slack_enabled=false + qa_live_slack_ci_enabled="$(printf '%s' "$RELEASE_QA_SLACK_LIVE_CI_ENABLED" | tr '[:upper:]' '[:lower:]')" + if [[ "$qa_live_slack_ci_enabled" != "true" && "$qa_live_slack_ci_enabled" != "1" && "$qa_live_slack_ci_enabled" != "yes" ]]; then + qa_live_slack_ci_enabled=false + else + qa_live_slack_ci_enabled=true + fi filter="$(printf '%s' "$RELEASE_LIVE_SUITE_FILTER_INPUT" | tr '[:upper:]' '[:lower:]')" if [[ -n "${filter// }" ]]; then @@ -233,7 +240,6 @@ jobs: qa_filter_seen=true matrix_selected=true telegram_selected=true - slack_selected=true ;; qa-live-non-slack|qa-non-slack|non-slack|no-slack|without-slack) qa_filter_seen=true @@ -250,7 +256,7 @@ jobs: ;; qa-live-slack|qa-slack|slack) qa_filter_seen=true - slack_selected=true + slack_selected="$qa_live_slack_ci_enabled" ;; esac done @@ -883,7 +889,7 @@ jobs: qa_live_slack_release_checks: name: Run QA Lab live Slack lane needs: [resolve_target] - if: contains(fromJSON('["all","qa","qa-live"]'), needs.resolve_target.outputs.rerun_group) && needs.resolve_target.outputs.qa_live_slack_enabled == 'true' + if: contains(fromJSON('["all","qa","qa-live"]'), needs.resolve_target.outputs.rerun_group) && needs.resolve_target.outputs.qa_live_slack_enabled == 'true' && vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED == 'true' runs-on: blacksmith-8vcpu-ubuntu-2404 timeout-minutes: 60 permissions: diff --git a/.github/workflows/qa-live-transports-convex.yml b/.github/workflows/qa-live-transports-convex.yml index f2306dbfdf8..e385423ea99 100644 --- a/.github/workflows/qa-live-transports-convex.yml +++ b/.github/workflows/qa-live-transports-convex.yml @@ -562,6 +562,7 @@ jobs: run_live_slack: name: Run Slack live QA lane with Convex leases needs: [authorize_actor, validate_selected_ref] + if: vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED == 'true' runs-on: blacksmith-8vcpu-ubuntu-2404 timeout-minutes: 60 environment: qa-live-shared diff --git a/test/scripts/package-acceptance-workflow.test.ts b/test/scripts/package-acceptance-workflow.test.ts index b4ac1ca9d04..81b9ca8edfb 100644 --- a/test/scripts/package-acceptance-workflow.test.ts +++ b/test/scripts/package-acceptance-workflow.test.ts @@ -575,6 +575,18 @@ describe("package artifact reuse", () => { ); }); + it("keeps Slack live QA disabled in CI until credentials are provisioned", () => { + const releaseWorkflow = readFileSync(RELEASE_CHECKS_WORKFLOW, "utf8"); + const qaWorkflow = readFileSync(QA_LIVE_TRANSPORTS_WORKFLOW, "utf8"); + + expect(releaseWorkflow).toContain("qa_live_slack_enabled=false"); + expect(releaseWorkflow).toContain( + "RELEASE_QA_SLACK_LIVE_CI_ENABLED: ${{ vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED || 'false' }}", + ); + expect(releaseWorkflow).toContain("vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED == 'true'"); + expect(qaWorkflow).toContain("if: vars.OPENCLAW_QA_SLACK_LIVE_CI_ENABLED == 'true'"); + }); + it("names package acceptance Telegram as artifact-backed package validation", () => { const workflow = readFileSync(PACKAGE_ACCEPTANCE_WORKFLOW, "utf8");