{"id":19635859,"url":"https://github.com/tozd/gitlab-release","last_synced_at":"2026-05-13T01:02:21.163Z","repository":{"id":82333860,"uuid":"437545655","full_name":"tozd/gitlab-release","owner":"tozd","description":"Sync tags in your git repository and a changelog in Keep a Changelog format with releases of your GitLab project. Read-only mirror of https://gitlab.com/tozd/gitlab/release","archived":false,"fork":false,"pushed_at":"2026-03-08T10:45:04.000Z","size":271,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-08T14:26:33.101Z","etag":null,"topics":["gitlab","release","release-automation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tozd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["plast8","mitar"]}},"created_at":"2021-12-12T12:56:54.000Z","updated_at":"2026-03-08T10:45:08.000Z","dependencies_parsed_at":"2023-10-05T04:59:46.641Z","dependency_job_id":"4f6a6282-9c7b-4917-ade3-941a7ca8a721","html_url":"https://github.com/tozd/gitlab-release","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/tozd/gitlab-release","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tozd%2Fgitlab-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tozd%2Fgitlab-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tozd%2Fgitlab-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tozd%2Fgitlab-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tozd","download_url":"https://codeload.github.com/tozd/gitlab-release/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tozd%2Fgitlab-release/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32963174,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T23:30:32.555Z","status":"ssl_error","status_checked_at":"2026-05-12T23:30:18.191Z","response_time":102,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gitlab","release","release-automation"],"created_at":"2024-11-11T12:27:17.850Z","updated_at":"2026-05-13T01:02:21.127Z","avatar_url":"https://github.com/tozd.png","language":"Go","funding_links":["https://github.com/sponsors/plast8","https://github.com/sponsors/mitar"],"categories":[],"sub_categories":[],"readme":"# Automatic GitLab releases\n\n[![Go Report Card](https://goreportcard.com/badge/gitlab.com/tozd/gitlab/release)](https://goreportcard.com/report/gitlab.com/tozd/gitlab/release)\n[![pipeline status](https://gitlab.com/tozd/gitlab/release/badges/main/pipeline.svg?ignore_skipped=true)](https://gitlab.com/tozd/gitlab/release/-/pipelines)\n[![coverage report](https://gitlab.com/tozd/gitlab/release/badges/main/coverage.svg)](https://gitlab.com/tozd/gitlab/release/-/graphs/main/charts)\n\nSync tags in your git repository and a changelog in [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nformat with [releases of your GitLab project](https://about.gitlab.com/releases/categories/releases/).\n\nFeatures:\n\n- Extracts description of each release entry in a changelog in [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format\n  and creates or updates a corresponding\n  [GitLab release](https://about.gitlab.com/releases/categories/releases/).\n- Any deleted release entry in a changelog removes a corresponding GitLab release, too.\n  But consider instead marking a release in the changelog as `[YANKED]`.\n- Automatically associates milestones, packages, and Docker images with each release.\n- Makes sure your changelog can be parsed as a Keep a Changelog.\n- Makes sure all release entries in your changelog have a corresponding git tag and\n  all git tags have a corresponding release entry in your changelog.\n- Can run as a CI job.\n\n## Installation\n\n[Releases page](https://gitlab.com/tozd/gitlab/release/-/releases)\ncontains a list of stable versions. Each includes:\n\n- Statically compiled binaries.\n- Docker images.\n\nYou should just download/use the latest one.\n\nThe tool is implemented in Go. You can also use `go install` to install the latest stable (released) version:\n\n```sh\ngo install gitlab.com/tozd/gitlab/release/cmd/gitlab-release@latest\n```\n\nTo install the latest development version (`main` branch):\n\n```sh\ngo install gitlab.com/tozd/gitlab/release/cmd/gitlab-release@main\n```\n\n## Usage\n\nThe tool operates automatically and uses defaults which makes it suitable\nto run inside the GitLab CI environment. To see configuration options available,\nrun\n\n```sh\ngitlab-release --help\n```\n\nYou can provide some configuration options as environment variables.\n\nThe only required configuration option is the [access token](https://docs.gitlab.com/ee/api/index.html#personalproject-access-tokens)\nwhich you can provide with `-t/--token` command line flag\nor `GITLAB_API_TOKEN` environment variable.\nUse a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)\nor [project access token](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html) with `api` scope\nand permission to manage releases\n(at least [developer level](https://docs.gitlab.com/ee/user/project/releases/#release-permissions)\nand if you use [protected tags](https://docs.gitlab.com/ee/user/project/protected_tags.html),\nthe token\n[must be allowed to create protected tags](https://docs.gitlab.com/ee/user/project/protected_tags.html#configuring-protected-tags),\ntoo).\n\nThe tool automatically associates:\n\n- milestones: if the release version matches the title of the milestone;\n  each release can have multiple milestones; each milestone can be associated with multiple releases\n- generic packages: if the release version matches generic package's version all files contained inside the generic package\n  are associated with the release\n- other packages: if the release version matches package's version\n- Docker images: if the release version matches the full Docker image name\n\nVersion matching is done by searching if the target string contains the version string, with\nand without `v` prefix, and with version slugified and not.\n\n### GitLab CI configuration\n\nYou can add to your GitLab CI configuration a job like:\n\n```yaml\nsync_releases:\n  stage: deploy\n\n  image:\n    name: registry.gitlab.com/tozd/gitlab/release/branch/main:latest-debug\n    entrypoint: [\"\"]\n\n  script:\n    - /gitlab-release ${CI_COMMIT_BRANCH:+--no-create}\n\n  rules:\n    - if: '$GITLAB_API_TOKEN \u0026\u0026 ($CI_COMMIT_BRANCH == \"main\" || $CI_COMMIT_TAG)'\n```\n\nNotes:\n\n- Job runs only when `GITLAB_API_TOKEN` is present (e.g., only on protected branches)\n  and only on the `main` branch (e.g., one with the latest stable version of the changelog) or\n  when the repository is tagged. Change to suit your needs.\n- Configure `GITLAB_API_TOKEN` as [GitLab CI/CD variable](https://docs.gitlab.com/ee/ci/variables/index.html).\n  Protected and masked.\n- The example above uses the latest version of the tool from the `main` branch.\n  Consider using a Docker image corresponding to the\n  [latest released stable version](https://gitlab.com/tozd/gitlab/release/-/releases).\n- Use of `-debug` Docker image is currently required.\n  See [this issue](https://gitlab.com/tozd/gitlab/release/-/issues/4) for more details.\n- `${CI_COMMIT_BRANCH:+--no-create}` configures the tool on branch jobs to just update\n  or remove releases. Releases are then created only on tag jobs. (GitLab runs two CI\n  jobs when pushing a commit with a tag, a branch job and a tag job.)\n\n## Releases maintained using this tool\n\nTo see how releases look when maintained using this tool, check out these\nprojects:\n\n- [This project itself](https://gitlab.com/tozd/gitlab/release/-/releases)\n- [gitlab-config tool](https://gitlab.com/tozd/gitlab/config/-/releases)\n- [`gitlab.com/tozd/go/errors` Go package](https://gitlab.com/tozd/go/errors/-/releases)\n- [dinit](https://gitlab.com/tozd/dinit/-/releases)\n\n_Feel free to make a merge-request adding yours to the list._\n\n## Related projects\n\n- [Release CLI](https://gitlab.com/gitlab-org/release-cli) – A tool made by GitLab itself\n  and is able to use instructions from `.gitlab-ci.yml` to create releases.\n  It requires for a release to be explicitly defined through arguments which are then passed\n  on to the API.\n  This tool on the other hand determines everything defining a release automatically\n  (description from a changelog, milestones, packages, Docker images).\n  Moreover it updates existing releases as well, if their definitions change.\n\n## GitHub mirror\n\nThere is also a [read-only GitHub mirror available](https://github.com/tozd/gitlab-release),\nif you need to fork the project there.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftozd%2Fgitlab-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftozd%2Fgitlab-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftozd%2Fgitlab-release/lists"}