diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index 408ce22fd6f10fa3c19cdb76f99fa137ea6d0f29..209d621031b1abe2d344b6e20ac8f1e8407dd23d 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -128,6 +128,14 @@ describe('platform/gitlab', () => { { path_with_namespace: 'c/d', }, + { + path_with_namespace: 'c/e', + archived: true, + }, + { + path_with_namespace: 'c/f', + mirror: true, + }, ]); const repos = await gitlab.getRepos(); expect(repos).toMatchSnapshot(); diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 73d38964585161536083f86a745ac4a2d75e5fce..02e3fbf2a4d087759731a39514451c511233935d 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -44,6 +44,18 @@ import { smartTruncate } from '../utils/pr-body'; const gitlabApi = new GitlabHttp(); type MergeMethod = 'merge' | 'rebase_merge' | 'ff'; +type RepoResponse = { + archived: boolean; + mirror: boolean; + default_branch: string; + empty_repo: boolean; + http_url_to_repo: string; + forked_from_project: boolean; + repository_access_level: 'disabled' | 'private' | 'enabled'; + merge_requests_access_level: 'disabled' | 'private' | 'enabled'; + merge_method: MergeMethod; + path_with_namespace: string; +}; const defaultConfigFile = configFileNames[0]; let config: { storage: GitStorage; @@ -110,12 +122,13 @@ export async function getRepos(): Promise<string[]> { logger.debug('Autodiscovering GitLab repositories'); try { const url = `projects?membership=true&per_page=100&with_merge_requests_enabled=true&min_access_level=30`; - const res = await gitlabApi.getJson<{ path_with_namespace: string }[]>( - url, - { paginate: true } - ); + const res = await gitlabApi.getJson<RepoResponse[]>(url, { + paginate: true, + }); logger.debug(`Discovered ${res.body.length} project(s)`); - return res.body.map((repo) => repo.path_with_namespace); + return res.body + .filter((repo) => !repo.mirror && !repo.archived) + .map((repo) => repo.path_with_namespace); } catch (err) { logger.error({ err }, `GitLab getRepos error`); throw err; @@ -146,17 +159,6 @@ export async function initRepo({ config.repository = urlEscape(repository); config.localDir = localDir; - type RepoResponse = { - archived: boolean; - mirror: boolean; - default_branch: string; - empty_repo: boolean; - http_url_to_repo: string; - forked_from_project: boolean; - repository_access_level: 'disabled' | 'private' | 'enabled'; - merge_requests_access_level: 'disabled' | 'private' | 'enabled'; - merge_method: MergeMethod; - }; let res: HttpResponse<RepoResponse>; try { res = await gitlabApi.getJson<RepoResponse>(