Some checks failed
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 4m53s
Block internal-flavored paths / Block forbidden paths (push) Successful in 12s
Harness Replays / detect-changes (push) Successful in 11s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 10s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (push) Successful in 10s
Harness Replays / Harness Replays (push) Successful in 4s
CI / Detect changes (push) Successful in 29s
E2E API Smoke Test / detect-changes (push) Successful in 27s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 28s
Handlers Postgres Integration / detect-changes (push) Successful in 27s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 22s
CI / Shellcheck (E2E scripts) (push) Successful in 4s
CI / Platform (Go) (push) Successful in 5s
CI / Canvas (Next.js) (push) Successful in 5s
CI / Python Lint & Test (push) Successful in 5s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 5s
CI / Canvas Deploy Reminder (push) Has been skipped
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 3s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 4s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Successful in 5s
Co-authored-by: Molecule AI Core-DevOps <core-devops@agents.moleculesai.app> Co-committed-by: Molecule AI Core-DevOps <core-devops@agents.moleculesai.app>
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Extract changed-file list from a Gitea push event's commits JSON array.
|
|
|
|
Each commit in a push event has `added`, `removed`, and `modified` file lists.
|
|
This script aggregates all of them and prints unique filenames one per line.
|
|
|
|
Usage:
|
|
push-commits-diff-files.py < COMMITS_JSON
|
|
|
|
Exits 0 always (caller handles empty output as "no files").
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import json
|
|
|
|
|
|
def main() -> None:
|
|
try:
|
|
data = json.load(sys.stdin)
|
|
except Exception:
|
|
sys.exit(0) # Don't fail the step — treat malformed JSON as empty
|
|
|
|
if not isinstance(data, list):
|
|
sys.exit(0)
|
|
|
|
files: set[str] = set()
|
|
for commit in data:
|
|
if not isinstance(commit, dict):
|
|
continue
|
|
for key in ("added", "removed", "modified"):
|
|
for f in commit.get(key) or []:
|
|
if isinstance(f, str) and f:
|
|
files.add(f)
|
|
|
|
if files:
|
|
sys.stdout.write("\n".join(sorted(files)))
|
|
sys.stdout.write("\n")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|