Skip to content
Merged
Show file tree
Hide file tree
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
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,10 @@ the language, and so do warnings and errors from `collect`; texts from GitLab an
Jira's own error details, stay as written.

**Services** lists every service with a production deployment or with rows, 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
with the ones allowed to fail counted apart, a mark when the range was cut at `RELEASE_SCOPE_MAX_COMMITS`, and how
many rows have no tag yet.
as one line: what production runs, the picked tag, how many merge requests or commits and Jira tasks it ships, the
failed jobs of the picked tag, or of the newest tag before a pick, with the ones allowed to fail counted apart, a mark
when the range was cut at `RELEASE_SCOPE_MAX_COMMITS`, and how many rows have no tag yet. The failed jobs are those of
the tag's pipeline and of the main pipeline of its commit; failures in other rows show only when the line is opened.
Opening a line shows the service's environments, warnings, a link to create the next tag on the head when rows have no
tag yet, 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
Expand Down
8 changes: 6 additions & 2 deletions release_scope/_static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -723,14 +723,18 @@ <h3 x-text="t('releasePost')"></h3>
return pipeline ? ICONS[pipeline.status] || pipeline.status : "⚠️";
},
failureCounts(service) {
const pipelines = service.rows.flatMap((row) => [row.main_pipeline, ...row.tags.map((tag) => tag.pipeline)]);
const candidate = this.pickOf(service) || service.candidates[0];
if (!candidate) return "";
const row = service.rows.find((item) => item.tags.some((tag) => tag.name === candidate.tag.name));
const pipelines = [row && row.main_pipeline, candidate.tag.pipeline];
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 [
const counts = [
blocking ? this.t("failedCount", { count: blocking }) : "",
allowed ? this.t("allowedCount", { count: allowed }) : "",
].filter(Boolean).join(" · ");
return counts && !this.pickOf(service) ? `${candidate.tag.name}: ${counts}` : counts;
},
failedJobs(row) {
const lines = [];
Expand Down
Loading