Implement minimal job confirmation API in Runner Core

As per Joe's comment here: gitlab#464048 (comment 2717231778)

This will be the minimal implementation of the job confirmation API in Runner Core.

The new workflow will immediately send a status update to the GitLab API if the API sents the features.JobStatus feature. This will indicate to Runner that it should provide status updates.

Approach 1

This is closer the original proposal at Capstone issue: Introduce new API for Runner to... (gitlab#464048) • Unassigned • Backlog • At risk but is not strictly required for this stage. We could simplify both the Runner and Backend work a bit if we decide to go with Approach 2 by not introducing a new endpoint now. Instead, the API will just need to make sure not to automatically transition jobs into a Running state once they are sent to the Runner (along other side duties such as cleaning up after timeout etc).

Endpoint name TBD but not really important

sequenceDiagram
    participant G as GitLab
    participant R as Runner


    R->>G: GET /jobs/request
    Note over R,G: New workflow on top of the current bare job acceptance
    G-->>R: 201 Created (with features.JobStatus)

    R->>G: POST /jobs/{:job_id}/runner_status {status=running}

Changes should be contained to:

  • GitlabClient.RequestJob: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/network/gitlab.go#L652
  • Extending the interface of network.go/Network: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/common/network.go#L1204
  • network.go/GitlabFeatures: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/common/network.go#L707

Approach 2

Alternatively we could leverage the UpdateJob method that we already have which sends a PUT /jobs/{:job_id}. We just need to test how this endpoint behaves when only the state is being updated.

I suspect this will work:

sequenceDiagram
    participant G as GitLab
    participant R as Runner


    R->>G: GET /jobs/request
    Note over R,G: New workflow on top of the current bare job acceptance
    G-->>R: 201 Created (with features.JobStatus)

    R->>G: PUT /jobs/{:job_id} {state=running}

Changes should be contained to:

  • GitlabClient.RequestJob: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/network/gitlab.go#L652
  • network.go/GitlabFeatures: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/common/network.go#L707
Edited Sep 03, 2025 by Georgi N. Georgiev | GitLab
Assignee Loading
Time tracking Loading