From 27fafa4754d936769047d797701dba5ce9abb087 Mon Sep 17 00:00:00 2001 From: "clawsweeper[bot]" <274271284+clawsweeper[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 14:08:45 -0700 Subject: [PATCH] fix: Found two release-validation regressions in the new focused live- (#74562) Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com> --- .../openclaw-live-and-e2e-checks-reusable.yml | 97 +++++++++++++++++++ .github/workflows/openclaw-release-checks.yml | 4 +- .../package-acceptance-workflow.test.ts | 16 +++ 3 files changed, 115 insertions(+), 2 deletions(-) diff --git a/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml b/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml index 7e438e9bea8..c08491e7886 100644 --- a/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml +++ b/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml @@ -304,6 +304,103 @@ jobs: echo "Trust reason: \`$trusted_reason\`" } >> "$GITHUB_STEP_SUMMARY" + validate_live_suite_filter: + runs-on: ubuntu-24.04 + if: inputs.live_suite_filter != '' + steps: + - name: Validate focused live suite filter + shell: bash + env: + LIVE_SUITE_FILTER: ${{ inputs.live_suite_filter }} + RELEASE_TEST_PROFILE: ${{ inputs.release_test_profile }} + INCLUDE_REPO_E2E: ${{ inputs.include_repo_e2e }} + INCLUDE_LIVE_SUITES: ${{ inputs.include_live_suites }} + LIVE_MODELS_ONLY: ${{ inputs.live_models_only }} + LIVE_MODEL_PROVIDERS: ${{ inputs.live_model_providers }} + run: | + set -euo pipefail + + selected_suites=() + + add_suite() { + selected_suites+=("$1") + } + + add_profile_suite() { + local suite_id="$1" + local profiles="$2" + if [[ " ${profiles} " == *" ${RELEASE_TEST_PROFILE} "* ]]; then + add_suite "$suite_id" + fi + } + + live_model_providers="${LIVE_MODEL_PROVIDERS//,/}" + live_model_providers="${live_model_providers//[[:space:]]/}" + + if [[ "$INCLUDE_REPO_E2E" == "true" ]]; then + add_suite openshell-e2e + fi + + if [[ "$INCLUDE_LIVE_SUITES" == "true" ]]; then + if [[ -n "$live_model_providers" ]]; then + add_suite docker-live-models + else + add_profile_suite docker-live-models "minimum stable full" + fi + + if [[ "$LIVE_MODELS_ONLY" != "true" ]]; then + add_suite live-cache + add_suite openai-ws-stream-live-e2e + + add_profile_suite native-live-src-agents "stable full" + add_profile_suite native-live-src-gateway-core "minimum stable full" + add_profile_suite native-live-src-gateway-profiles-anthropic "stable full" + add_profile_suite native-live-src-gateway-profiles-google "stable full" + add_profile_suite native-live-src-gateway-profiles-minimax "stable full" + add_profile_suite native-live-src-gateway-profiles-openai "minimum stable full" + add_profile_suite native-live-src-gateway-profiles-fireworks "full" + add_profile_suite native-live-src-gateway-profiles-deepseek "full" + add_profile_suite native-live-src-gateway-profiles-opencode-go "full" + add_profile_suite native-live-src-gateway-profiles-opencode-go-smoke "stable" + add_profile_suite native-live-src-gateway-profiles-openrouter "full" + add_profile_suite native-live-src-gateway-profiles-xai "full" + add_profile_suite native-live-src-gateway-profiles-zai "full" + add_profile_suite native-live-src-gateway-backends "stable full" + add_profile_suite native-live-test "stable full" + add_profile_suite native-live-extensions-l-n "full" + add_profile_suite native-live-extensions-moonshot "full" + add_profile_suite native-live-extensions-openai "minimum stable full" + add_profile_suite native-live-extensions-o-z-other "full" + add_profile_suite native-live-extensions-xai "full" + + add_profile_suite live-gateway-docker "minimum stable full" + add_profile_suite live-cli-backend-docker "stable full" + add_profile_suite live-acp-bind-docker "stable full" + add_profile_suite live-codex-harness-docker "stable full" + + add_profile_suite native-live-extensions-a-k "full" + add_profile_suite native-live-extensions-media-audio "full" + add_profile_suite native-live-extensions-media-music-google "full" + add_profile_suite native-live-extensions-media-music-minimax "full" + add_profile_suite native-live-extensions-media-video "full" + fi + fi + + for suite_id in "${selected_suites[@]}"; do + if [[ "$LIVE_SUITE_FILTER" == "$suite_id" ]]; then + echo "Focused live suite filter is valid: ${LIVE_SUITE_FILTER}" + exit 0 + fi + done + + echo "live_suite_filter '${LIVE_SUITE_FILTER}' does not match any runnable suite for release_test_profile='${RELEASE_TEST_PROFILE}' and the selected include flags." >&2 + if [[ "${#selected_suites[@]}" -gt 0 ]]; then + printf 'Runnable focused suite ids: %s\n' "${selected_suites[*]}" >&2 + else + echo "No focused live suites are runnable for the selected include flags." >&2 + fi + exit 1 + validate_release_live_cache: needs: validate_selected_ref if: inputs.include_live_suites && !inputs.live_models_only && (inputs.live_suite_filter == '' || inputs.live_suite_filter == 'live-cache') diff --git a/.github/workflows/openclaw-release-checks.yml b/.github/workflows/openclaw-release-checks.yml index 87c27cdd6af..7e3cbf0af4f 100644 --- a/.github/workflows/openclaw-release-checks.yml +++ b/.github/workflows/openclaw-release-checks.yml @@ -240,7 +240,7 @@ jobs: prepare_release_package: name: Prepare release package artifact needs: [resolve_target] - if: contains(fromJSON('["all","cross-os","live-e2e","package"]'), needs.resolve_target.outputs.rerun_group) + if: contains(fromJSON('["all","cross-os","package"]'), needs.resolve_target.outputs.rerun_group) || (needs.resolve_target.outputs.rerun_group == 'live-e2e' && needs.resolve_target.outputs.live_suite_filter == '') runs-on: ubuntu-24.04 timeout-minutes: 60 permissions: @@ -405,7 +405,7 @@ jobs: docker_e2e_release_checks: name: Run Docker release-path validation needs: [resolve_target, prepare_release_package] - if: contains(fromJSON('["all","live-e2e"]'), needs.resolve_target.outputs.rerun_group) + if: contains(fromJSON('["all","live-e2e"]'), needs.resolve_target.outputs.rerun_group) && needs.resolve_target.outputs.live_suite_filter == '' permissions: actions: read contents: read diff --git a/test/scripts/package-acceptance-workflow.test.ts b/test/scripts/package-acceptance-workflow.test.ts index b324334b609..68fd48db093 100644 --- a/test/scripts/package-acceptance-workflow.test.ts +++ b/test/scripts/package-acceptance-workflow.test.ts @@ -132,6 +132,16 @@ describe("package artifact reuse", () => { ); expect(workflow).toContain("OPENCLAW_LIVE_COMMAND: ${{ matrix.command }}"); expect(workflow).toContain("live_suite_filter:"); + expect(workflow).toContain("validate_live_suite_filter:"); + expect(workflow).toContain("LIVE_SUITE_FILTER: ${{ inputs.live_suite_filter }}"); + expect(workflow).toContain( + "live_suite_filter '${LIVE_SUITE_FILTER}' does not match any runnable suite", + ); + expect(workflow).toContain('add_profile_suite docker-live-models "minimum stable full"'); + expect(workflow).toContain( + 'add_profile_suite native-live-src-gateway-core "minimum stable full"', + ); + expect(workflow).toContain('add_profile_suite live-cli-backend-docker "stable full"'); expect(workflow).toContain( "inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id", ); @@ -319,6 +329,12 @@ describe("package artifact reuse", () => { expect(workflow).toContain( "live_suite_filter: ${{ needs.resolve_target.outputs.live_suite_filter }}", ); + expect(workflow).toContain( + "contains(fromJSON('[\"all\",\"cross-os\",\"package\"]'), needs.resolve_target.outputs.rerun_group) || (needs.resolve_target.outputs.rerun_group == 'live-e2e' && needs.resolve_target.outputs.live_suite_filter == '')", + ); + expect(workflow).toContain( + "contains(fromJSON('[\"all\",\"live-e2e\"]'), needs.resolve_target.outputs.rerun_group) && needs.resolve_target.outputs.live_suite_filter == ''", + ); expect(workflow).toContain("- live-e2e"); expect(workflow).toContain("- qa-live"); });