{"id":24228638,"url":"https://github.com/volkanto/yaba","last_synced_at":"2026-04-02T00:25:36.556Z","repository":{"id":38416045,"uuid":"364950123","full_name":"volkanto/yaba","owner":"volkanto","description":"A simple CLI tool that helps you manage releases of your GitHub projects.","archived":false,"fork":false,"pushed_at":"2024-12-12T22:14:12.000Z","size":419,"stargazers_count":11,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-12T23:22:39.338Z","etag":null,"topics":["bash","build","build-tool","changelog","changelog-generator","cli","command-line","command-line-tool","github","github-api","github-cli","github-release","github-tags","nodejs","nodejs-cli","nodejs-cli-command","npm","npm-package","release-automation","tags"],"latest_commit_sha":null,"homepage":"","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/volkanto.png","metadata":{"files":{"readme":"README.md","changelog":null,"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},"funding":{"github":"volkanto"}},"created_at":"2021-05-06T15:07:30.000Z","updated_at":"2024-12-12T22:14:15.000Z","dependencies_parsed_at":"2023-02-13T02:00:58.091Z","dependency_job_id":"3391d111-464a-4cfc-bd06-0f31f33f23b6","html_url":"https://github.com/volkanto/yaba","commit_stats":{"total_commits":86,"total_committers":4,"mean_commits":21.5,"dds":0.5813953488372092,"last_synced_commit":"dc3fece337581cd2c10485cb81ebab86b7d58349"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volkanto%2Fyaba","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volkanto%2Fyaba/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volkanto%2Fyaba/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volkanto%2Fyaba/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/volkanto","download_url":"https://codeload.github.com/volkanto/yaba/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233884356,"owners_count":18745389,"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":["bash","build","build-tool","changelog","changelog-generator","cli","command-line","command-line-tool","github","github-api","github-cli","github-release","github-tags","nodejs","nodejs-cli","nodejs-cli-command","npm","npm-package","release-automation","tags"],"created_at":"2025-01-14T11:18:01.039Z","updated_at":"2026-04-02T00:25:36.543Z","avatar_url":"https://github.com/volkanto.png","language":"JavaScript","funding_links":["https://github.com/sponsors/volkanto"],"categories":[],"sub_categories":[],"readme":"# Yaba GitHub Release CLI \n\n**Yaba** is a simple CLI tool that helps you manage releases of your GitHub projects.\n\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/volkanto/yaba/codeql-analysis.yml)\n[![version](https://img.shields.io/npm/v/yaba-release-cli.svg?style=flat-square)](https://npmjs.org/yaba-release-cli)\n[![dependancies](https://img.shields.io/librariesio/release/npm/yaba-release-cli?color=%23007a1f\u0026style=flat-square)](https://libraries.io/npm/yaba-release-cli)\n[![downloads](https://img.shields.io/npm/dm/yaba-release-cli?style=flat-square\u0026color=%23007a1f)](https://npmcharts.com/compare/yaba-release-cli)\n[![license](https://img.shields.io/npm/l/yaba-release-cli?color=%23007a1f\u0026style=flat-square)](https://github.com//volkanto/blob/master/LICENSE)\n\n## Documentation\n\n- [Architecture](./docs/architecture.md)\n- [Development Guide](./docs/development.md)\n- [GitHub Pages Site](https://volkanto.github.io/yaba/)\n\n## Prerequisites\n\nYou need `npm` in order to run the project on your local environment.\n\n## Installing / Updating / Uninstalling\n\nTo install CLI package globally:\n\n```shell\nnpm i -g yaba-release-cli\n```\n\nTo Update:\n\n```shell\nnpm update -g yaba-release-cli\n```\n\nTo uninstall:\n\n```shell\nnpm uninstall -g yaba-release-cli\n```\n\n## Setup\n\n### Create Personal Access Token\n\nGo to [Personal Access Tokens](https://github.com/settings/tokens) page on GitHub and generate new token to\nenable `yaba` CLI to access your repos.\n\n* Give your desired name to your personal access token with `Note` section.\n* Choosing `repo` scope is enough to use `yaba` CLI tool.\n\nNow, your personal access token is generated. Copy that token and define that one as an environment variable:\n\n```shell\nexport YABA_GITHUB_ACCESS_TOKEN=generated_personal_access_token\n```\n\nYou can define that env variable into `~/.bashrc`, `~/.bash_profile` or `~/.zshrc` file, choose which one is suitable\nfor you. After defining the env variable, open new terminal or simply run `source ~/.zshrc`(here again choose where you\ndefined your env variable).\n\nIf the repository owner is another GitHub account or organisation, you can define that like below instead of passing the\nowner to the command in every run.\n\n```shell\nexport YABA_GITHUB_REPO_OWNER=repository_owner\n```\n\nAlways `-o` or `--owner` has precedence over authenticated user. Presendence is\nlike `-o \u003e GITHUB_REPO_OWNER \u003e authenticated-user`.\n\n### Slack Integration\n\nIf you want to announce your release/changelog to the specific Slack channel, you have to define below environment\nvariable with the appropriate value.\n\n```shell\nexport YABA_SLACK_HOOK_URL=your_slack_hook_url\n```\n\nAlso, multiple hook URLs allowed to be defined like below:\n\n```shell\nexport YABA_SLACK_HOOK_URL=your_slack_hook_url_1,your_slack_hook_url_2,...\n```\n\nIf the above variable is set and the `-p` command given while running the command, an announcement will be post to the\ngiven Slack channel. You can find detailed information in the [Command Line Usage](#command-line-usage) section.\n\n```shell\nyaba release create -p\n```\n\nSlack publish now retries transient failures with exponential backoff (default: max 3 attempts).\n\nNotification providers are now resolved through config. Slack remains provider #1:\n\n```json\n{\n  \"notifications\": {\n    \"providers\": [\"slack\"],\n    \"slack\": {\n      \"enabled\": true\n    }\n  }\n}\n```\n\nRelease note rendering is channel-specific:\n\n- GitHub release notes: grouped by PR labels when available. Teams can customize label-to-section mappings via `release.labelBuckets` in `yaba.config.json` (see [CONFIG.md](./CONFIG.md) for details). Default grouping includes: `type:feature`, `type:fix`, `type:docs`, `type:breaking`, `dependencies`/`deps`.\n- Slack release notes: rendered as a short newsletter for human readers.\n- Fallback: if label metadata is missing, GitHub notes fall back to the legacy commit-list structure.\n\nCustom label buckets example:\n\n```json\n{\n  \"release\": {\n    \"labelBuckets\": [\n      {\n        \"key\": \"security\",\n        \"title\": \"Security Fixes\",\n        \"labels\": [\"security\", \"type:security\"]\n      },\n      {\n        \"key\": \"chore\",\n        \"title\": \"Chore\",\n        \"labels\": [\"chore\", \"type:chore\"]\n      }\n    ]\n  }\n}\n```\n\nFor complete configuration details, see [CONFIG.md](./CONFIG.md).\n\n## Command Line Usage\n\nRun `yaba` with `--help` options:\n\n```shell\n➜  ~ yaba --help\nUsage: yaba \u003crelease|doctor|config\u003e [options]\n\nOptions:\n  -o, --owner                 The repository owner.                      [string]\n  -r, --repo                  The repository name.                       [string]\n  -t, --tag                   The name of the tag.                       [string]\n      --tag-strategy          Tag generation strategy.\n                              [choices: \"pattern\", \"semver\", \"sha\"]\n                              [default: from config (fallback: pattern)]\n      --tag-on-conflict       How to handle already existing tags.\n                              [choices: \"increment\", \"fail\"]\n                              [default: from config (fallback: increment)]\n      --tag-max-attempts      Maximum attempts while resolving a unique tag with increment policy.\n                                                                       [number]\n                              [default: from config (fallback: 20)]\n      --target                Target commit-ish (branch, tag, or SHA) to generate\n                              and create the release from.               [string]\n      --allow-empty           Allow creating a release when no commits are found\n                              in changelog comparison.                  [boolean]\n      --fail-on-empty         Fail when no commits are found in changelog\n                              comparison.                               [boolean]\n      --max-commits           Fail when commit count exceeds this limit. [number]\n  -n, --name, --release-name  The name of the release.                   [string]\n  -b, --body          Text describing the contents of the tag. If not provided,\n                      the default changelog will be generated with the usage of\n                      the difference of default branch and latest release.\n                                                                       [string]\n  -d, --draft                 Creates the release as draft.             [boolean]\n  -c, --changelog     Shows only changelog without creating the release.\n                                                                       [boolean]\n  -i, --interactive           Prompt before (draft) release is created (default true)\n                                                                       [boolean]\n      --yes                   DEPRECATED: Skip confirmation prompt and create\n                              release directly. Use --no-prompt.        [boolean]\n      --no-prompt             Skip release confirmation prompt (same as --yes).\n                                                                       [boolean]\n      --notify                DEPRECATED: Send notifications after release is\n                              created. Use --publish. [choices: \"slack\"]\n  -p, --publish               Publishes the release announcement to the defined Slack\n                              channel                                   [boolean]\n      --format                Output format.\n                              [choices: \"human\", \"json\"]\n      --config                Path to config file.                        [string]\n      --force                 Overwrite generated files when they already exist.\n                                                                       [boolean]\n  -h, --help                  Show help                                 [boolean]\n  -v, --version               Show version number                       [boolean]\n```\n\nSupported commands:\n\n- `yaba release create`: creates a release on GitHub.\n- `yaba release preview`: prepares and prints release details without creating a release.\n- `yaba doctor`: runs environment and connectivity diagnostics.\n- `yaba config init`: creates a `yaba.config.json` template in the current directory.\n- `yaba config validate`: validates resolved config values and reports schema issues.\n\nCreate release with the new command format:\n\n```shell\nyaba release create --repo my-repo --publish --no-prompt\n```\n\nCreate release from a specific commit/tag/branch target:\n\n```shell\nyaba release create --repo my-repo --target 1a2b3c4d --no-prompt\n```\n\nFail explicitly when no changes are found:\n\n```shell\nyaba release create --repo my-repo --fail-on-empty --no-prompt\n```\n\nAllow empty release intentionally:\n\n```shell\nyaba release create --repo my-repo --allow-empty --no-prompt\n```\n\nPreview release details without side effects:\n\n```shell\nyaba release preview --repo my-repo\n```\n\nPreview release details in JSON format:\n\n```shell\nyaba release preview --repo my-repo --format json\n```\n\nPreview release details from a specific target reference:\n\n```shell\nyaba release preview --repo my-repo --target release/2.x\n```\n\nCreate release using semver tag strategy (`v\u003cpackage.json version\u003e`):\n\n```shell\nyaba release create --repo my-repo --tag-strategy semver --no-prompt\n```\n\nCreate release using sha-based tag strategy:\n\n```shell\nyaba release create --repo my-repo --tag-strategy sha --target 1a2b3c4d5e6f --no-prompt\n```\n\nRun setup diagnostics:\n\n```shell\nyaba doctor\n```\n\nRun setup diagnostics in JSON format:\n\n```shell\nyaba doctor --format json\n```\n\n`yaba doctor` now reports:\n\n- token type (GitHub Actions token, fine-grained PAT, classic PAT, or unknown),\n- OAuth scope summary when available,\n- repository access check results with actionable remediation guidance.\n\nCreate local config template:\n\n```shell\nyaba config init\n```\n\nOverwrite existing config template:\n\n```shell\nyaba config init --force\n```\n\nCreate config template at a custom location:\n\n```shell\nyaba config init --config ./config/yaba.config.json\n```\n\nValidate config at a custom location:\n\n```shell\nyaba config validate --config ./config/yaba.config.json\n```\n\nValidate config in JSON format:\n\n```shell\nyaba config validate --config ./config/yaba.config.json --format json\n```\n\nWhen `--format json` is used, `yaba` prints machine-readable command results to `stdout` and errors to `stderr`.\n\nConfig precedence for runtime values is:\n\n```text\nflags \u003e env vars \u003e project config (./yaba.config.json) \u003e user config (~/.config/yaba/config.json) \u003e defaults\n```\n\nYou can run `yaba` from a git directory or any other directories which is not a git repo.\n\nIf you are in a git repo and if you want to prepare the release for that repo, you don't need to specify the repo name\nwith the command. The command will try to detect the repository name from `remote.origin.url` and use it as `repo` for\nthe command.\n\nBy default, if you don't specify `-o`, `-t`, `-n` and `-b` the command will prepare default values for them with the\nbelow pattern:\n\n```text\n-o: authenticated_user\n-t: prod_global_YYYYMMDD.1\n-n: Global release YYYY-MM-DD\n-b: Commits between last release and default branch\n```\n\nIf a repository has no previous release, `yaba` now falls back to the head branch for changelog comparison and still prepares the release.\n\n### Deprecations (v2 compatibility)\n\nThe following legacy invocations are still supported in v2, but emit deprecation warnings in human-readable output and are planned for removal in v3:\n\n- `--yes` -\u003e use `--no-prompt`\n- `--notify slack` -\u003e use `--publish`\n- `--release-name` -\u003e use `--name`\n- implicit `yaba` command -\u003e use `yaba release create`\n\nFor automation scripts, migrate now to avoid v3 breakage.\n\n### Exit Codes\n\n`yaba` now returns deterministic exit codes for automation/CI usage:\n\n```text\n0 = success\n1 = validation/config/user-input error\n2 = authentication/authorization error\n3 = network/connectivity error\n4 = upstream API error\n5 = partial success (release created, notification failed)\n6 = unexpected internal error\n```\n\n## Run Locally\n\nYou have to clone the repository to your local machine\n\n```shell\ngit clone git@github.com:volkanto/yaba.git\n```\n\nGo to project folder\n\n```shell\ncd yaba\n```\n\nBuild dependencies\n\n```shell\nnpm install\n```\n\nYou have to install globally in order to run your `yaba` command\n\n```shell\nnpm install -g .\n```\n\nRun unit tests:\n\n```shell\nnpm run test:unit\n```\n\nRun integration tests:\n\n```shell\nnpm run test:integration\n```\n\n## Issues\n\nYou can create an issue if you find any problem or feel free to create a PR with a possible fix or any other feature.\nAlso, you can create an issue if you have any idea that you think it will be nice if we have it.\n\n## Authors\n\n* Volkan Tokmak - [volkanto](https://github.com/volkanto)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolkanto%2Fyaba","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvolkanto%2Fyaba","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolkanto%2Fyaba/lists"}