Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions lib/gitlab/client/groups.rb
Original file line number Diff line number Diff line change
Expand Up @@ -523,4 +523,62 @@ def create_group_access_token(group_id, name, scopes, access_level = nil, expire
def revoke_group_access_token(group_id, group_access_token_id)
delete("/groups/#{group_id}/access_tokens/#{group_access_token_id}")
end

# Get all deploy tokens for a group
#
# @example
# Gitlab.group_deploy_tokens(1)
# Gitlab.group_deploy_tokens(1, active: true)
#
# @param [Integer] group_id The ID of the group.
# @param [Hash] options A customizable set of options.
# @option options [Boolean] :active Limit by active status.
# @return [Array<Gitlab::ObjectifiedHash>]
def group_deploy_tokens(group_id, options = {})
get("/groups/#{group_id}/deploy_tokens", query: options)
end

# Get group deploy token information
#
# @example
# Gitlab.group_deploy_token(1, 1)
#
# @param [Integer] group_id The ID of the group.
# @param [Integer] group_deploy_token_id ID of the group deploy token.
# @return [Gitlab::ObjectifiedHash]
def group_deploy_token(group_id, group_deploy_token_id)
get("/groups/#{group_id}/deploy_tokens/#{group_deploy_token_id}")
end

# Create group deploy token
#
# @example
# Gitlab.create_group_deploy_token(2, "token", ["api", "read_user"])
# Gitlab.create_group_deploy_token(2, "token", ["api", "read_user"], "1970-01-01")
# Gitlab.create_group_deploy_token(2, "token", ["api", "read_user"], "1970-01-01", 'myuser')
#
# @param [Integer] group_id The ID of the group.
# @param [String] name Name for group deploy token.
# @param [Array<String>] scopes Array of scopes for the group deploy token
# @param [String] expires_at Date for the group deploy token expiration in ISO format.
# @param [String] username Username for the group deploy token.
# @return [Gitlab::ObjectifiedHash]
def create_group_deploy_token(group_id, name, scopes, expires_at = nil, username = nil)
body = { name: name, scopes: scopes }
body[:expires_at] = expires_at if expires_at
body[:username] = username if username
post("/groups/#{group_id}/deploy_tokens", body: body)
end

# Revoke a group deploy token
#
# @example
# Gitlab.revoke_group_deploy_token(1, 1)
#
# @param [Integer] group_id The ID of the group.
# @param [Integer] group_deploy_token_id ID of the group deploy token.
# @return [Gitlab::ObjectifiedHash]
def revoke_group_deploy_token(group_id, group_deploy_token_id)
delete("/groups/#{group_id}/deploy_tokens/#{group_deploy_token_id}")
end
end
1 change: 1 addition & 0 deletions spec/fixtures/group_deploy_token_create.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":2,"name":"mytoken","username":"gitlab+deploy-token-1","expires_at":null,"token":"jMRvtPNxrn3crTAGukpZ","revoked":false,"expired":false,"scopes":["api"]}
1 change: 1 addition & 0 deletions spec/fixtures/group_deploy_token_get.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":2,"name":"MyToken1","username":"gitlab+deploy-token-1","expires_at":null,"revoked":false,"expired":false,"scopes":["api"]}
1 change: 1 addition & 0 deletions spec/fixtures/group_deploy_token_get_all.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id":2,"name":"MyToken1","username":"gitlab+deploy-token-1","expires_at":null,"revoked":false,"expired":false,"scopes":["api"]},{"id":3,"name":"MyToken2","username":"gitlab+deploy-token-2","expires_at":"2026-12-25T00:00:00.000Z","revoked":false,"expired":false,"scopes":["read_registry"]}]
69 changes: 69 additions & 0 deletions spec/gitlab/client/groups_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -650,4 +650,73 @@
end
end
end

describe 'group deploy tokens' do
describe 'get all' do
before do
stub_get('/groups/2/deploy_tokens', 'group_deploy_token_get_all')
@tokens = Gitlab.group_deploy_tokens(2)
end

it 'gets the correct resource' do
expect(a_get('/groups/2/deploy_tokens')).to have_been_made
end

it 'gets an array of group deploy tokens' do
expect(@tokens.first.id).to eq(2)
expect(@tokens.last.id).to eq(3)
end
end

describe 'get one' do
before do
stub_get('/groups/2/deploy_tokens/2', 'group_deploy_token_get')
@token = Gitlab.group_deploy_token(2, 2)
end

it 'gets the correct resource' do
expect(a_get('/groups/2/deploy_tokens/2')).to have_been_made
end

it 'gets a group deploy token' do
expect(@token.name).to eq('MyToken1')
expect(@token.username).to eq('gitlab+deploy-token-1')
expect(@token.id).to eq(2)
end
end

describe 'create' do
before do
stub_post('/groups/2/deploy_tokens', 'group_deploy_token_create')
@token = Gitlab.create_group_deploy_token(2, 'mytoken', ['api'])
end

it 'gets the correct resource' do
expect(a_post('/groups/2/deploy_tokens').with(body: 'name=mytoken&scopes%5B%5D=api')).to have_been_made
end

it 'returns a valid group deploy token' do
expect(@token.name).to eq('mytoken')
expect(@token.username).to eq('gitlab+deploy-token-1')
expect(@token.id).to eq(2)
expect(@token.revoked).to be_falsey
expect(@token.expired).to be_falsey
expect(@token.token).to eq('jMRvtPNxrn3crTAGukpZ')
end
end

describe 'revoke' do
before do
stub_request(:delete, "#{Gitlab.endpoint}/groups/2/deploy_tokens/2")
.with(headers: { 'PRIVATE-TOKEN' => Gitlab.private_token })
.to_return(status: 204)
@token = Gitlab.revoke_group_deploy_token(2, 2)
end

it 'removes a group deploy token' do
expect(a_delete('/groups/2/deploy_tokens/2')).to have_been_made
expect(@token.to_hash).to be_empty
end
end
end
end
Loading