diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index 390fba57640e11b4514caa37df8131a4b9622886..3455f8b7accad04dc7c09ace93b1c297cb633d49 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,