From 782781b0f963e1844a5bceaa1ada3efd580b3e84 Mon Sep 17 00:00:00 2001 From: contrueCT Date: Sun, 26 Apr 2026 13:43:02 +0800 Subject: [PATCH 1/2] ci: add rerun workflow for module checks --- .github/workflows/rerun-ci.yml | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .github/workflows/rerun-ci.yml diff --git a/.github/workflows/rerun-ci.yml b/.github/workflows/rerun-ci.yml new file mode 100644 index 000000000..f694aefb8 --- /dev/null +++ b/.github/workflows/rerun-ci.yml @@ -0,0 +1,89 @@ +name: "Rerun CI" + +on: + workflow_run: + workflows: + - "java-client-ci" + - "loader-ci" + - "tools-ci" + - "hubble-ci" + - "spark-connector-ci" + - "go-client-ci" + types: + - completed + +permissions: {} + +env: + MAX_RERUNS: '2' + RETRY_DELAY_SECONDS: '180' + +jobs: + decide-rerun-action: + runs-on: ubuntu-latest + outputs: + action: ${{ steps.decision.outputs.action }} + steps: + - name: Decide rerun action + id: decision + env: + WORKFLOW_NAME: ${{ github.event.workflow_run.name }} + RUN_ID: ${{ github.event.workflow_run.id }} + RUN_ATTEMPT: ${{ github.event.workflow_run.run_attempt }} + CONCLUSION: ${{ github.event.workflow_run.conclusion }} + EVENT_NAME: ${{ github.event.workflow_run.event }} + HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }} + run: | + set -euo pipefail + + action="skip" + reason="non-failure" + + if [[ "$CONCLUSION" == "failure" ]]; then + if [[ "$EVENT_NAME" != "push" && "$EVENT_NAME" != "pull_request" ]]; then + reason="unsupported event: $EVENT_NAME" + elif (( RUN_ATTEMPT > MAX_RERUNS )); then + reason="retry limit reached" + else + action="rerun" + reason="within retry limit" + fi + fi + + { + echo "action=$action" + echo "reason=$reason" + } >> "$GITHUB_OUTPUT" + + { + echo "### Rerun CI decision" + echo "" + echo "- Workflow: $WORKFLOW_NAME" + echo "- Source event: $EVENT_NAME" + echo "- Head branch: $HEAD_BRANCH" + echo "- Run ID: $RUN_ID" + echo "- Current attempt: $RUN_ATTEMPT" + echo "- Max automatic reruns: $MAX_RERUNS" + echo "- Delay seconds: $RETRY_DELAY_SECONDS" + echo "- Action: $action" + echo "- Reason: $reason" + } >> "$GITHUB_STEP_SUMMARY" + + rerun-failed-jobs: + needs: decide-rerun-action + if: needs.decide-rerun-action.outputs.action == 'rerun' + permissions: + actions: write + contents: read + runs-on: ubuntu-latest + steps: + - name: Wait before rerun + run: | + sleep "$RETRY_DELAY_SECONDS" + + - name: Rerun failed jobs + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + run: | + gh run rerun ${{ github.event.workflow_run.id }} --failed From d19e04261ddeca384bd66ee976573590f5e2be90 Mon Sep 17 00:00:00 2001 From: contrueCT Date: Sun, 26 Apr 2026 13:48:26 +0800 Subject: [PATCH 2/2] ci: fast-fail rerun workflow on non-failures --- .github/workflows/rerun-ci.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/rerun-ci.yml b/.github/workflows/rerun-ci.yml index f694aefb8..010d94ec3 100644 --- a/.github/workflows/rerun-ci.yml +++ b/.github/workflows/rerun-ci.yml @@ -20,6 +20,7 @@ env: jobs: decide-rerun-action: + if: ${{ github.event.workflow_run.conclusion == 'failure' }} runs-on: ubuntu-latest outputs: action: ${{ steps.decision.outputs.action }} @@ -30,19 +31,16 @@ jobs: WORKFLOW_NAME: ${{ github.event.workflow_run.name }} RUN_ID: ${{ github.event.workflow_run.id }} RUN_ATTEMPT: ${{ github.event.workflow_run.run_attempt }} - CONCLUSION: ${{ github.event.workflow_run.conclusion }} EVENT_NAME: ${{ github.event.workflow_run.event }} HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }} run: | set -euo pipefail action="skip" - reason="non-failure" + reason="unsupported event: $EVENT_NAME" - if [[ "$CONCLUSION" == "failure" ]]; then - if [[ "$EVENT_NAME" != "push" && "$EVENT_NAME" != "pull_request" ]]; then - reason="unsupported event: $EVENT_NAME" - elif (( RUN_ATTEMPT > MAX_RERUNS )); then + if [[ "$EVENT_NAME" == "push" || "$EVENT_NAME" == "pull_request" ]]; then + if (( RUN_ATTEMPT > MAX_RERUNS )); then reason="retry limit reached" else action="rerun"