diff --git a/changelog.md b/changelog.md index 6bfaf96..9b91a2c 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2026-03-02 - 2.4.0 - feat(gitlab) +add repository branches and tags endpoints and corresponding types + +- Add getRepoBranches(projectId, opts?) to list repository branches (supports pagination with page and perPage; defaults to page=1, perPage=50). +- Add getRepoTags(projectId, opts?) to list repository tags (supports pagination with page and perPage; defaults to page=1, perPage=50). +- Introduce IGitLabBranch and IGitLabTag interfaces and export them from ts/index.ts. + ## 2026-02-28 - 2.3.0 - feat(gitlab) add support for GitLab protected branches (list and unprotect) diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index d22c3d8..baa6b2e 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@apiclient.xyz/gitlab', - version: '2.3.0', + version: '2.4.0', description: 'A TypeScript client for the GitLab API, providing easy access to projects, groups, CI/CD variables, and pipelines.' } diff --git a/ts/gitlab.classes.gitlabclient.ts b/ts/gitlab.classes.gitlabclient.ts index 57826bd..acbca50 100644 --- a/ts/gitlab.classes.gitlabclient.ts +++ b/ts/gitlab.classes.gitlabclient.ts @@ -7,6 +7,8 @@ import type { IGitLabVariable, IVariableOptions, IGitLabProtectedBranch, + IGitLabBranch, + IGitLabTag, IGitLabPipeline, IGitLabJob, ITestConnectionResult, @@ -370,6 +372,28 @@ export class GitLabClient { ); } + // --------------------------------------------------------------------------- + // Repository Branches & Tags + // --------------------------------------------------------------------------- + + public async getRepoBranches(projectId: number | string, opts?: IListOptions): Promise { + const page = opts?.page || 1; + const perPage = opts?.perPage || 50; + return this.request( + 'GET', + `/api/v4/projects/${encodeURIComponent(projectId)}/repository/branches?page=${page}&per_page=${perPage}`, + ); + } + + public async getRepoTags(projectId: number | string, opts?: IListOptions): Promise { + const page = opts?.page || 1; + const perPage = opts?.perPage || 50; + return this.request( + 'GET', + `/api/v4/projects/${encodeURIComponent(projectId)}/repository/tags?page=${page}&per_page=${perPage}`, + ); + } + // --------------------------------------------------------------------------- // Protected Branches // --------------------------------------------------------------------------- diff --git a/ts/gitlab.interfaces.ts b/ts/gitlab.interfaces.ts index 1d1a977..fa4eb9e 100644 --- a/ts/gitlab.interfaces.ts +++ b/ts/gitlab.interfaces.ts @@ -70,6 +70,20 @@ export interface IGitLabJob { duration: number; } +export interface IGitLabBranch { + name: string; + commit: { + id: string; + }; +} + +export interface IGitLabTag { + name: string; + commit: { + id: string; + }; +} + export interface ITestConnectionResult { ok: boolean; error?: string; diff --git a/ts/index.ts b/ts/index.ts index 2704a56..0e0f95d 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -5,6 +5,8 @@ export type { IGitLabGroup, IGitLabVariable, IGitLabProtectedBranch, + IGitLabBranch, + IGitLabTag, IVariableOptions, IGitLabPipeline, IGitLabJob,