Skip to content

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/latest

Note: The project path is URL-encoded (owner/repo becomes owner%2Frepo).

Headers

HeaderValue
Acceptapplication/json
User-Agentupdater.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

FeatureSupported
Latest releaseYes
PrereleasesYes (upcoming_release)
DraftsNo
AssetsNot parsed
Release notesYes (description)

Differences from GitHub

AspectGitLabGitHub
Project pathURL-encodedPath segments
Release URL_links.selfhtml_url
Prereleaseupcoming_releaseprerelease
Descriptiondescriptionbody
Timestampreleased_atpublished_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

Released under the MIT License.