GitLab CI Monitor
Monitor your GitLab pipelines in real time, right inside VS Code — across every repository in your workspace, in both the Explorer and the Source Control panels.
Inspired by and based on gitlab-pipelines by jameswain (ISC). See NOTICE.
Features
Requirements
The extension activates when a workspace folder contains a .gitlab-ci.yml file.
Configuration
Non-secret options live in settings.json, keyed by your git remote host (for gitlab.com it is gitlab.com):
"GitLabPipelines": {
"gitlab.com": {
"interval": 5000,
"notifyOnFailed": true
}
}
| Field |
Required |
Default |
Meaning |
interval |
|
5000 |
Refresh interval in milliseconds. |
notifyOnFailed |
|
true |
Show a notification when a pipeline fails. |
The domain and project are derived from each repo's git remote, so one entry per domain serves every repository hosted there.
The configuration key is intentionally GitLabPipelines for drop-in compatibility with the original extension.
Token (required)
A GitLab Personal Access Token
with api scope (or read_api for monitoring only, without the retry/cancel/run actions) is
required. Multiple GitLab instances are supported — the host is taken from each repo's git
remote, and tokens are stored per host, so gitlab.com and a private gitlab.company.com in the
same workspace each get their own. It is resolved from the first source that has it, most secure
first:
- Sign in via the web (easiest). Run “GitLab CI: Sign in to GitLab (Web)” (or click Sign
in to GitLab in the panel when it is empty). It opens the host's token-creation page in your
browser with the name and scope pre-filled — click Create and paste the token back. Works on
any GitLab instance.
- VS Code Secret Storage. Run “GitLab CI: Set GitLab Token (Secret Storage)” from the
Command Palette (it asks which host if you have several) and paste the token. It is stored in the
OS keychain, never in a file. Use “Clear GitLab Token (Secret Storage)” to remove it.
settings.json — a legacy plaintext "token": "<pat>" under your host still works, but is
discouraged. If one is present and Secret Storage has none, the extension copies it into Secret
Storage on startup and tells you that you can delete the plaintext entry.
GITLAB_TOKEN environment variable — used when VS Code is launched from a shell where it is
exported. Handy for keeping the token out of any settings file entirely.
Commands
All commands are under the GitLab CI category in the Command Palette:
| Command |
What it does |
| Refresh |
Re-poll every watched repository now. |
| Sign in to GitLab (Web) |
Open the host's token page (name + scope pre-filled) in the browser, then paste the token. |
| Set GitLab Token (Secret Storage) |
Store a token for a host in the OS keychain. |
| Clear GitLab Token (Secret Storage) |
Remove a stored token for a host. |
| Retry / Cancel pipeline |
Also available as inline buttons in the tree. |
| View job log |
From a job's context menu; opens a cleaned, read-only trace. |
| Open in GitLab |
Click a pipeline or job. |
Development
npm install # dev dependencies only — the extension has zero runtime deps
npm run compile # type-check and build the extension into out/
npm run lint # ESLint (flat config, typescript-eslint)
npm run format # apply Prettier; npm run format:check verifies formatting
npm test # run the unit suite (node:test) — see test/
CI (GitHub Actions) runs lint, format check, type-check, tests, and a dependency audit on
every push. ESLint owns code quality and Prettier owns formatting (eslint-config-prettier
keeps them from fighting).
Releasing
Pushing a SemVer tag that matches package.json (e.g. v0.1.7) triggers the
release workflow: it re-runs the full quality gate, builds
the .vsix with @vscode/vsce, and attaches it to a generated GitHub Release.
Publishing to the marketplaces is opt-in — each publish step runs only when its token
secret is configured in the repository:
| Secret |
Publishes to |
VSCE_PAT |
VS Code Marketplace (vsce publish) |
OVSX_PAT |
Open VSX (ovsx publish) |
npm run package # build a .vsix locally (same command the release job runs)
The pure, VS Code-independent logic (git-remote parsing, log cleaning, job ordering, the
GitLab HTTP client) lives in dedicated modules and is covered by npm test; the runner is
Node's built-in node:test, so there are no extra test dependencies.
Credits
Derived from gitlab-pipelines by jameswain, licensed under ISC.
License
ISC