This is an automated email from the ASF dual-hosted git repository.

imbajin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hugegraph-toolchain.git


The following commit(s) were added to refs/heads/master by this push:
     new 993f92ea ci: add rerun workflow for module CI failures (#730)
993f92ea is described below

commit 993f92ea452b8e59fe3954f15a5ab087032ddea8
Author: contrueCT <[email protected]>
AuthorDate: Fri May 8 15:56:16 2026 +0800

    ci: add rerun workflow for module CI failures (#730)
---
 .github/workflows/rerun-ci.yml | 138 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 138 insertions(+)

diff --git a/.github/workflows/rerun-ci.yml b/.github/workflows/rerun-ci.yml
new file mode 100644
index 00000000..5b320222
--- /dev/null
+++ b/.github/workflows/rerun-ci.yml
@@ -0,0 +1,138 @@
+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:
+    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
+    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 }}
+          EVENT_NAME: ${{ github.event.workflow_run.event }}
+          HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
+        run: |
+          set -euo pipefail
+
+          action="skip"
+          reason="unsupported event: $EVENT_NAME"
+
+          if [[ "$EVENT_NAME" == "push" || "$EVENT_NAME" == "pull_request" ]]; 
then
+            if (( 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: Check source branch freshness
+        id: freshness
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          HEAD_REPOSITORY: ${{ 
github.event.workflow_run.head_repository.full_name }}
+          HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
+          HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
+          WORKFLOW_NAME: ${{ github.event.workflow_run.name }}
+          RUN_ID: ${{ github.event.workflow_run.id }}
+        run: |
+          set -euo pipefail
+
+          action="rerun"
+          latest_head_sha="$HEAD_SHA"
+          reason="head unchanged"
+
+          if [[ -z "$HEAD_REPOSITORY" || -z "$HEAD_BRANCH" || -z "$HEAD_SHA" 
]]; then
+            action="skip"
+            reason="missing head repository metadata"
+          else
+            latest_head_sha="$(gh api "repos/$HEAD_REPOSITORY/commits" -f 
sha="$HEAD_BRANCH" -F per_page=1 --jq '.[0].sha' 2>/dev/null || true)"
+
+            if [[ -z "$latest_head_sha" || "$latest_head_sha" == "null" ]]; 
then
+              action="skip"
+              reason="head branch no longer available"
+            elif [[ "$latest_head_sha" != "$HEAD_SHA" ]]; then
+              action="skip"
+              reason="head moved to $latest_head_sha"
+            fi
+          fi
+
+          {
+            echo "action=$action"
+            echo "latest_head_sha=$latest_head_sha"
+            echo "reason=$reason"
+          } >> "$GITHUB_OUTPUT"
+
+          {
+            echo "### Rerun CI freshness check"
+            echo ""
+            echo "- Workflow: $WORKFLOW_NAME"
+            echo "- Run ID: $RUN_ID"
+            echo "- Head repository: $HEAD_REPOSITORY"
+            echo "- Head branch: $HEAD_BRANCH"
+            echo "- Failed run head SHA: $HEAD_SHA"
+            echo "- Current branch tip SHA: $latest_head_sha"
+            echo "- Action: $action"
+            echo "- Reason: $reason"
+          } >> "$GITHUB_STEP_SUMMARY"
+
+      - name: Rerun failed jobs
+        if: steps.freshness.outputs.action == 'rerun'
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          GH_REPO: ${{ github.repository }}
+        run: |
+          gh run rerun ${{ github.event.workflow_run.id }} --failed

Reply via email to