fix(harness-replays): use branch names in Compare API + correct nested file extraction
All checks were successful
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 12s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
sop-tier-check / tier-check (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 36s
CI / Detect changes (pull_request) Successful in 37s
E2E API Smoke Test / detect-changes (pull_request) Successful in 41s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 40s
CI / Platform (Go) (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 43s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 12s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
CI / Canvas (Next.js) (pull_request) Successful in 13s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 10s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 8s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
All checks were successful
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 12s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
sop-tier-check / tier-check (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 36s
CI / Detect changes (pull_request) Successful in 37s
E2E API Smoke Test / detect-changes (pull_request) Successful in 41s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 40s
CI / Platform (Go) (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 43s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 12s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
CI / Canvas (Next.js) (pull_request) Successful in 13s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 10s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 8s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Bug 1 (SRE review): Gitea Compare API rejects SHA pairs (BaseNotExist).
Fix: use base.ref/head.ref (branch names) instead of base.sha/head.sha.
For push events: extract branch name from GITHUB_REF.
Bug 2 (SRE review): Python extraction looked at d.get('files', [])
which is always empty — Gitea nests files inside commits[*]['files'].
Fix: extract from nested commits structure via list comprehension.
SRE verified the fix works:
GET /compare/main...fix/harness-replays-detect-changes-gitea-api
→ commits[0]['files']: ['.gitea/workflows/harness-replays.yml'] ✓
Co-Authored-By: SRE review via infra-sre agent
This commit is contained in:
parent
120d5328ba
commit
751c98ced7
@ -84,16 +84,21 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine base and head SHAs for the Compare API call.
|
# Determine base and head refs for the Compare API call.
|
||||||
# Pull request: base.sha + head sha are in the event payload.
|
# Gitea Compare API requires branch/tag names (SHAs return BaseNotExist).
|
||||||
# Push: github.event.before + github.sha.
|
# Pull request: base.ref + head.ref are in the event payload.
|
||||||
|
# Push: github.ref → extract branch name for the Compare API.
|
||||||
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
||||||
BASE="${{ github.event.pull_request.base.sha }}"
|
BASE="${{ github.event.pull_request.base.ref }}"
|
||||||
HEAD="${{ github.event.pull_request.head.sha }}"
|
HEAD="${{ github.event.pull_request.head.ref }}"
|
||||||
elif [ -n "${{ github.event.before }}" ] && \
|
elif [ -n "${{ github.event.before }}" ] && \
|
||||||
! echo "${{ github.event.before }}" | grep -qE '^0+$'; then
|
! echo "${{ github.event.before }}" | grep -qE '^0+$'; then
|
||||||
BASE="${{ github.event.before }}"
|
# Extract branch name from refs/heads/main -> main
|
||||||
HEAD="${{ github.sha }}"
|
BASE_REF="${GITHUB_REF#refs/heads/}"
|
||||||
|
BASE_REF="${BASE_REF:-main}"
|
||||||
|
HEAD_REF="${GITHUB_REF#refs/heads/}"
|
||||||
|
BASE="$BASE_REF"
|
||||||
|
HEAD="$HEAD_REF"
|
||||||
else
|
else
|
||||||
# New branch or github.event.before unavailable — run everything.
|
# New branch or github.event.before unavailable — run everything.
|
||||||
echo "run=true" >> "$GITHUB_OUTPUT"
|
echo "run=true" >> "$GITHUB_OUTPUT"
|
||||||
@ -108,20 +113,17 @@ jobs:
|
|||||||
# (runbooks/gitea-operational-quirks.md §runner-network-isolation).
|
# (runbooks/gitea-operational-quirks.md §runner-network-isolation).
|
||||||
#
|
#
|
||||||
# API shape: GET /repos/{owner}/{repo}/compare/{base}...{head}
|
# API shape: GET /repos/{owner}/{repo}/compare/{base}...{head}
|
||||||
# Returns { files: [{filename}] } with all changed files.
|
# Returns { commits: [{ files: [{filename}] }] } — files are
|
||||||
|
# nested inside commits (Gitea quirk, not at top level).
|
||||||
RESP=$(curl -sS --fail --max-time 30 \
|
RESP=$(curl -sS --fail --max-time 30 \
|
||||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||||
-H "Accept: application/json" \
|
-H "Accept: application/json" \
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/compare/$BASE...$HEAD")
|
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/compare/$BASE...$HEAD")
|
||||||
DIFF_FILES=$(echo "$RESP" | python3 -c "
|
DIFF_FILES=$(echo "$RESP" | python3 -c "
|
||||||
import sys, json
|
import sys; import json
|
||||||
try:
|
d = json.load(sys.stdin)
|
||||||
d = json.load(sys.stdin)
|
files = [f.get('filename','') for c in d.get('commits',[]) for f in c.get('files',[]) if f.get('filename')]
|
||||||
files = d.get('files', [])
|
print('\n'.join(files))
|
||||||
print('\n'.join(f['filename'] for f in files if 'filename' in f))
|
|
||||||
except Exception:
|
|
||||||
# Malformed response — run everything as safe fallback
|
|
||||||
print('')
|
|
||||||
" 2>/dev/null || true)
|
" 2>/dev/null || true)
|
||||||
|
|
||||||
echo "debug=diff-base=$BASE diff-files=$DIFF_FILES" >> "$GITHUB_OUTPUT"
|
echo "debug=diff-base=$BASE diff-files=$DIFF_FILES" >> "$GITHUB_OUTPUT"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user