Extend API: Pipeline Schedule Variable
This commit is contained in:
parent
970af9964e
commit
8ca5c333fd
|
@ -84,7 +84,13 @@ curl --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" "https://gitlab.example.com/
|
|||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
|
||||
"web_url": "https://gitlab.example.com/root"
|
||||
}
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"key": "TEST_VARIABLE_1",
|
||||
"value": "TEST_1"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -271,3 +277,156 @@ curl --request DELETE --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" "https://gi
|
|||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Create a new pipeline schedule variable
|
||||
|
||||
Create a new variable of a pipeline schedule.
|
||||
|
||||
```
|
||||
POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables
|
||||
```
|
||||
|
||||
| Attribute | Type | required | Description |
|
||||
|---------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `key` | string | yes | The `key` of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9`, and `_` are allowed |
|
||||
| `value` | string | yes | The `value` of a variable |
|
||||
|
||||
```sh
|
||||
curl --request POST --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" --form "key=NEW_VARIABLE" --form "value=new value" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13/variables"
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 13,
|
||||
"description": "Test schedule pipeline",
|
||||
"ref": "master",
|
||||
"cron": "* * * * *",
|
||||
"cron_timezone": "Asia/Tokyo",
|
||||
"next_run_at": "2017-05-19T13:41:00.000Z",
|
||||
"active": true,
|
||||
"created_at": "2017-05-19T13:31:08.849Z",
|
||||
"updated_at": "2017-05-19T13:40:17.727Z",
|
||||
"last_pipeline": {
|
||||
"id": 332,
|
||||
"sha": "0e788619d0b5ec17388dffb973ecd505946156db",
|
||||
"ref": "master",
|
||||
"status": "pending"
|
||||
},
|
||||
"owner": {
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
"id": 1,
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
|
||||
"web_url": "https://gitlab.example.com/root"
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"key": "NEW_VARIABLE",
|
||||
"value": "new value"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Edit a pipeline schedule variable
|
||||
|
||||
Updates the variable of a pipeline schedule.
|
||||
|
||||
```
|
||||
PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
|
||||
```
|
||||
|
||||
| Attribute | Type | required | Description |
|
||||
|---------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `key` | string | yes | The `key` of a variable |
|
||||
| `value` | string | yes | The `value` of a variable |
|
||||
|
||||
```sh
|
||||
curl --request PUT --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" --form "value=updated value" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13/variables/NEW_VARIABLE"
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 13,
|
||||
"description": "Test schedule pipeline",
|
||||
"ref": "master",
|
||||
"cron": "* * * * *",
|
||||
"cron_timezone": "Asia/Tokyo",
|
||||
"next_run_at": "2017-05-19T13:41:00.000Z",
|
||||
"active": true,
|
||||
"created_at": "2017-05-19T13:31:08.849Z",
|
||||
"updated_at": "2017-05-19T13:40:17.727Z",
|
||||
"last_pipeline": {
|
||||
"id": 332,
|
||||
"sha": "0e788619d0b5ec17388dffb973ecd505946156db",
|
||||
"ref": "master",
|
||||
"status": "pending"
|
||||
},
|
||||
"owner": {
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
"id": 1,
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
|
||||
"web_url": "https://gitlab.example.com/root"
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"key": "NEW_VARIABLE",
|
||||
"value": "updated value"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Delete a pipeline schedule variable
|
||||
|
||||
Delete the variable of a pipeline schedule.
|
||||
|
||||
```
|
||||
DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
|
||||
```
|
||||
|
||||
| Attribute | Type | required | Description |
|
||||
|----------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `key` | string | yes | The `key` of a variable |
|
||||
|
||||
```sh
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13/variables/NEW_VARIABLE"
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 13,
|
||||
"description": "Test schedule pipeline",
|
||||
"ref": "master",
|
||||
"cron": "* * * * *",
|
||||
"cron_timezone": "Asia/Tokyo",
|
||||
"next_run_at": "2017-05-19T13:41:00.000Z",
|
||||
"active": true,
|
||||
"created_at": "2017-05-19T13:31:08.849Z",
|
||||
"updated_at": "2017-05-19T13:40:17.727Z",
|
||||
"last_pipeline": {
|
||||
"id": 332,
|
||||
"sha": "0e788619d0b5ec17388dffb973ecd505946156db",
|
||||
"ref": "master",
|
||||
"status": "pending"
|
||||
},
|
||||
"owner": {
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
"id": 1,
|
||||
"state": "active",
|
||||
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
|
||||
"web_url": "https://gitlab.example.com/root"
|
||||
},
|
||||
"variables": []
|
||||
}
|
||||
```
|
||||
|
|
|
@ -819,7 +819,7 @@ module API
|
|||
|
||||
class Variable < Grape::Entity
|
||||
expose :key, :value
|
||||
expose :protected?, as: :protected
|
||||
expose :protected?, as: :protected, if: -> (entity, options) { entity.respond_to?(protected?) }
|
||||
end
|
||||
|
||||
class Pipeline < PipelineBasic
|
||||
|
@ -840,6 +840,7 @@ module API
|
|||
|
||||
class PipelineScheduleDetails < PipelineSchedule
|
||||
expose :last_pipeline, using: Entities::PipelineBasic
|
||||
expose :variables, using: Entities::Variable
|
||||
end
|
||||
|
||||
class EnvironmentBasic < Grape::Entity
|
||||
|
|
|
@ -119,6 +119,76 @@ module API
|
|||
|
||||
destroy_conditionally!(pipeline_schedule)
|
||||
end
|
||||
|
||||
params do
|
||||
requires :pipeline_schedule_id, type: Integer, desc: 'The pipeline schedule id'
|
||||
end
|
||||
resource :variables, requirements: { pipeline_schedule_id: %r{[^/]+} } do
|
||||
desc 'Create a new pipeline schedule variable' do
|
||||
success Entities::PipelineScheduleDetails
|
||||
end
|
||||
params do
|
||||
requires :key, type: String, desc: 'The key of the variable'
|
||||
requires :value, type: String, desc: 'The value of the variable'
|
||||
end
|
||||
post ':id/pipeline_schedules/:pipeline_schedule_id/variables' do
|
||||
authorize! :read_pipeline_schedule, user_project
|
||||
|
||||
not_found!('PipelineSchedule') unless pipeline_schedule
|
||||
authorize! :update_pipeline_schedule, pipeline_schedule
|
||||
|
||||
variable_params = declared_params(include_missing: false)
|
||||
variable = pipeline_schedule.variables.create(variable_params)
|
||||
|
||||
if variable.persisted?
|
||||
present variable, with: Entities::Variable
|
||||
else
|
||||
render_validation_error!(variable)
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Edit a pipeline schedule variable' do
|
||||
success Entities::PipelineScheduleDetails
|
||||
end
|
||||
params do
|
||||
optional :key, type: String, desc: 'The key of the variable'
|
||||
optional :value, type: String, desc: 'The value of the variable'
|
||||
end
|
||||
put ':id/pipeline_schedules/:pipeline_schedule_id/variables/:key' do
|
||||
authorize! :read_pipeline_schedule, user_project
|
||||
|
||||
not_found!('PipelineSchedule') unless pipeline_schedule
|
||||
authorize! :update_pipeline_schedule, pipeline_schedule
|
||||
|
||||
variable = pipeline_schedule.variables.find_by(key: params[:key])
|
||||
not_found!('Variable') unless variable
|
||||
|
||||
if variable.update(declared_params(include_missing: false))
|
||||
present variable, with: Entities::Variable
|
||||
else
|
||||
render_validation_error!(variable)
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Delete a pipeline schedule variable' do
|
||||
success Entities::PipelineScheduleDetails
|
||||
end
|
||||
params do
|
||||
requires :key, type: String, desc: 'The key of the variable'
|
||||
end
|
||||
delete ':id/pipeline_schedules/:pipeline_schedule_id/variables/:key' do
|
||||
authorize! :read_pipeline_schedule, user_project
|
||||
|
||||
not_found!('PipelineSchedule') unless pipeline_schedule
|
||||
authorize! :admin_pipeline_schedule, pipeline_schedule
|
||||
|
||||
variable = pipeline_schedule.variables.find_by(key: params[:key])
|
||||
not_found!('Variable') unless variable
|
||||
|
||||
status :accepted
|
||||
present variable, with: Entities::Variable
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
helpers do
|
||||
|
|
|
@ -31,6 +31,17 @@
|
|||
"web_url": { "type": "uri" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"variables": {
|
||||
"type": ["array", "null"],
|
||||
"items": {
|
||||
"type": ["object", "null"],
|
||||
"properties": {
|
||||
"key": { "type": "string" },
|
||||
"value": { "type": "string" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
Loading…
Reference in New Issue