From 82b3355e275eec02f37cad1988ac1b1a7d2c9b3b Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Fri, 9 Oct 2026 19:07:57 +0300 Subject: [PATCH] Open links in a new tab, show Jira status as a badge, spell out allowed failures --- README.md | 13 +++++++------ release_scope/_static/index.html | 26 ++++++++++++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 1cb19ab..7359d4e 100644 --- a/README.md +++ b/README.md @@ -108,10 +108,11 @@ installed package and change only with it, so the page always matches the report `report.json` from next to itself; it needs a web server, not a `file://` URL. **Services** lists every service with a production deployment, and every service that failed to collect, as one -line: what production runs, the picked tag, how many merge requests or commits and Jira tasks it ships, failed jobs, -and a mark when the range was cut at `RELEASE_SCOPE_MAX_COMMITS`. Opening a line shows the service's environments, -warnings, merge requests that are not merged yet, and its rows with tags and their pipelines, merge requests or -commits, Jira keys, environments, and failed jobs; rows out of scope are dimmed. Each tag has a **pick** button: +line: what production runs, the picked tag, how many merge requests or commits and Jira tasks it ships, failed jobs +with the ones allowed to fail counted apart, and a mark when the range was cut at `RELEASE_SCOPE_MAX_COMMITS`. +Opening a line shows the service's environments, warnings, merge requests that are not merged yet, and its rows with +tags and their pipelines, merge requests or commits, Jira keys with their status, environments, and failed jobs; rows +out of scope are dimmed. Links open in a new tab. Each tag has a **pick** button: picking it highlights the rows it ships and closes the line again. A `--jira` report starts with each service's release tag picked. Services without a production deployment are left out of the page. @@ -124,8 +125,8 @@ reload starts from the release tags again. text box to copy from by hand, since browsers allow the copy button only over HTTPS: - **Jira tasks**: the keys of every in-scope row from each picked tag down to production, without duplicates, with - summary and status, flagging issues that are not done. Copy them one per line or as a JQL `key in (...)` clause, - each in its own box. + summary and a status badge: grey to do, blue in progress, green done. Copy them one per line or as a JQL + `key in (...)` clause, each in its own box. - **Tag pipelines**: the pipeline of each picked tag, as a Markdown list. - **Compare**: a GitLab compare link per service from production to the picked tag, as a Markdown list. - **Release post**: one Markdown text with a line per picked tag, holding its compare link and pipeline, followed by diff --git a/release_scope/_static/index.html b/release_scope/_static/index.html index 5e9dbf7..7cfd044 100644 --- a/release_scope/_static/index.html +++ b/release_scope/_static/index.html @@ -4,18 +4,19 @@ Release scope + @@ -76,7 +81,8 @@

  • - + +
  • @@ -157,7 +163,8 @@

    Services

    @@ -167,7 +174,7 @@

    Services

    - (allowed) + (allowed to fail)
    @@ -201,8 +208,8 @@

    @@ -411,6 +418,9 @@

    Release post

    issue(key) { return this.report.jira ? this.report.jira.issues[key] : undefined; }, + statusClass(issue) { + return issue ? `status status-${issue.status_category || "new"}` : ""; + }, isMissing(key) { return Boolean(this.report.jira && this.report.jira.missing.includes(key)); }, @@ -439,7 +449,7 @@

    Release post

    const jobs = pipelines.filter(Boolean).flatMap((pipeline) => pipeline.failed_jobs); const allowed = jobs.filter((job) => job.allow_failure).length; const blocking = jobs.length - allowed; - return [blocking ? `❌ ${blocking}` : "", allowed ? `⚠️ ${allowed} allowed` : ""].filter(Boolean).join(" · "); + return [blocking ? `❌ ${blocking} failed` : "", allowed ? `${allowed} failed, allowed to fail` : ""].filter(Boolean).join(" · "); }, failedJobs(row) { const lines = [];