-
Notifications
You must be signed in to change notification settings - Fork 0
GitLab Support
v1 scope: GitHub.com plus self-managed GitLab CE/Free, exactly >= 19.2.4 < 19.3.0. GitLab evidence flows through the authenticated glab CLI (≥ 1.113.0), exactly as GitHub evidence flows through gh. One CLI, one harness, two forges — the platform is declared, never guessed.
specgit init --gitlab-host git.example.com # bare hostname
specgit init --gitlab-host git.example.com:8443 # non-default portThe declaration persists in spec_git/providers.yaml and is committed, so the team shares it. A github.com origin needs no declaration. Authentication is per host:
glab auth login --hostname git.example.com
glab auth status --hostname git.example.comEnvironment contract (mirroring the GitHub side): SPECGIT_GLAB (executable path) and SPECGIT_GLAB_TIMEOUT_MS (default 15000; timeout ⇒ glab_transport, exit 3).
- Self-managed GitLab is supported at exactly
>= 19.2.4 < 19.3.0, CE/Free tier. Known-good anchor: thev19.2.4-eerelease tag. - Any version outside the range fails closed:
gitlab_version_unsupported, exit 3. The window moves only through an explicit rebaseline delivery — never silent drift. - The
-ee/-cesuffix is a release-channel marker, not semver pre-release semantics: version comparison strips the suffix first, then compares thex.y.ztriple. - Version discovery uses the authenticated metadata endpoint (
glab api /metadata);metadata.enterpriseis informational only, never a gate input. - glab floor: 1.113.0.
- GitLab.com (SaaS) is judged by capability probing, never version pinning — any probe failure ⇒ verdict
unknown(exit 3).
| Aspect | GitHub (gh) |
GitLab (glab) |
|---|---|---|
| Pull request | Pull request | Merge request, created with the Draft: title prefix |
| Origin grammar | owner/repo |
group[/subgroup…]/project, depth 2–5, %2F-encoded separators supported |
| Harness |
.github/workflows/specgit-accept.yml generated by init
|
No GitHub workflow written (gitlab_harness_pending); bring your own .gitlab-ci.yml — its top-level job keys are detected as required checks |
| Check runs | GitHub check runs on the PR head | Pipeline jobs mapped to checks: job name = check name; skipped produces no check run; a failed allow_failure job passes the gate per pipeline semantics; non-final statuses read as pending, fail-closed |
| Required checks truth | Required status checks | The verified intersection of the policy list with the latest pipeline's job names when only_allow_merge_if_pipeline_succeeds is on; Ultimate-only status-check primitives are never used |
| Closing references | Full GitHub grammar | Common subset: Closes #<iid>, Fixes #<iid> — valid on both platforms |
| Project identity | owner/repo |
Full path URL-encoded (/ → %2F) as :id, verified by numeric project id + path comparison |
| Undeclared origin | n/a |
gitlab_unsupported fails closed at every depth |
specgit finish on a declared GitLab origin evaluates all eleven gates through glab; the specgit issue bootstrap works against GitLab (draft MR after branch push, common-subset closing references). Diagnostic codes follow the platform CLI: glab_missing, glab_unauthenticated, glab_transport, gitlab_version_unsupported.
- Mirror the seam, do not fork the gates. Acceptance evaluation is platform-agnostic; only evidence collection is platform-specific.
- One CLI per platform, authenticated, no tokens in state or logs. No direct REST clients.
-
Fail-closed carries over. Missing glab, unauthenticated glab, an out-of-range server version, or an unreachable instance yields
unknown, neveraccepted. A silently partial paginated list is never consumed (evidence_truncated, exit 3). - Free-tier primitives only, honestly reported. Ultimate-only features are excluded forever.
- No cross-platform deliveries (one delivery, one platform, one PR/MR).
- No token storage:
glabowns credentials, same asgh. - No support for versions outside
>= 19.2.4 < 19.3.0(self-managed) without a rebaseline delivery; no Ultimate-tier primitives, ever. - GitHub Enterprise is declaration-and-diagnostics only (non-goal for v1).
Chinese version: GitLab-Support-zh