{"id":19001123,"url":"https://github.com/wemake-services/kira-release","last_synced_at":"2025-06-30T10:33:26.767Z","repository":{"id":35647871,"uuid":"176270834","full_name":"wemake-services/kira-release","owner":"wemake-services","description":":chipmunk: Kira's micro-bot to release your code and track changes","archived":false,"fork":false,"pushed_at":"2025-06-16T07:40:23.000Z","size":983,"stargazers_count":5,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-22T12:30:58.719Z","etag":null,"topics":["bot","gitlab","gitlab-bot","gitlab-ci","kira-bot","rsdp","wemake-services"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/wemakeservices/kira-release","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wemake-services.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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},"funding":{"github":"wemake-services","custom":"https://boosty.to/sobolevn"}},"created_at":"2019-03-18T11:39:51.000Z","updated_at":"2025-06-16T07:40:20.000Z","dependencies_parsed_at":"2024-01-29T10:10:15.198Z","dependency_job_id":"e9ce1aae-1b90-4760-a071-2b37b7020b0b","html_url":"https://github.com/wemake-services/kira-release","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/wemake-services/kira-release","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wemake-services%2Fkira-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wemake-services%2Fkira-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wemake-services%2Fkira-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wemake-services%2Fkira-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wemake-services","download_url":"https://codeload.github.com/wemake-services/kira-release/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wemake-services%2Fkira-release/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262158224,"owners_count":23267899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bot","gitlab","gitlab-bot","gitlab-ci","kira-bot","rsdp","wemake-services"],"created_at":"2024-11-08T18:10:03.615Z","updated_at":"2025-06-30T10:33:26.745Z","avatar_url":"https://github.com/wemake-services.png","language":"JavaScript","funding_links":["https://github.com/sponsors/wemake-services","https://boosty.to/sobolevn"],"categories":[],"sub_categories":[],"readme":"# Kira Release Bot\n\n[![wemake.services](https://img.shields.io/badge/%20-wemake.services-green.svg?label=%20\u0026logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake.services)\n[![kira-family](https://img.shields.io/badge/kira-family-pink.svg)](https://github.com/wemake-services/kira)\n[![test](https://github.com/wemake-services/kira-release/actions/workflows/test.yml/badge.svg?branch=master\u0026event=push)](https://github.com/wemake-services/kira-release/actions/workflows/test.yml)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n[![Dependencies Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen.svg)](https://github.com/wemake-services/kira-release/pulls?utf8=%E2%9C%93\u0026q=is%3Apr%20author%3Aapp%2Fdependabot)\n\nAutomate routine work with releasing new versions.\n\nPart of the [`@kira`](https://github.com/wemake-services/kira) bots family.\n\n## Release steps\n\nSo, when the time to release comes our bot:\n\n1. calculates a new semantic version since the last tagged release,\n2. summarizes the release notes from these commits,\n3. creates a signed GitLab release,\n4. creates a changelog entry, commits it to the project,\n5. tags a new release with the newly calculated version number,\n6. optionally uploads new `docker` images to GitLab registry\n\nInternally we use [`semantic-release`](https://github.com/semantic-release/semantic-release).\nWith multiple plugins.\n\n## How does it work?\n\nEvery commit is validated to be compatible to [`conventional-changelog`](https://github.com/conventional-changelog)\nformat (here's [our format](https://github.com/wemake-services/kira-setup/blob/master/kira_setup/pipelines/project.py#L7) just for example):\n\n```js\n/^(revert: )?(feat|fix|docs|refactor|chore)(\\(.+\\))?:.{1,50}refs #\\d+/\n```\n\nHowever, we **do not** enforce any particular format with this project.\nYou are free to choose any existing or create your own.\n\nWe also recommend to enforce this format in [Gitlab's push rules](https://docs.gitlab.com/ee/push_rules/push_rules.html#commit-messages-with-a-specific-reference).\n\nIn this case I won't be able to push incorrect commit messages:\n\n```\n» git push\nCounting objects: 3, done.\nDelta compression using up to 4 threads.\nCompressing objects: 100% (3/3), done.\nWriting objects: 100% (3/3), 692 bytes | 692.00 KiB/s, done.\nTotal 3 (delta 2), reused 0 (delta 0)\nremote: GitLab: Commit message does not follow the pattern '/^(revert: )?(feat|fix|docs|refactor|chore) ...'\n```\n\n## Gitlab CI setup\n\nIt is recommended to use this bot as a part of your CI.\nThere are two possible ways to release your software:\n\n1. On every push to `master` (we consider `master` branch protected by default)\n2. Manually by setting up [`manual` CI jobs](https://docs.gitlab.com/ee/ci/yaml/#whenmanual)\n\n### Extra settings\n\nThey are not required, but may help you:\n\n0. Invite `@kira-bot` to your project\n1. All [tags must be protected](https://docs.gitlab.com/ee/user/project/protected_tags.html), only `@kira-bot` is allowed to create them\n2. [`master` branch must be protected](https://docs.gitlab.com/ee/user/project/protected_branches.html), only `@kira-bot` is allowed to push\n\n### CI variables\n\nYou are required to set:\n\n- `GITLAB_TOKEN` secret variable in CI configuration\n\nYou can also optionally set:\n\n- `KIRA_RELEASE_SKIP_DOCKER` to `'true'`, so your `docker` image deploy will be skipped\n- `KIRA_INCLUDE_COMMENTS` one of `['all', 'issue', 'mergeRequest', 'off']` values when and where to post a comment on release, default: `'off'`\n- `KIRA_RELEASE_ASSETS` to any [assets](https://github.com/semantic-release/git#assets) string, so it will upload these files to GitLab release\n- `KIRA_RELEASE_EXEC_CONFIG` string with `json` config to pass to [`@semantic-release/exec`](https://github.com/semantic-release/exec). Related docs on [why](https://semantic-release.gitbook.io/semantic-release/support/faq#how-can-i-use-a-npm-build-script-that-requires-the-package-jsons-version) would you possibly need this\n- `KIRA_RELEASE_REPLACE_CONFIG` string with `json` config of how to [bump version numbers](https://github.com/google/semantic-release-replace-plugin) in a project definition file, example: `KIRA_RELEASE_REPLACE_CONFIG='{ \"project\": \"package.json\", \"from\": \"\\\"version\\\": \\\".*\\\"\", \"to\": \"\\\"version\\\": \\\"${nextRelease.version}\\\"\" }'`\n- `KIRA_RELEASE_BRANCHES` [to semantic release branches](https://semantic-release.gitbook.io/semantic-release/usage/configuration#branches) default: `['master',  'main']`\n- `GITLAB_URL` to change the GitLab location, see [semantic-release-gitlab docs](https://github.com/semantic-release/gitlab?tab=readme-ov-file#options), default: `'https://gitlab.com'`\n\n**Note:** You might want to use `$$` to escape `$` char in several environments like GitLab CI configuration file\n\n\n## Container release\n\nWe use five ebv variables to publish pre-built containers into the registry.\nBasically, this is ready to work with GitLab CI and GitLab Container registry,\nbut you can modify it to work with any registry / CI.\nFor example, we use GitHub Container Registry in this project's CI\n(see `.github/workflows/test.yml`).\n\nVariables:\n- `CI_REGISTRY`: what registry you use: `registry.gitlab.com`, `ghrc.io`, or any other\n- `CI_REGISTRY_USER`: username to use for login\n- `CI_JOB_TOKEN`: the token we use to auth, can be any token that your registry supports\n- `CI_PROJECT_NAMESPACE`: organization name to use in image name\n- `CI_PROJECT_NAME`: project name to use in image name\n\n\n## Running\n\nCopy-paste our `.gitlab-ci.yml` file. And modify it to match your project.\n\n\n## Credis\n\nSpecial thanks to:\n- [`semantic-release-gitlab-docker`](https://gitlab.com/foxfarmroad/semantic-release-gitlab-docker) which we used before creating our own `GitLab` + `docker` release script\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwemake-services%2Fkira-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwemake-services%2Fkira-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwemake-services%2Fkira-release/lists"}