Skip to content
Open
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
63 changes: 46 additions & 17 deletions .github/workflows/update-viablestrict.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ jobs:
echo "viable/strict branch was not updated because no commit passed all required checks." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# Pattern matching required workflows (must match 'requires' input above)
# Uses exact matching with anchors and case-insensitive matching
REQUIRED_PATTERN="^pull$|^lint$|^trunk$|^Build documentation$|^Apple$"

echo "### Failures by commit (recent)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

Expand All @@ -56,8 +60,8 @@ jobs:
--jq '.commits | reverse | .[:20] | .[] | "\(.sha)\u001f\(.commit.message | split("\n")[0] | .[:50])"' 2>/dev/null || echo "")

if [ -n "$COMMITS" ]; then
echo "| Commit | Title | Failed Job |" >> $GITHUB_STEP_SUMMARY
echo "|--------|-------|------------|" >> $GITHUB_STEP_SUMMARY
echo "| Commit | Title | Failed Job (up to 5 jobs) |" >> $GITHUB_STEP_SUMMARY
echo "|--------|-------|---------------------------|" >> $GITHUB_STEP_SUMMARY

while IFS=$'\x1f' read -r sha title; do
[ -z "$sha" ] && continue
Expand All @@ -66,19 +70,42 @@ jobs:
title=$(echo "$title" | tr '|' '-')

# Get workflow runs for this commit (use unit separator)
failed_run=$(gh api "repos/pytorch/executorch/actions/runs?head_sha=${sha}&per_page=100" \
--jq '.workflow_runs[] | select(.conclusion == "failure") | "\(.id)\u001f\(.name)"' 2>/dev/null | head -1)

if [ -n "$failed_run" ]; then
IFS=$'\x1f' read -r run_id workflow_name <<< "$failed_run"
# Sanitize workflow name for markdown table
workflow_name=$(echo "$workflow_name" | tr '|' '-')

# Get failed job name
failed_job=$(gh api "repos/pytorch/executorch/actions/runs/${run_id}/jobs?per_page=100" \
--jq '.jobs[] | select(.conclusion == "failure") | .name' 2>/dev/null | head -1 | tr '|' '-')

echo "| ${short_sha} | ${title} | ${workflow_name} / ${failed_job:-unknown} |" >> $GITHUB_STEP_SUMMARY
# Only include workflows that match the requires patterns (case-insensitive)
# Show up to 5 failed workflows per commit
failed_runs=$(gh api "repos/pytorch/executorch/actions/runs?head_sha=${sha}&per_page=100" \
--jq ".workflow_runs[] | select(.conclusion == \"failure\" and (.name | test(\"${REQUIRED_PATTERN}\"; \"i\"))) | \"\(.id)\u001f\(.name)\"" 2>/dev/null | head -5)

if [ -n "$failed_runs" ]; then
# Collect all failed jobs for this commit
all_failed_jobs=""
while IFS=$'\x1f' read -r run_id workflow_name; do
[ -z "$run_id" ] && continue
workflow_name=$(echo "$workflow_name" | tr '|' '-')

# Get failed job names (up to 5 per workflow)
failed_jobs=$(gh api "repos/pytorch/executorch/actions/runs/${run_id}/jobs?per_page=100" \
--jq '.jobs[] | select(.conclusion == "failure") | .name' 2>/dev/null | head -5)

if [ -n "$failed_jobs" ]; then
while read -r failed_job; do
[ -z "$failed_job" ] && continue
failed_job=$(echo "$failed_job" | tr '|' '-')
if [ -n "$all_failed_jobs" ]; then
all_failed_jobs="${all_failed_jobs}<br>${workflow_name} / ${failed_job}"
else
all_failed_jobs="${workflow_name} / ${failed_job}"
fi
done <<< "$failed_jobs"
else
if [ -n "$all_failed_jobs" ]; then
all_failed_jobs="${all_failed_jobs}<br>${workflow_name} / unknown"
else
all_failed_jobs="${workflow_name} / unknown"
fi
fi
done <<< "$failed_runs"

echo "| ${short_sha} | ${title} | ${all_failed_jobs} |" >> $GITHUB_STEP_SUMMARY
found_failures=true
fi
done <<< "$COMMITS"
Expand All @@ -93,8 +120,9 @@ jobs:
echo "|--------|-------|------------|" >> $GITHUB_STEP_SUMMARY

# Filter by branch=main and use unit separator
# Only include workflows that match the requires patterns (case-insensitive)
gh api "repos/pytorch/executorch/actions/runs?branch=main&per_page=20" \
--jq '.workflow_runs[] | select(.conclusion == "failure") | "\(.id)\u001f\(.head_sha | .[:7])\u001f\(.display_title | .[:50])\u001f\(.name)"' 2>/dev/null | \
--jq ".workflow_runs[] | select(.conclusion == \"failure\" and (.name | test(\"${REQUIRED_PATTERN}\"; \"i\"))) | \"\(.id)\u001f\(.head_sha | .[:7])\u001f\(.display_title | .[:50])\u001f\(.name)\"" 2>/dev/null | \
while IFS=$'\x1f' read -r run_id sha title workflow; do
# Sanitize for markdown table
title=$(echo "$title" | tr '|' '-')
Expand All @@ -111,9 +139,10 @@ jobs:
echo "### Summary by job (main branch, last 24h)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Filter by main branch and created in last 24 hours (GNU date syntax for Ubuntu runner)
# Only include workflows that match the requires patterns (case-insensitive)
yesterday=$(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%SZ')
gh api "repos/pytorch/executorch/actions/runs?branch=main&created=>${yesterday}&per_page=100" \
--jq '.workflow_runs[] | select(.conclusion == "failure") | .name' 2>/dev/null \
--jq ".workflow_runs[] | select(.conclusion == \"failure\" and (.name | test(\"${REQUIRED_PATTERN}\"; \"i\"))) | .name" 2>/dev/null \
| sort | uniq -c | sort -rn | head -10 >> $GITHUB_STEP_SUMMARY || echo "Failed to fetch data" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

Expand Down
Loading