Add api endpoint for creating a pipeline
Add a new endpoint in the new API for creating a new pipeline, and return the details of that pipeline.
This commit is contained in:
parent
75c8faf7ba
commit
fbfc7523cb
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Add api endpoint for creating a pipeline
|
||||||
|
merge_request: 7209
|
||||||
|
author: Ido Leibovich
|
|
@ -114,6 +114,51 @@ Example of response
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Create a new pipeline
|
||||||
|
|
||||||
|
> [Introduced][ce-7209] in GitLab 8.14
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /projects/:id/pipeline
|
||||||
|
```
|
||||||
|
|
||||||
|
| Attribute | Type | Required | Description |
|
||||||
|
|------------|---------|----------|---------------------|
|
||||||
|
| `id` | integer | yes | The ID of a project |
|
||||||
|
| `ref` | string | yes | Reference to commit |
|
||||||
|
|
||||||
|
```
|
||||||
|
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/pipeline?ref=master"
|
||||||
|
```
|
||||||
|
|
||||||
|
Example of response
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": 61,
|
||||||
|
"sha": "384c444e840a515b23f21915ee5766b87068a70d",
|
||||||
|
"ref": "master",
|
||||||
|
"status": "pending",
|
||||||
|
"before_sha": "0000000000000000000000000000000000000000",
|
||||||
|
"tag": false,
|
||||||
|
"yaml_errors": null,
|
||||||
|
"user": {
|
||||||
|
"name": "Administrator",
|
||||||
|
"username": "root",
|
||||||
|
"id": 1,
|
||||||
|
"state": "active",
|
||||||
|
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
|
||||||
|
"web_url": "http://localhost:3000/root"
|
||||||
|
},
|
||||||
|
"created_at": "2016-11-04T09:36:13.747Z",
|
||||||
|
"updated_at": "2016-11-04T09:36:13.977Z",
|
||||||
|
"started_at": null,
|
||||||
|
"finished_at": null,
|
||||||
|
"committed_at": null,
|
||||||
|
"duration": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Retry failed builds in a pipeline
|
## Retry failed builds in a pipeline
|
||||||
|
|
||||||
> [Introduced][ce-5837] in GitLab 8.11
|
> [Introduced][ce-5837] in GitLab 8.11
|
||||||
|
@ -205,3 +250,4 @@ Response:
|
||||||
```
|
```
|
||||||
|
|
||||||
[ce-5837]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5837
|
[ce-5837]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5837
|
||||||
|
[ce-7209]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7209
|
||||||
|
|
|
@ -22,6 +22,27 @@ module API
|
||||||
pipelines = PipelinesFinder.new(user_project).execute(scope: params[:scope])
|
pipelines = PipelinesFinder.new(user_project).execute(scope: params[:scope])
|
||||||
present paginate(pipelines), with: Entities::Pipeline
|
present paginate(pipelines), with: Entities::Pipeline
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc 'Create a new pipeline' do
|
||||||
|
detail 'This feature was introduced in GitLab 8.14'
|
||||||
|
success Entities::Pipeline
|
||||||
|
end
|
||||||
|
params do
|
||||||
|
requires :ref, type: String, desc: 'Reference'
|
||||||
|
end
|
||||||
|
post ':id/pipeline' do
|
||||||
|
authorize! :create_pipeline, user_project
|
||||||
|
|
||||||
|
new_pipeline = Ci::CreatePipelineService.new(user_project,
|
||||||
|
current_user,
|
||||||
|
declared_params(include_missing: false))
|
||||||
|
.execute(ignore_skip_ci: true, save_on_errors: false)
|
||||||
|
if new_pipeline.persisted?
|
||||||
|
present new_pipeline, with: Entities::Pipeline
|
||||||
|
else
|
||||||
|
render_validation_error!(new_pipeline)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
desc 'Gets a specific pipeline for the project' do
|
desc 'Gets a specific pipeline for the project' do
|
||||||
detail 'This feature was introduced in GitLab 8.11'
|
detail 'This feature was introduced in GitLab 8.11'
|
||||||
|
|
|
@ -41,6 +41,52 @@ describe API::API, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'POST /projects/:id/pipeline ' do
|
||||||
|
context 'authorized user' do
|
||||||
|
context 'with gitlab-ci.yml' do
|
||||||
|
before { stub_ci_pipeline_to_return_yaml_file }
|
||||||
|
|
||||||
|
it 'creates and returns a new pipeline' do
|
||||||
|
expect do
|
||||||
|
post api("/projects/#{project.id}/pipeline", user), ref: project.default_branch
|
||||||
|
end.to change { Ci::Pipeline.count }.by(1)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(201)
|
||||||
|
expect(json_response).to be_a Hash
|
||||||
|
expect(json_response['sha']).to eq project.commit.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'fails when using an invalid ref' do
|
||||||
|
post api("/projects/#{project.id}/pipeline", user), ref: 'invalid_ref'
|
||||||
|
|
||||||
|
expect(response).to have_http_status(400)
|
||||||
|
expect(json_response['message']['base'].first).to eq 'Reference not found'
|
||||||
|
expect(json_response).not_to be_an Array
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'without gitlab-ci.yml' do
|
||||||
|
it 'fails to create pipeline' do
|
||||||
|
post api("/projects/#{project.id}/pipeline", user), ref: project.default_branch
|
||||||
|
|
||||||
|
expect(response).to have_http_status(400)
|
||||||
|
expect(json_response['message']['base'].first).to eq 'Missing .gitlab-ci.yml file'
|
||||||
|
expect(json_response).not_to be_an Array
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'unauthorized user' do
|
||||||
|
it 'does not create pipeline' do
|
||||||
|
post api("/projects/#{project.id}/pipeline", non_member), ref: project.default_branch
|
||||||
|
|
||||||
|
expect(response).to have_http_status(404)
|
||||||
|
expect(json_response['message']).to eq '404 Project Not Found'
|
||||||
|
expect(json_response).not_to be_an Array
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'GET /projects/:id/pipelines/:pipeline_id' do
|
describe 'GET /projects/:id/pipelines/:pipeline_id' do
|
||||||
context 'authorized user' do
|
context 'authorized user' do
|
||||||
it 'returns project pipelines' do
|
it 'returns project pipelines' do
|
||||||
|
|
Loading…
Reference in New Issue