Commit 5fdd92df authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Merge branch 'feature/builds-register-change-404-to-204' into 'master'

Change response for /ci/api/v1/builds/register.json from 404 to 204

## What does this MR do?

To check if there are new builds scheduled for a runner, runner is sending `POST /ci/api/v1/builds/register.json` requests. If there is a build then a `200` response with build data is returned. However if there is no builds scheduled for this runner it receives a `404 Not Found` response. This may end with a lot of `404 Not Found` lines in logs that are an expected behavior (please read #14445 for a reference).

Since `v1.0.1` version GitLab Runner is ready to receive a `204 No Content` response in case of no builds.

This MR adds a support for this status code for each Runner's version that can be determined while handling `POST /ci/api/v1/builds/register.json` request.

## Are there points in the code the reviewer needs to double check?

Specs in `spec/requests/ci/api/builds_spec.rb`

## Does this MR meet the acceptance criteria?

- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [x] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)
- [ ] ~~API support added~~
- Tests
  - [x] Added for this feature/bug
  - [x] All builds are passing
- [ ] ~~Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html)~~
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

## What are the relevant issue numbers?

Fixes #14445

See merge request !6225
parents 82b8cc5d e940d97d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ v 8.12.0 (unreleased)
  - Add notification_settings API calls !5632 (mahcsig)
  - Remove duplication between project builds and admin builds view !5680 (Katarzyna Kobierska Ula Budziszewska)
  - Deleting source project with existing fork link will close all related merge requests !6177 (Katarzyna Kobierska Ula Budziszeska)
  - Return 204 instead of 404 for /ci/api/v1/builds/register.json if no builds are scheduled for a runner !6225

v 8.11.6 (unreleased)
  - Fix an error where we were unable to create a CommitStatus for running state
+9 −0
Original line number Diff line number Diff line
@@ -38,6 +38,15 @@ POST /ci/api/v1/builds/register
curl --request POST "https://gitlab.example.com/ci/api/v1/builds/register" --form "token=t0k3n"
```

**Responses:**

| Status | Data |Description                                                                |
|--------|------|---------------------------------------------------------------------------|
| `201`  | yes  | When a build is scheduled for a runner                                    |
| `204`  | no   | When no builds are scheduled for a runner (for GitLab Runner >= `v1.3.0`) |
| `403`  | no   | When invalid token is used or no token is sent                            |
| `404`  | no   | When no builds are scheduled for a runner (for GitLab Runner < `v1.3.0`) **or** when the runner is set to `paused` in GitLab runner's configuration page |

### Update details of an existing build

```
+4 −0
Original line number Diff line number Diff line
@@ -269,6 +269,10 @@ module API
      render_api_error!('304 Not Modified', 304)
    end

    def no_content!
      render_api_error!('204 No Content', 204)
    end

    def render_validation_error!(model)
      if model.errors.any?
        render_api_error!(model.errors.messages || '400 Bad Request', 400)
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ module Ci
          else
            Gitlab::Metrics.add_event(:build_not_found)

            not_found!
            build_not_found!
          end
        end

+8 −0
Original line number Diff line number Diff line
@@ -32,6 +32,14 @@ module Ci
        end
      end

      def build_not_found!
        if headers['User-Agent'].match(/gitlab-ci-multi-runner \d+\.\d+\.\d+(~beta\.\d+\.g[0-9a-f]+)? /)
          no_content!
        else
          not_found!
        end
      end

      def current_runner
        @runner ||= Runner.find_by_token(params[:token].to_s)
      end
Loading