Backstage Plugin GitLab

Backstage plugins to interact with GitLab
Table of contents
Features
- List top 20 builds for a project
- List top 20 Merge Requests for a project
- List top 20 Issues for a project
- View Code Owners for a project
- View Contributors for a project
- View Languages used for a project
- View Pipeline status for a project
- Works for both project and personal tokens
- Pagination for builds
- Pagination for Merge Requests
- Merge Requests Statistics
- Support for Olds/New GitLab APIs version
Screenshots
Setup
- If you have a standalone app (you didn't clone this repo), then do
cd packages/app
yarn add @immobiliarelabs/backstage-plugin-gitlab
- Add a new GitLab tab to the entity page.
import {
isGitlabAvailable,
EntityGitlabContent,
} from '@immobiliarelabs/backstage-plugin-gitlab';
const serviceEntityPage = (
<EntityLayout>
{/* Place the following section where you want the tab to appear */}
<EntityLayout.Route
if={isGitlabAvailable}
path="/gitlab"
title="Gitlab"
>
<EntityGitlabContent />
</EntityLayout.Route>
</EntityLayout>
);
- Add the GitLab cards to the Overview tab on the entity page(Optional).
import {
isGitlabAvailable,
EntityGitlabContent,
EntityGitlabLanguageCard,
EntityGitlabPeopleCard,
EntityGitlabMergeRequestsTable,
EntityGitlabMergeRequestStatsCard,
EntityGitlabPipelinesTable,
} from '@immobiliarelabs/backstage-plugin-gitlab';
const overviewContent = (
<Grid container spacing={3} alignItems="stretch">
<EntitySwitch>
<EntitySwitch.Case if={isGitlabAvailable}>
<Grid item md={6}>
<EntityGitlabPeopleCard />
<EntityGitlabLanguageCard />
<EntityGitlabMergeRequestStatsCard />
<EntityGitlabPipelinesTable />
<EntityGitlabMergeRequestsTable />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
</Grid>
);
- Add integration:
In
app-config.yaml add the integration for gitlab:
integrations:
gitlab:
- host: gitlab.com
token: ${GITLAB_TOKEN}
'/gitlabci':
target: '${GITLAB_URL}/api/v4'
allowedMethods: ['GET']
headers:
PRIVATE-TOKEN: '${GITLAB_TOKEN}'
- Default GitLab URL:
https://gitlab.com
- GitLab Token should be with of scope
read_api and can be generated from this URL
- (Optional): You can also add plugin configurations in
app-config.yaml file:
gitlab:
defaultCodeOwnersPath: .gitlab/CODEOWNERS
proxyPath: /gitlabci
- Add a
gitlab.com/project-id annotation to your respective catalog-info.yaml files, on the format
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
annotations:
gitlab.com/project-id: 'project-id'
gitlab.com/project-slug: 'project-slug'
gitlab.com/codeowners-path: 'somewhere/CODEOWNERS'
spec:
type: service
Note: spec.type can take values in ['website','library','service'] but to render GitLab Entity, Catalog must be of type service
Old/New GitLab Versions
If you have an old GitLab version, or a new one, we allow you to extend the GitLab Client as follow:
packages/app/src/api.ts
import { GitlabCIApiRef } from '@immobiliarelabs/backstage-plugin-gitlab';
import { CustomGitlabCIClient } from '@immobiliarelabs/backstage-plugin-gitlab';
import { discoveryApiRef, configApiRef } from '@backstage/core-plugin-api';
import { CustomGitlabCIClient } from 'packages/app/src/myCustomClient.ts';
export const apis: AnyApiFactory[] = [
createApiFactory({
api: GitlabCIApiRef,
deps: { configApi: configApiRef, discoveryApi: discoveryApiRef },
factory: ({ configApi, discoveryApi }) =>
new CustomGitlabCIClient({
discoveryApi,
baseUrl: configApi.getOptionalString('gitlab.baseUrl'),
proxyPath: configApi.getOptionalString('gitlab.proxyPath'),
codeOwnersPath: configApi.getOptionalString(
'gitlab.defaultCodeOwnersPath'
),
}),
}),
];
packages/app/src/myCustomClient.ts
import { GitlabCIClient } from '@immobiliarelabs/backstage-plugin-gitlab';
export class CustomGitlabCIClient extends GitlabCIClient {
async getPipelineSummary(projectID: string | undefined): Promise<PipelineSummary | undefined> {
this.callApi(...)
.
.
.
}
}
see here.
Support & Contribute
Made with ❤️ by ImmobiliareLabs & Contributors
We'd love for you to contribute to Backstage GitLab Plugin!
If you have any questions on how to use Backstage GitLab Plugin, bugs and enhancement please feel free to reach out by opening a GitHub Issue.
License
This plugin is based on the original work of loblaw-sre/backstage-plugin-gitlab by @satrox28 and @Balasundaram.
This plugin is under Apache 2.0 license, see NOTICE for copyright.