From ab6ad85db7794cde21804d629d084f5093ee215c Mon Sep 17 00:00:00 2001 From: Oliver G Date: Mon, 16 Feb 2026 09:41:10 +0100 Subject: [PATCH] Tune roadmap reminders to 7-day window with updated title and labels --- .github/workflows/roadmap-reminder.yml | 5 ++-- docs/PROJECT_ROADMAP_BOARD.md | 6 +++-- scripts/roadmap_reminder_report.py | 33 +++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/.github/workflows/roadmap-reminder.yml b/.github/workflows/roadmap-reminder.yml index bc04302..58ef80a 100644 --- a/.github/workflows/roadmap-reminder.yml +++ b/.github/workflows/roadmap-reminder.yml @@ -24,5 +24,6 @@ jobs: --repo OliverGiertz/StaySense \ --project-owner OliverGiertz \ --project-number 4 \ - --days-upcoming 14 \ - --upsert-issue-title "[Roadmap] Weekly Health Report" + --days-upcoming 7 \ + --upsert-issue-title "[Roadmap] Weekly Deadlines (7 Tage)" \ + --labels "roadmap-report,roadmap,ops" diff --git a/docs/PROJECT_ROADMAP_BOARD.md b/docs/PROJECT_ROADMAP_BOARD.md index 7a16e36..13b3e71 100644 --- a/docs/PROJECT_ROADMAP_BOARD.md +++ b/docs/PROJECT_ROADMAP_BOARD.md @@ -61,7 +61,7 @@ python3 scripts/roadmap_reminder_report.py \ --repo OliverGiertz/StaySense \ --project-owner OliverGiertz \ --project-number 4 \ - --days-upcoming 14 \ + --days-upcoming 7 \ --dry-run ``` @@ -72,7 +72,9 @@ python3 scripts/roadmap_reminder_report.py \ --repo OliverGiertz/StaySense \ --project-owner OliverGiertz \ --project-number 4 \ - --days-upcoming 14 + --days-upcoming 7 \ + --upsert-issue-title "[Roadmap] Weekly Deadlines (7 Tage)" \ + --labels "roadmap-report,roadmap,ops" ``` GitHub Actions Secret: diff --git a/scripts/roadmap_reminder_report.py b/scripts/roadmap_reminder_report.py index 2c03320..9608f2d 100644 --- a/scripts/roadmap_reminder_report.py +++ b/scripts/roadmap_reminder_report.py @@ -57,6 +57,8 @@ def fetch_open_roadmap_issues(repo: str) -> list[dict]: labels = [it.get("name", "") for it in item.get("labels", [])] if "roadmap" not in labels: continue + if "roadmap-report" in labels: + continue out.append(item) return out @@ -223,6 +225,26 @@ def upsert_issue(repo: str, title: str, body_file: Path, labels: list[str]) -> s expect_json=True, ) existing = next((item for item in payload if item.get("title") == title), None) + if not existing and labels: + fallback = run( + [ + "gh", + "issue", + "list", + "--repo", + repo, + "--state", + "open", + "--label", + labels[0], + "--json", + "number,title,url", + "--limit", + "20", + ], + expect_json=True, + ) + existing = next((item for item in fallback if str(item.get("title", "")).startswith("[Roadmap] Weekly")), None) if existing: run( [ @@ -232,10 +254,14 @@ def upsert_issue(repo: str, title: str, body_file: Path, labels: list[str]) -> s str(existing["number"]), "--repo", repo, + "--title", + title, "--body-file", str(body_file), ] ) + for label in labels: + run(["gh", "issue", "edit", str(existing["number"]), "--repo", repo, "--add-label", label]) return existing["url"] cmd = [ @@ -260,8 +286,9 @@ def main() -> int: parser.add_argument("--repo", required=True, help="OWNER/REPO") parser.add_argument("--project-owner", default="", help="Project owner login, e.g. @me or OliverGiertz") parser.add_argument("--project-number", type=int, default=0, help="Project number") - parser.add_argument("--days-upcoming", type=int, default=14) - parser.add_argument("--upsert-issue-title", default="[Roadmap] Weekly Health Report") + parser.add_argument("--days-upcoming", type=int, default=7) + parser.add_argument("--upsert-issue-title", default="[Roadmap] Weekly Deadlines (7 Tage)") + parser.add_argument("--labels", default="roadmap-report,roadmap,ops", help="Comma-separated labels for report issue") parser.add_argument("--output-file", type=Path, default=Path("roadmap-health-report.md")) parser.add_argument("--dry-run", action="store_true") args = parser.parse_args() @@ -280,7 +307,7 @@ def main() -> int: print(report) return 0 - labels = ["roadmap-report", "roadmap"] + labels = [it.strip() for it in args.labels.split(",") if it.strip()] for label in labels: ensure_label(args.repo, label) issue_url = upsert_issue(args.repo, args.upsert_issue_title, args.output_file, labels)