Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 47 additions & 8 deletions .github/workflows/formers_bot_analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ on:
- "Fleet Model Test"
- "Codestyle Check"
- "CI_XPU"
- "Model Unittest GPU CE Develop"
- "Unittest GPU CE"
types:
- completed

Expand All @@ -23,23 +25,28 @@ jobs:
actions: read
outputs:
skip: ${{ steps.check.outputs.skip }}
is_schedule: ${{ steps.check.outputs.is_schedule }}
pr_number: ${{ steps.check.outputs.pr_number }}
failed_job_urls: ${{ steps.check.outputs.failed_job_urls }}
failed_run_ids: ${{ steps.check.outputs.failed_run_ids }}
steps:
- name: Check all workflows done and collect failed job URLs
id: check
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
TRIGGER_EVENT: ${{ github.event.workflow_run.event }}
TRIGGERING_RUN_ID: ${{ github.event.workflow_run.id }}
run: |
python3 - <<'PYEOF'
import json, os, urllib.request, sys, time

token = os.environ['GITHUB_TOKEN']
repo = os.environ['REPO']
head_sha = os.environ['HEAD_SHA']
token = os.environ['GITHUB_TOKEN']
repo = os.environ['REPO']
head_sha = os.environ['HEAD_SHA']
trigger_event = os.environ.get('TRIGGER_EVENT', '')
triggering_run_id = os.environ.get('TRIGGERING_RUN_ID', '')

watched = {
"Unittest GPU CI", "Model Unittest GPU CI",
Expand Down Expand Up @@ -75,6 +82,35 @@ jobs:
# GitHub workflow_run completed 后状态同步有延迟
time.sleep(20)

# ── 定时触发路径:直接检查触发本次的 run,不依赖 PR ──────────────
if trigger_event == 'schedule':
print(f"Schedule trigger detected, run_id={triggering_run_id}")
run_data = gh_get(
f"https://api.github.com/repos/{repo}/actions/runs/{triggering_run_id}"
)
conclusion = run_data.get('conclusion', '')
if conclusion != 'failure':
skip(f"Schedule run {triggering_run_id} did not fail (conclusion: {conclusion})")
jobs_data = gh_get(
f"https://api.github.com/repos/{repo}/actions/runs"
f"/{triggering_run_id}/jobs?per_page=100"
)
failed_job_urls = [
j['html_url'] for j in jobs_data.get('jobs', [])
if j['conclusion'] == 'failure'
and not any(kw in j['name'].lower() for kw in skip_keywords)
]
failed_job_urls = list(dict.fromkeys(failed_job_urls))
print(f"Schedule failed_job_urls: {failed_job_urls}")
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
f.write("skip=false\n")
f.write("is_schedule=true\n")
f.write("pr_number=\n")
f.write(f"failed_job_urls={' '.join(failed_job_urls)}\n")
f.write(f"failed_run_ids={triggering_run_id}\n")
sys.exit(0)

# ── PR 触发路径:原有逻辑 ─────────────────────────────────────────
# 1. find PR
pr_number = None
for state in ['open', 'closed']:
Expand Down Expand Up @@ -161,7 +197,6 @@ jobs:

failed_job_urls.append(job['html_url'])

# 去重
failed_job_urls = list(dict.fromkeys(failed_job_urls))

# 失败 workflow 的 run_id 列表(用于按 run_id 上报到 monitor,
Expand All @@ -173,6 +208,7 @@ jobs:

with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
f.write("skip=false\n")
f.write("is_schedule=false\n")
f.write(f"pr_number={pr_number}\n")
f.write(f"failed_job_urls={' '.join(failed_job_urls)}\n")
f.write(f"failed_run_ids={' '.join(failed_run_ids)}\n")
Expand Down Expand Up @@ -228,7 +264,10 @@ jobs:

post-comment:
needs: [check-and-collect, analyze]
if: always() && needs.check-and-collect.outputs.skip == 'false'
if: >-
always() &&
needs.check-and-collect.outputs.skip == 'false' &&
needs.check-and-collect.outputs.is_schedule == 'false'
runs-on: ubuntu-latest
permissions:
actions: read
Expand Down
Loading