{"_id":"@amiramirov/release","_rev":"7-6f6ef4ce3d88fd1b6cface9770c39924","name":"@amiramirov/release","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@amiramirov/release","version":"0.1.0","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.1.0","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"6191504c233ab8baa644a615033a6291944ea57e","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.1.0.tgz","fileCount":15,"integrity":"sha512-nA70O/vNnxgaUSi/pzKpi02QDtFUt3jcpFx9tbqzxDUoHC7FV2JjHEHJ2r2L6afxF+d+02TrvdsB0BXuVOLvYQ==","signatures":[{"sig":"MEUCIQCSRbiDZ1dzjK4GCVvxYZ2adEE3DRrG9aTCRfTYMUmDGgIgOxtT25KUex09wul4uzI9EK+7Y7KGAR7yj9OzskbdR3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33485},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"10.8.2","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"20.19.4","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.1.0_1784320688616_0.7181165971512693","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@amiramirov/release","version":"0.1.1","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.1.1","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"f97ae9eda8e594c7cee1fa42e171d6961f016313","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.1.1.tgz","fileCount":15,"integrity":"sha512-QYqH8ElSUeKibMuZ16PPSbtuIlgDdcTOsfZWGlNe8I2dXHuT8lx0FOBtqgDt7my1gkTdn0Et4ZdQbAmhBN62TQ==","signatures":[{"sig":"MEYCIQD2TbEfEnXokUHxrLxICHdymIYUfVy9OzQa0qqRGqSzaAIhAOUmFTn2aiPoDU0bYIMKTISRybOTel1QQOnrB7031GEt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33034},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"10.8.2","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"20.19.4","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.1.1_1784321429673_0.22771987768056","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@amiramirov/release","version":"0.2.0","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.2.0","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"e95482051451065457a7dd9a4f2043975be209d0","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.2.0.tgz","fileCount":15,"integrity":"sha512-oyV07M/A5mwN59UW6+cg2XTpR87iQzVHKQkHNYSg1W/V9Fjib8T5Y2ZdkMu+IKm46YNvo/jB8InIryxzryfzMA==","signatures":[{"sig":"MEUCIHmIQv69KykcFYTClj/JXqci/1jjhrGMd5JxhL99kggtAiEA0o1z18Ff97PwiPZwoeYVBf157ArhmvmO6CM6cO9Z4us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36881},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"b96d80fffee49e668e009c4e3ad475c3bfe4b42e","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"10.8.2","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"20.19.4","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.2.0_1784481071017_0.5873056788165367","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@amiramirov/release","version":"0.2.1","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.2.1","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"5e25969d24ad0cfaba8cc7bed02c429c97dc6dda","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.2.1.tgz","fileCount":15,"integrity":"sha512-KWwBvaxVOhOYaBqpPDi63G843oR3iQL3686ZZ7kkGBE0NqDPPbw9hysc+ekfBVub8cdT2ZL68rhUNziM8qaBww==","signatures":[{"sig":"MEUCIGXwl4LmPTfll95Ir4EOax6pwUskul39WRdbE154Tj6ZAiEAkEjr09Do8MnuNJsGzL9KiIvh3LI2MzormxYLuIPXMtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39203},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"b96d80fffee49e668e009c4e3ad475c3bfe4b42e","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"11.12.1","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.2.1_1784616356015_0.7033030066510471","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@amiramirov/release","version":"0.3.0","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.3.0","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"95d7bbb22365b9f1aad447d6ea69ad1ee9c619e5","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.3.0.tgz","fileCount":15,"integrity":"sha512-iFx4T+emeMLrNwFpc7lGWVqYfSOUlPfFMKNRl2A1x1s+oK+s4GRcmbe1FFcp3MtqW2shXCJOSxL72mJnK8jGzA==","signatures":[{"sig":"MEUCIQD27nXbd0zOcLwPZZeVgV3m5RR2Pct5npDBBq7Gyua6qQIgYJ7/NNXvfIVVL81iDFMalQd/x09yB5tqqViw0srVDYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41257},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"b96d80fffee49e668e009c4e3ad475c3bfe4b42e","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"11.12.1","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.3.0_1784809013891_0.5140259176323603","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@amiramirov/release","version":"0.3.1","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","_id":"@amiramirov/release@0.3.1","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"bin":{"release":"dist/index.js"},"dist":{"shasum":"c0f332791f65ff7a849100f8d52e92ae353ced39","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.3.1.tgz","fileCount":15,"integrity":"sha512-HnXo05+3yFMIAkHemKZH5tcUPAVzzBkCvXrbVXLiLzqSw6M8F55DqPhB/SFR2GAiIlS47NnmAKeLAyPeHhnuhA==","signatures":[{"sig":"MEUCIELdUn0QFrNsu3r/P2sbHJUlGykxL4XBMZ7KH/eDJAHqAiEA85NG3XNOQu+XaBx/PsFojZjTsrKIPLi/SdkoytTYRTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44711},"main":"./dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"b96d80fffee49e668e009c4e3ad475c3bfe4b42e","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"_npmVersion":"11.12.1","description":"Automate cherry-pick release workflow","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","chalk":"^5.3.0","semver":"^7.6.3","commander":"^12.1.0","@inquirer/prompts":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0","@types/semver":"^7.5.8"},"_npmOperationalInternal":{"tmp":"tmp/release_0.3.1_1785247051969_0.0425075303423641","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@amiramirov/release","version":"0.3.2","description":"Automate cherry-pick release workflow","type":"module","bin":{"release":"dist/index.js"},"main":"./dist/index.js","engines":{"node":">=20"},"scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"keywords":["git","gitlab","release","cherry-pick","cli","semver"],"author":{"name":"Amir Amirov"},"license":"MIT","dependencies":{"@inquirer/prompts":"^7.2.0","chalk":"^5.3.0","commander":"^12.1.0","semver":"^7.6.3","yaml":"^2.6.1"},"devDependencies":{"@types/node":"^22.10.0","@types/semver":"^7.5.8","typescript":"^5.7.2"},"gitHead":"fb1f7251f7abaa36b81a87bc0499f1874ca2de1c","_id":"@amiramirov/release@0.3.2","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-dVtvYMdjBIeT/pzXtEDPKftnbSrptS+FXla+do313zTb+YrduvuFU9cSDZe8CE5pZZYqjnM+QKvQybBgu5IPpQ==","shasum":"78ef7e56560de04ca7a231a90e7118b8ef7c85ee","tarball":"https://registry.npmjs.org/@amiramirov/release/-/release-0.3.2.tgz","fileCount":15,"unpackedSize":47060,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICsoRamQZFPB2KB+BZZuU1XGjV5sowWny0+7y401ZEHKAiEA2MaNW3f+fTZOFWEXf604dIW9NRBsKJFFI6IGSycwmRk="}]},"_npmUser":{"name":"amiramirov","email":"cgb.zko@gmail.com"},"directories":{},"maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/release_0.3.2_1785248193092_0.12510041960846485"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T20:38:08.458Z","modified":"2026-07-28T14:16:33.392Z","0.1.0":"2026-07-17T20:38:08.769Z","0.1.1":"2026-07-17T20:50:29.811Z","0.2.0":"2026-07-19T17:11:11.129Z","0.2.1":"2026-07-21T06:45:56.148Z","0.3.0":"2026-07-23T12:16:54.039Z","0.3.1":"2026-07-28T13:57:32.115Z","0.3.2":"2026-07-28T14:16:33.229Z"},"author":{"name":"Amir Amirov"},"license":"MIT","keywords":["git","gitlab","release","cherry-pick","cli","semver"],"description":"Automate cherry-pick release workflow","maintainers":[{"name":"amiramirov","email":"cgb.zko@gmail.com"}],"readme":"# @amiramirov/release\n\nAutomate cherry-pick release workflow for Git repositories with GitLab.\n\n## Install\n\nAs a global CLI (recommended — puts `release` on your `$PATH`):\n\n```\nnpm install -g @amiramirov/release\n```\n\nOr run one-off with `npx` — no install, latest version:\n\n```\nnpx @amiramirov/release\n```\n\nOr add as a dev-dependency to a project (invoke via `npx release` or `package.json` scripts):\n\n```\nnpm install --save-dev @amiramirov/release\n```\n\n## Usage\n\nFrom inside a Git repository with a GitLab `origin`:\n\n```\nrelease\n```\n\nThe flow is step by step: every step asks first, then runs, then reports what it\ndid. Answering *No* — or hitting Ctrl+C — stops right there and prints what\nalready exists, plus the commands to undo it.\n\n1. Ask for a GitLab Personal Access Token on first run (stored in `~/.config/release-cli/config.yml`, permissions 600).\n2. Fetch tags/branches from the remote.\n3. Let you pick a base production tag.\n4. List commits between the base tag and `origin/main`, hiding those already released (patch-id match).\n5. Multi-select commits to include.\n6. **Release branch** — create `release/<base-tag>-<timestamp>` from the base tag, cherry-pick the selected commits in a temporary worktree (your checked-out branch and uncommitted changes are never touched), then push it.\n7. **Merge request** — open an MR from the release branch onto `main`, which is what gets the build/pipeline running. Prints the MR link.\n8. **Tag** — pick a semver bump (patch/minor/major), tag the release branch HEAD and push the tag.\n9. **GitLab Release** — set release date/time (default tomorrow 09:00 local), edit the description in `$EDITOR` (prefilled with commit subjects), then POST to the GitLab Releases API for the tag pushed in step 8.\n\n### Authentication\n\nThe token is all you need — `git fetch`, the branch push and the tag push all go\nthrough `https://oauth2:<token>@<host>/<project>.git`, so no SSH key, passphrase\nor password is ever involved. This holds even when `origin` is an SSH remote\n(`git@gitlab…`): only the host and project path are taken from it. Give the token\nthe `api`, `read_repository` and `write_repository` scopes.\n\nIf an HTTPS operation fails on a repo whose `origin` is SSH, the CLI says so and\nretries once through `origin` — i.e. over your SSH key — so a token that is\nmissing `write_repository` doesn't strand a half-finished release.\n\n## Options\n\n- `--remote <name>` — Git remote to use (default: `origin`)\n- `--no-fetch` — skip `git fetch` at start\n- `--tag-pattern <glob>` — override glob for production tags (default from config, `v*`)\n- `--show-released` — include commits already present in the base tag (hidden by default)\n\n## Config\n\n`~/.config/release-cli/config.yml`:\n\n```yaml\ngitlabUrl: https://gitlab.com\ngitlabToken: glpat-...\nmainBranch: main\nproductionTagPattern: v*\nreleaseBranchPattern: release/{tag}\nallowMergeCommits: false\n```\n\n## Requirements\n\n- Node.js 20 LTS or newer\n- `git` in PATH\n- Interactive TTY (arrow-key prompts)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}