Slipway supports both GitHub and GitLab. Each slipway organization is anchored on exactly one upstream — a GitHub installation or a GitLab group. If you have repos on both, link them separately; you’ll end up with one slipway org per provider account.Documentation Index
Fetch the complete documentation index at: https://docs.slipway.sh/llms.txt
Use this file to discover all available pages before exploring further.
Only gitlab.com is supported today. Self-hosted GitLab instances are on the roadmap but ship behind a dedicated security workstream.
Operator setup
To enable the GitLab sign-in surface, the slipway operator registers an OAuth application on gitlab.com and supplies the credentials to slipway-master.- Sign in to gitlab.com and go to User Settings → Applications.
-
Create a new application with:
- Name:
slipway(anything you’ll recognize) - Redirect URI:
https://<your-slipway-host>/api/auth/gitlab/callback - Scopes:
api,read_user,read_repository - Confidential: checked
- Name:
-
Copy the Application ID and Secret into slipway-master’s environment:
- Restart slipway-master. The login page will now show Continue with GitLab alongside GitHub.
/api/auth/gitlab/start returns 400.
Connecting a group
Once OAuth is configured, end users connect a GitLab group as follows:- From the login page (or the sidebar “Add an organization” button), click Continue with GitLab.
- Authorize the slipway application in gitlab.com.
- Slipway redirects to
/gitlab/setupand lists every group where you have at least Maintainer (access level 40). - Pick a group. Slipway:
- Mints a group access token named
slipwaywithapi,read_repository, andwrite_repositoryscopes, valid for 365 days. - Registers a group webhook on
/webhooks/gitlabsubscribed to Push, Merge Request, and Subgroup events. A unique random token is stored on the installation row and used to authenticate every incoming webhook. - Creates a new slipway organization tagged as a GitLab provider org.
- Ingests every project under the group (including subgroups), excluding archived projects.
- Mints a group access token named
/{slug}/repos with the projects ready to enable.
You must be Maintainer or higher on the group. Slipway can’t mint a group access token from a Developer or Reporter role; the connect step will fail with that error message and a hint to ask a group owner to invite you as Maintainer.
Deployment surface
Once a project is enabled in slipway, GitLab-backed repos work the same way GitHub-backed repos do:- Push to the default branch — triggers a deploy via the group webhook.
- Open / update / close a Merge Request — slipway treats MRs like GitHub PRs:
- On
openandreopen: spins up a preview environment (the project must haveslipway.yaml). - On
update(synchronize): redeploys the existing preview at the new HEAD SHA. - On
close(whether merged or not): tears the preview down.
- On
- Commit statuses — slipway posts a commit status to the MR’s head SHA. GitLab upserts statuses by
(sha, name); slipway re-posts on each deployment phase change (running → success/failed). - MR notes — on terminal states (live, failed, torn down, rebuilding) slipway posts (and edits in place) a comment on the MR with the preview URLs.
Webhooks and tokens
| Concern | GitHub | GitLab |
|---|---|---|
| Webhook secret scope | one app-wide secret | one per installation (per group) |
| Webhook auth header | X-Hub-Signature-256 (HMAC) | X-Gitlab-Token (bearer compare) |
| Repo token | installation access token (1 hour) | group access token (365 days) |
| Token rotation | automatic via App JWT | scheduled (daily rotator, refreshes tokens within 14 days of expiry) |
Nested groups
GitLab supports nested groups (e.g.acme/backend/api). Slipway uses last-slash semantics when splitting a project’s full path, so nested groups round-trip without data loss. The connect step’s include_subgroups=true flag ingests every project below the chosen group, however deep the nesting.
Differences from GitHub
A handful of small behaviors differ from the GitHub path:- No install picker. GitHub’s App install flow shows a “pick a target” screen on github.com; GitLab uses a group picker rendered by slipway at
/gitlab/setup. The UX shape matches but the round-trip is different. - No App suspension state. GitLab groups can revoke a group access token at any time. Slipway treats the row as connected until an actual API call fails; there’s no equivalent of GitHub’s “suspended” badge.
- Avatar URL. GitHub avatars come from
https://github.com/{login}.png— a stable derived URL. GitLab doesn’t have an equivalent; the slipway sidebar falls back to the signed-in user’s avatar for GitLab orgs.