From f072d417f8aea6e98dcb5a1016ee1881d1dec85b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Wed, 21 Feb 2024 00:47:55 +0100 Subject: [PATCH] GitlabManager => Add getRepositoryLastCommit function --- ExpressAPI/src/managers/GitlabManager.ts | 54 +++++++++++++++++------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index 390fba5..3455f8b 100644 --- a/ExpressAPI/src/managers/GitlabManager.ts +++ b/ExpressAPI/src/managers/GitlabManager.ts @@ -1,22 +1,29 @@ -import axios from 'axios'; -import Config from '../config/Config'; -import GitlabRepository from '../shared/types/Gitlab/GitlabRepository'; -import GitlabAccessLevel from '../shared/types/Gitlab/GitlabAccessLevel'; -import GitlabMember from '../shared/types/Gitlab/GitlabMember'; -import { StatusCodes } from 'http-status-codes'; -import GitlabVisibility from '../shared/types/Gitlab/GitlabVisibility'; -import GitlabUser from '../shared/types/Gitlab/GitlabUser'; -import GitlabTreeFile from '../shared/types/Gitlab/GitlabTreeFile'; -import parseLinkHeader from 'parse-link-header'; -import GitlabFile from '../shared/types/Gitlab/GitlabFile'; -import express from 'express'; -import GitlabRoute from '../shared/types/Gitlab/GitlabRoute'; -import SharedConfig from '../shared/config/SharedConfig'; -import GitlabProfile from '../shared/types/Gitlab/GitlabProfile'; -import GitlabRelease from '../shared/types/Gitlab/GitlabRelease'; +import axios from 'axios'; +import Config from '../config/Config'; +import GitlabRepository from '../shared/types/Gitlab/GitlabRepository'; +import GitlabAccessLevel from '../shared/types/Gitlab/GitlabAccessLevel'; +import GitlabMember from '../shared/types/Gitlab/GitlabMember'; +import { StatusCodes } from 'http-status-codes'; +import GitlabVisibility from '../shared/types/Gitlab/GitlabVisibility'; +import GitlabUser from '../shared/types/Gitlab/GitlabUser'; +import GitlabTreeFile from '../shared/types/Gitlab/GitlabTreeFile'; +import parseLinkHeader from 'parse-link-header'; +import GitlabFile from '../shared/types/Gitlab/GitlabFile'; +import express from 'express'; +import GitlabRoute from '../shared/types/Gitlab/GitlabRoute'; +import SharedConfig from '../shared/config/SharedConfig'; +import GitlabProfile from '../shared/types/Gitlab/GitlabProfile'; +import GitlabRelease from '../shared/types/Gitlab/GitlabRelease'; +import { CommitSchema, Gitlab } from '@gitbeaker/rest'; +import logger from '../shared/logging/WinstonLogger'; class GitlabManager { + readonly api = new Gitlab({ + host : SharedConfig.gitlab.URL, + token: Config.gitlab.account.token + }); + private getApiUrl(route: GitlabRoute): string { return `${ SharedConfig.gitlab.apiURL }${ route }`; } @@ -75,6 +82,21 @@ class GitlabManager { return response.data; } + async getRepositoryLastCommit(repoId: number, branch: string = 'main'): Promise<CommitSchema | undefined> { + try { + const commits = await this.api.Commits.all(repoId, { + refName : branch, + maxPages: 1, + perPage : 1 + }); + + return commits.length > 0 ? commits[0] : undefined; + } catch ( e ) { + logger.error(e); + return undefined; + } + } + async createRepository(name: string, description: string, visibility: string, initializeWithReadme: boolean, namespace: number, sharedRunnersEnabled: boolean, wikiEnabled: boolean, import_url: string): Promise<GitlabRepository> { const response = await axios.post<GitlabRepository>(this.getApiUrl(GitlabRoute.REPOSITORY_CREATE), { name : name, -- GitLab