Local GitLab Pipelines
A VS Code desktop extension that uses the locally installed glab CLI to show GitLab pipelines for repositories in your workspace.
Install and run
- Install and authenticate
glab on your local computer: glab auth login --hostname gitlab.example.com (use gitlab.com for GitLab.com).
- Install the
.vsix using Extensions → … → Install from VSIX… in desktop VS Code. Install it locally when working with a Dev Container.
- Open Source Control in the Activity Bar, then expand the GitLab Pipelines section. Click its header to collapse or expand it, just like the Source Control Graph section.
- Expand a pipeline to see its stages and jobs. Click a job to open it in GitLab. The external-link action on a pipeline opens its associated merge request, or the pipeline when no merge request is found. If the lookup fails, it opens the pipeline and logs the fallback in the extension output.
If VS Code cannot find glab, set the User setting localGlab.executablePath to its absolute local path, such as /opt/homebrew/bin/glab on an Apple Silicon Mac. Authenticate separately for each GitLab host you use.
The extension does not store access tokens, run a shell, or modify repositories or pipelines. All API calls use glab api with an explicit host and project path.
Tree and refresh
Repositories start expanded. Active mode lists pipelines with running, pending, created, preparing, or waiting-for-resource status. If a repository has no active pipelines, its latest pipeline is shown instead, regardless of status. Expand a pipeline to load stages and jobs, including trigger jobs. Stages start expanded and display aggregate status, while each job displays its own status.
The Toggle Active / Recent Pipelines toolbar action includes finished pipelines, defaulting to the latest 20 per repository. This preference is saved per workspace. Switch to recent mode to inspect older completed pipelines.
Refresh runs every 30 seconds while the view is visible. Use Refresh Pipelines for an immediate update. Use Rescan Workspace Repositories after adding repositories or changing remotes; adding or removing workspace folders also triggers discovery. Errors are shown under the affected repository; other repositories still load.
Repository discovery and Dev Containers
The workspace root and folders two levels below each root are searched, including nested repositories inside another repository. Multi-root workspaces are supported and overlapping results are deduplicated. Ordinary .git directories, submodule .git files, and linked worktrees with readable Git metadata are supported. origin is preferred, with another supported remote used as a fallback. HTTPS, SSH, and SCP-style remote URLs work, including nested GitLab groups.
The manifest sets extensionKind to ["ui"], keeping the extension and glab on your local desktop even with Dev Containers or Remote SSH. Repository metadata is read with vscode.workspace.fs, which accesses the workspace filesystem across the remote connection. There is no need for a matching local checkout or glab inside the container. If a user override forces remote execution, activation is refused.
The remote filesystem must expose .git/config and any referenced worktree metadata. A worktree pointer to a host-only path that is inaccessible inside a container cannot be resolved. Git config include, includeIf, URL rewrite rules, and automatic SSH config alias resolution are not evaluated; use localGlab.hostAliases for SSH aliases. Known GitHub and Bitbucket remotes are skipped; other hosts are attempted as GitLab hosts.
This requires desktop VS Code and a trusted workspace. Browser-only VS Code cannot launch a local CLI. Stage order is inferred from job creation IDs because the REST jobs endpoint does not expose CI stage positions; retries or dynamically created jobs may affect ordering. Trigger jobs link to GitLab; downstream pipelines are not recursively expanded.
Settings
| Setting |
Default |
Purpose |
localGlab.executablePath |
glab |
Local CLI path, set in User settings |
localGlab.discoveryDepth |
2 |
Search depth below each workspace root |
localGlab.refreshInterval |
30 |
Refresh seconds; 0 disables polling |
localGlab.recentPipelineLimit |
20 |
Recent pipelines per repository |
localGlab.excludedFolders |
Dependency and build folders |
Folder names excluded from discovery |
localGlab.hostAliases |
{} |
SSH alias → GitLab API host mapping |
Symbolic-link directories are skipped to prevent traversal loops. Active pipelines and jobs are paginated, so the recent-pipeline limit does not hide active runs or jobs.
Development
npm ci
npm test
npm run package
Press F5 in VS Code to launch an Extension Development Host. Tests cover repository depth, overlapping roots, worktree and submodule pointers, remote parsing, API pagination, status grouping, and local-host manifest configuration.
Manual smoke test: authenticate local glab, open a workspace containing root/child/grandchild repositories, check active and recent modes, expand a pipeline, and open a job. Repeat with a Dev Container and verify Developer: Show Running Extensions lists this extension on the local host. Check the explicit path setting, an unauthenticated host, and refresh after a pipeline completes.