这是indexloc提供的服务,不要输入任何密码
Skip to content

GitHub: deduplicate status checks which have been re-run #36837

@rarkins

Description

@rarkins

Discussed in #36323

Originally posted by UncleSamSwiss June 5, 2025

How are you running Renovate?

A Mend.io-hosted app

If you're self-hosting Renovate, tell us which platform (GitHub, GitLab, etc) and which version of Renovate.

GitHub 40.40.3

Please tell us more about your question or problem

When a GitHub actions workflow is re-run because the previous run had an error, automerge doesn't work anymore.

Reason for this seems to be here:

const checkRunsRaw = (
await githubApi.getJsonUnchecked<{
check_runs: { name: string; status: string; conclusion: string }[];
}>(checkRunsUrl, opts)
).body;
if (checkRunsRaw.check_runs?.length) {
checkRuns = checkRunsRaw.check_runs.map((run) => ({
name: run.name,
status: run.status,
conclusion: run.conclusion,
}));
logger.debug({ checkRuns }, 'check runs result');
} /* v8 ignore start */ else {

The code gets all check runs from GitHub, this includes previous runs that were re-run. Those old runs should be filtered out. The easiest strategy would be to skip older runs with the same name as the most recent run (see example in the logs below).

The job ensure-ci-success failed once and then we re-ran all failing jobs in that workflow; the second time (the first entry in the "checkRuns" structure) it was successful.

The end result is "Branch status red" which is wrong. If we look at the PR, it is all "green" and we can merge manually without any warnings:
image

Reproduction

  1. Create a pipeline that fails the first time but doesn't on the second run and let it run on the renovate/... branches
  2. When the PR is created and the run fails, click on "re-run failed jobs":
    image
  3. After the second run is successful, the PR should show all green, but automerge by renovate will fail

Logs (if relevant)

Partial logs of job 01973d75-f03d-75c1-bcd7-1350772d5259
INFO: Repository started
{
  "renovateVersion": "40.40.3"
}

...


DEBUG: http cache: saving https://api.github.com/repos/owner/repo/commits/renovate/vitejs-plugin-react-4.x-lockfile/check-runs?per_page=100 (etag=W/"fa99f4876f1401942b638af08a587854859cd548c81f427a1342c0d452d52b75", lastModified=undefined) (branch="renovate/vitejs-plugin-react-4.x-lockfile")
DEBUG: GitHub-native automerge: not enabled in repo settings (branch="renovate/vitejs-plugin-react-4.x-lockfile")
{
  "prNumber": 2100
}

...

DEBUG: check runs result (branch="renovate/vitejs-plugin-react-4.x-lockfile")
{
  "checkRuns": [
    {
      "name": "ensure-ci-success",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Delete e2e Renovate Terraform State",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Destroy e2e Renovate Instances / Destroy App (dev) / Terraform App (renovate2100)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Update Infrastructure Docs (dev)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate multi (safari)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform App (dev) / Terraform App (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Update Infrastructure Docs (PR)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate multi (firefox)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Renovate / Update PR (renovate frontend multi)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Cluster",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate single (safari)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate multi (chrome)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate single (firefox)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Renovate / e2e frontend renovate single (chrome)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / e2e Renovate / Update PR (renovate frontend single)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform Services (dev) / Terraform Services (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e cluster)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Update Pull Request (Instance)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Instances",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e renovate) / Terraform App (renovate2100)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e instances)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (PR Instance)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform PR Cluster",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform Infra (dev) / Terraform Infra (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Importer Image / Build & Push importer",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Devices Server Image / Build & Push devices",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Instance Setup Image / Build & Push instance-setup",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Factory UI Image / Build & Push factory-ui",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Load PR Config / Load PR Config",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Frontend Image / Build & Push frontend",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / MongoDB Setup Image / Build & Push setup-backend",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Richemont Plugin Image / Build & Push richemont-plugin",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform k8s (dev) / Terraform Infra (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Load Renovate e2e Config",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Keycloak Image / Build & Push keycloak",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Build nx Project",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Update Infrastructure Docs (dev)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (dev)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "ensure-ci-success",
      "status": "completed",
      "conclusion": "failure"
    },
    {
      "name": "Build & Deploy / Terraform Services (dev) / Terraform Services (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "importer Unit Test Results",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "devices Unit Test Results",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform Infra (dev) / Terraform Infra (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "backend-data Unit Test Results",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "frontend Unit Test Results",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Delete e2e Renovate Terraform State",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Cluster",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Destroy e2e Renovate Instances",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Update Pull Request (Instance)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Update Infrastructure Docs (PR)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Renovate",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e cluster)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / e2e Instances",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform PR Cluster",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (PR Instance)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e renovate)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Terraform App (e2e instances)",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Importer Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Global Device Registry Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Load PR Config",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Factory UI Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Frontend Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Instance Setup Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / Devices Server Image",
      "status": "completed",
      "conclusion": "skipped"
    },
    {
      "name": "Build & Deploy / MongoDB Setup Image / Build & Push setup-backend",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Build nx Project",
      "status": "completed",
      "conclusion": "cancelled"
    },
    {
      "name": "Build & Deploy / Richemont Plugin Image / Build & Push richemont-plugin",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Terraform k8s (dev) / Terraform Infra (dev)",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Keycloak Image / Build & Push keycloak",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Build & Deploy / Load Renovate e2e Config",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Unit Tests frontend",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Unit Tests devices",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Unit Tests backend-data",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Unit Tests importer",
      "status": "completed",
      "conclusion": "success"
    },
    {
      "name": "Validate Demo Data",
      "status": "completed",
      "conclusion": "success"
    }
  ]
}

DEBUG: Branch status red (branch="renovate/vitejs-plugin-react-4.x-lockfile")

Metadata

Metadata

Assignees

No one assigned

    Labels

    core:automergeRelating to Renovate's automerge capabilitiesplatform:githubGitHub Platformpriority-3-mediumDefault priority, "should be done" but isn't prioritised ahead of others

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions