GitLab Provider
The GitLab provider uses the GitLab REST API v4 to fetch release information.
Usage
zig
const updater = @import("updater");
// Quick check
const result = try updater.checkGitLab(allocator, "owner", "repo", "1.0.0");
// Full configuration
const result = try updater.checkForUpdates(allocator, .{
.provider = updater.providers.gitlab,
.owner = "owner",
.repo = "repo",
.current_version = "1.0.0",
});API Details
Endpoint
GET https://gitlab.com/api/v4/projects/{owner}%2F{repo}/releases/permalink/latestNote: The project path is URL-encoded (owner/repo becomes owner%2Frepo).
Headers
| Header | Value |
|---|---|
| Accept | application/json |
| User-Agent | updater.zig/0.0.1 |
Response Format
json
{
"tag_name": "v1.0.0",
"name": "Release 1.0.0",
"description": "Release notes...",
"released_at": "2024-01-15T12:00:00Z",
"upcoming_release": false,
"_links": {
"self": "https://gitlab.com/owner/repo/-/releases/v1.0.0"
}
}Self-hosted GitLab
For self-hosted GitLab instances:
zig
const myGitlab = updater.providers.selfHostedGitlab("https://gitlab.mycompany.com");
const result = try updater.checkForUpdates(allocator, .{
.provider = myGitlab,
.owner = "team",
.repo = "project",
.current_version = "1.0.0",
});Authentication
For private projects, add a personal access token:
zig
const private_gitlab = updater.providers.custom(
"gitlab-private",
buildGitlabUrl,
parseGitlabResponse,
&[_]updater.HttpHeader{
.{ .name = "Accept", .value = "application/json" },
.{ .name = "PRIVATE-TOKEN", .value = "glpat-YOUR_TOKEN" },
},
);Rate Limits
GitLab.com has rate limits:
- Unauthenticated: 500 requests/minute
- Authenticated: 2000 requests/minute
Self-hosted limits depend on configuration.
Features
| Feature | Supported |
|---|---|
| Latest release | Yes |
| Prereleases | Yes (upcoming_release) |
| Drafts | No |
| Assets | Not parsed |
| Release notes | Yes (description) |
Differences from GitHub
| Aspect | GitLab | GitHub |
|---|---|---|
| Project path | URL-encoded | Path segments |
| Release URL | _links.self | html_url |
| Prerelease | upcoming_release | prerelease |
| Description | description | body |
| Timestamp | released_at | published_at |
Troubleshooting
404 Not Found
- Project does not exist
- Project is private and no auth provided
- No releases exist
401 Unauthorized
- Invalid or expired token
- Token lacks required scope