API and doc for protected variables
This commit is contained in:
parent
efebdba21d
commit
bd66bf08b5
|
@ -61,11 +61,12 @@ Create a new build variable.
|
||||||
POST /projects/:id/variables
|
POST /projects/:id/variables
|
||||||
```
|
```
|
||||||
|
|
||||||
| Attribute | Type | required | Description |
|
| Attribute | Type | required | Description |
|
||||||
|-----------|---------|----------|-----------------------|
|
|-------------|---------|----------|-----------------------|
|
||||||
| `id` | integer/string | yes | The ID of a project or [urlencoded NAMESPACE/PROJECT_NAME of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
| `id` | integer/string | yes | The ID of a project or [urlencoded NAMESPACE/PROJECT_NAME of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||||
| `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 |
|
| `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 |
|
| `value` | string | yes | The `value` of a variable |
|
||||||
|
| `protected` | boolean | no | Whether the variable is protected |
|
||||||
|
|
||||||
```
|
```
|
||||||
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/variables" --form "key=NEW_VARIABLE" --form "value=new value"
|
curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/variables" --form "key=NEW_VARIABLE" --form "value=new value"
|
||||||
|
@ -74,7 +75,8 @@ curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitl
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"key": "NEW_VARIABLE",
|
"key": "NEW_VARIABLE",
|
||||||
"value": "new value"
|
"value": "new value",
|
||||||
|
"protected": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -86,11 +88,12 @@ Update a project's build variable.
|
||||||
PUT /projects/:id/variables/:key
|
PUT /projects/:id/variables/:key
|
||||||
```
|
```
|
||||||
|
|
||||||
| Attribute | Type | required | Description |
|
| Attribute | Type | required | Description |
|
||||||
|-----------|---------|----------|-------------------------|
|
|-------------|---------|----------|-------------------------|
|
||||||
| `id` | integer/string | yes | The ID of a project or [urlencoded NAMESPACE/PROJECT_NAME of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
| `id` | integer/string | yes | The ID of a project or [urlencoded NAMESPACE/PROJECT_NAME of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||||
| `key` | string | yes | The `key` of a variable |
|
| `key` | string | yes | The `key` of a variable |
|
||||||
| `value` | string | yes | The `value` of a variable |
|
| `value` | string | yes | The `value` of a variable |
|
||||||
|
| `protected` | boolean | no | Whether the variable is protected |
|
||||||
|
|
||||||
```
|
```
|
||||||
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/variables/NEW_VARIABLE" --form "value=updated value"
|
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/variables/NEW_VARIABLE" --form "value=updated value"
|
||||||
|
@ -99,7 +102,8 @@ curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitla
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"key": "NEW_VARIABLE",
|
"key": "NEW_VARIABLE",
|
||||||
"value": "updated value"
|
"value": "updated value",
|
||||||
|
"protected": true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -670,6 +670,7 @@ module API
|
||||||
|
|
||||||
class Variable < Grape::Entity
|
class Variable < Grape::Entity
|
||||||
expose :key, :value
|
expose :key, :value
|
||||||
|
expose :protected?, as: :protected
|
||||||
end
|
end
|
||||||
|
|
||||||
class Pipeline < PipelineBasic
|
class Pipeline < PipelineBasic
|
||||||
|
|
|
@ -42,6 +42,7 @@ module API
|
||||||
params do
|
params do
|
||||||
requires :key, type: String, desc: 'The key of the variable'
|
requires :key, type: String, desc: 'The key of the variable'
|
||||||
requires :value, type: String, desc: 'The value of the variable'
|
requires :value, type: String, desc: 'The value of the variable'
|
||||||
|
optional :protected, type: String, desc: 'Whether the variable is protected'
|
||||||
end
|
end
|
||||||
post ':id/variables' do
|
post ':id/variables' do
|
||||||
variable = user_project.variables.create(declared(params, include_parent_namespaces: false).to_h)
|
variable = user_project.variables.create(declared(params, include_parent_namespaces: false).to_h)
|
||||||
|
@ -59,13 +60,14 @@ module API
|
||||||
params do
|
params do
|
||||||
optional :key, type: String, desc: 'The key of the variable'
|
optional :key, type: String, desc: 'The key of the variable'
|
||||||
optional :value, type: String, desc: 'The value of the variable'
|
optional :value, type: String, desc: 'The value of the variable'
|
||||||
|
optional :protected, type: String, desc: 'Whether the variable is protected'
|
||||||
end
|
end
|
||||||
put ':id/variables/:key' do
|
put ':id/variables/:key' do
|
||||||
variable = user_project.variables.find_by(key: params[:key])
|
variable = user_project.variables.find_by(key: params[:key])
|
||||||
|
|
||||||
return not_found!('Variable') unless variable
|
return not_found!('Variable') unless variable
|
||||||
|
|
||||||
if variable.update(value: params[:value])
|
if variable.update(declared_params(include_missing: false).except(:key))
|
||||||
present variable, with: Entities::Variable
|
present variable, with: Entities::Variable
|
||||||
else
|
else
|
||||||
render_validation_error!(variable)
|
render_validation_error!(variable)
|
||||||
|
|
|
@ -42,6 +42,7 @@ describe API::Variables do
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response['value']).to eq(variable.value)
|
expect(json_response['value']).to eq(variable.value)
|
||||||
|
expect(json_response['protected']).to eq(variable.protected?)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'responds with 404 Not Found if requesting non-existing variable' do
|
it 'responds with 404 Not Found if requesting non-existing variable' do
|
||||||
|
@ -72,12 +73,13 @@ describe API::Variables do
|
||||||
context 'authorized user with proper permissions' do
|
context 'authorized user with proper permissions' do
|
||||||
it 'creates variable' do
|
it 'creates variable' do
|
||||||
expect do
|
expect do
|
||||||
post api("/projects/#{project.id}/variables", user), key: 'TEST_VARIABLE_2', value: 'VALUE_2'
|
post api("/projects/#{project.id}/variables", user), key: 'TEST_VARIABLE_2', value: 'VALUE_2', protected: true
|
||||||
end.to change{project.variables.count}.by(1)
|
end.to change{project.variables.count}.by(1)
|
||||||
|
|
||||||
expect(response).to have_http_status(201)
|
expect(response).to have_http_status(201)
|
||||||
expect(json_response['key']).to eq('TEST_VARIABLE_2')
|
expect(json_response['key']).to eq('TEST_VARIABLE_2')
|
||||||
expect(json_response['value']).to eq('VALUE_2')
|
expect(json_response['value']).to eq('VALUE_2')
|
||||||
|
expect(json_response['protected']).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow to duplicate variable key' do
|
it 'does not allow to duplicate variable key' do
|
||||||
|
@ -112,13 +114,14 @@ describe API::Variables do
|
||||||
initial_variable = project.variables.first
|
initial_variable = project.variables.first
|
||||||
value_before = initial_variable.value
|
value_before = initial_variable.value
|
||||||
|
|
||||||
put api("/projects/#{project.id}/variables/#{variable.key}", user), value: 'VALUE_1_UP'
|
put api("/projects/#{project.id}/variables/#{variable.key}", user), value: 'VALUE_1_UP', protected: true
|
||||||
|
|
||||||
updated_variable = project.variables.first
|
updated_variable = project.variables.first
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(value_before).to eq(variable.value)
|
expect(value_before).to eq(variable.value)
|
||||||
expect(updated_variable.value).to eq('VALUE_1_UP')
|
expect(updated_variable.value).to eq('VALUE_1_UP')
|
||||||
|
expect(updated_variable).to be_protected
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'responds with 404 Not Found if requesting non-existing variable' do
|
it 'responds with 404 Not Found if requesting non-existing variable' do
|
||||||
|
|
Loading…
Reference in New Issue