diff --git a/README.md b/README.md index 61cb29fe..e2b464c6 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,7 @@ GroupMilestones GroupProjects GroupVariables GroupLabels +GroupDeployTokens Epics EpicIssues EpicNotes @@ -230,14 +231,14 @@ Branches Commits CommitDiscussions ContainerRegistry -DeployKeys Deployments +DeployKeys Environments Issues -IssueAwardEmojis +IssuesStatistics IssueNotes IssueDiscussions -IssuesStatistics +IssueAwardEmojis Jobs Labels MergeRequests @@ -264,6 +265,7 @@ ProjectSnippetAwardEmojis ProtectedBranches ProtectedTags ProjectVariables +ProjectDeployTokens PushRules Releases ReleaseLinks @@ -272,6 +274,7 @@ RepositoryFiles Runners Services Tags +Todos Triggers VulnerabilityFindings @@ -310,14 +313,15 @@ Currently there are three Bundles: Branches Commits CommitDiscussions +ContainerRegistry Deployments DeployKeys Environments Issues +IssuesStatistics IssueNotes IssueDiscussions IssueAwardEmojis -IssuesStatistics Jobs Labels MergeRequests @@ -344,7 +348,10 @@ ProjectSnippetAwardEmojis ProtectedBranches ProtectedTags ProjectVariables +ProjectDeployTokens PushRules +Releases +ReleaseLinks Repositories RepositoryFiles Runners @@ -379,6 +386,7 @@ GroupMilestones GroupProjects GroupVariables GroupLabels +GroupDeployTokens Epics EpicIssues EpicNotes @@ -698,6 +706,7 @@ This started as a fork from [node-gitlab-legacy](https://github.com/node-gitlab/ - [Kyrylo Fedorov](https://github.com/Kyr) - [Claudio Vellage](https://github.com/jdalrymple/LRH539) - [Seb0uil](https://github.com/seb0uil) +- [Dylan Taylor](https://github.com/dylanmtaylor) ## License diff --git a/packages/gitbeaker-core/src/index.ts b/packages/gitbeaker-core/src/index.ts index f2120696..d02167f2 100644 --- a/packages/gitbeaker-core/src/index.ts +++ b/packages/gitbeaker-core/src/index.ts @@ -18,6 +18,7 @@ export const GroupsBundle = bundler({ GroupProjects: APIServices.GroupProjects, GroupVariables: APIServices.GroupVariables, GroupLabels: APIServices.GroupLabels, + GroupDeployTokens: APIServices.GroupDeployTokens, Epics: APIServices.Epics, EpicIssues: APIServices.EpicIssues, EpicNotes: APIServices.EpicNotes, @@ -74,6 +75,7 @@ export const ProjectsBundle = bundler({ ProtectedBranches: APIServices.ProtectedBranches, ProtectedTags: APIServices.ProtectedTags, ProjectVariables: APIServices.ProjectVariables, + ProjectDeployTokens: APIServices.ProjectDeployTokens, PushRules: APIServices.PushRules, Releases: APIServices.Releases, ReleaseLinks: APIServices.ReleaseLinks, @@ -82,6 +84,7 @@ export const ProjectsBundle = bundler({ Runners: APIServices.Runners, Services: APIServices.Services, Tags: APIServices.Tags, + Todos: APIServices.Todos, Triggers: APIServices.Triggers, VulnerabilityFindings: APIServices.VulnerabilityFindings, }); diff --git a/packages/gitbeaker-core/src/services/GroupDeployTokens.ts b/packages/gitbeaker-core/src/services/GroupDeployTokens.ts new file mode 100644 index 00000000..8309e145 --- /dev/null +++ b/packages/gitbeaker-core/src/services/GroupDeployTokens.ts @@ -0,0 +1,8 @@ +import { ResourceDeployTokens } from '../templates'; +import { BaseServiceOptions } from '../infrastructure'; + +export class GroupDeployTokens extends ResourceDeployTokens { + constructor(options: BaseServiceOptions = {}) { + super('groups', options); + } +} diff --git a/packages/gitbeaker-core/src/services/ProjectDeployTokens.ts b/packages/gitbeaker-core/src/services/ProjectDeployTokens.ts new file mode 100644 index 00000000..c0327f7e --- /dev/null +++ b/packages/gitbeaker-core/src/services/ProjectDeployTokens.ts @@ -0,0 +1,8 @@ +import { ResourceDeployTokens } from '../templates'; +import { BaseServiceOptions } from '../infrastructure'; + +export class ProjectDeployTokens extends ResourceDeployTokens { + constructor(options: BaseServiceOptions = {}) { + super('projects', options); + } +} diff --git a/packages/gitbeaker-core/src/services/index.ts b/packages/gitbeaker-core/src/services/index.ts index 6c419b1e..e47e25e9 100644 --- a/packages/gitbeaker-core/src/services/index.ts +++ b/packages/gitbeaker-core/src/services/index.ts @@ -9,6 +9,7 @@ export { GroupMilestones } from './GroupMilestones'; export { GroupProjects } from './GroupProjects'; export { GroupVariables } from './GroupVariables'; export { GroupLabels } from './GroupLabels'; +export { GroupDeployTokens } from './GroupDeployTokens'; export { Epics } from './Epics'; export { EpicIssues } from './EpicIssues'; export { EpicNotes } from './EpicNotes'; @@ -61,6 +62,7 @@ export { ProjectSnippetAwardEmojis } from './ProjectSnippetAwardEmojis'; export { ProtectedBranches } from './ProtectedBranches'; export { ProtectedTags } from './ProtectedTags'; export { ProjectVariables } from './ProjectVariables'; +export { ProjectDeployTokens } from './ProjectDeployTokens'; export { PushRules } from './PushRules'; export { Releases } from './Releases'; export { ReleaseLinks } from './ReleaseLinks'; diff --git a/packages/gitbeaker-core/src/templates/ResourceDeployTokens.ts b/packages/gitbeaker-core/src/templates/ResourceDeployTokens.ts new file mode 100644 index 00000000..a8851aa5 --- /dev/null +++ b/packages/gitbeaker-core/src/templates/ResourceDeployTokens.ts @@ -0,0 +1,48 @@ +import { + BaseRequestOptions, + BaseService, + BaseServiceOptions, + PaginatedRequestOptions, + RequestHelper, + Sudo, +} from '../infrastructure'; + +type DeployTokenScope = 'read_repository' | 'read_registry' | 'write_registry'; + +// https://docs.gitlab.com/ee/api/deploy_tokens.html +export class ResourceDeployTokens extends BaseService { + constructor(resourceType: string, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); + } + + add( + resourceId: string | number, + tokenName: string, + tokenScopes: DeployTokenScope[], + options?: BaseRequestOptions, + ) { + return RequestHelper.post(this, `${encodeURIComponent(resourceId)}/deploy_tokens`, { + name: tokenName, + scopes: tokenScopes, + ...options, + }); + } + + all({ resourceId, ...options }: { resourceId?: string | number } & PaginatedRequestOptions) { + let url; + + if (resourceId) { + url = `${encodeURIComponent(resourceId)}/deploy_tokens`; + } else { + url = 'deploy_tokens'; + } + + return RequestHelper.get(this, url, options); + } + + remove(resourceId: string | number, tokenId: number, options?: Sudo) { + const [rId, tId] = [resourceId, tokenId].map(encodeURIComponent); + + return RequestHelper.del(this, `${rId}/deploy_tokens/${tId}`, options); + } +} diff --git a/packages/gitbeaker-core/src/templates/index.ts b/packages/gitbeaker-core/src/templates/index.ts index 83f9f80e..22971c1b 100644 --- a/packages/gitbeaker-core/src/templates/index.ts +++ b/packages/gitbeaker-core/src/templates/index.ts @@ -2,6 +2,7 @@ export * from './ResourceAccessRequests'; export * from './ResourceAwardEmojis'; export * from './ResourceBadges'; export * from './ResourceCustomAttributes'; +export * from './ResourceDeployTokens'; export * from './ResourceDiscussions'; export * from './ResourceIssueBoards'; export * from './ResourceLabels';