relion 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -19
- package/dist/cli.js +2 -2
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
<img alt="logo" src=".github/logo-light.png">
|
|
5
5
|
</picture>
|
|
6
6
|
<br>
|
|
7
|
-
<a href="https://www.npmjs.com/package/relion"><img src="https://img.shields.io/npm/v/relion?label=npm&logo=npm&style=flat-square&color=
|
|
8
|
-
<a href="https://www.npmjs.com/package/relion"><img src="https://img.badgesize.io/https:/unpkg.com/relion/dist/cli.js?label=Size&logo=hackthebox&logoColor=c97026&style=flat-square&color=
|
|
9
|
-
<a href="https://github.com/kh4f/relion/issues?q=is%3Aissue+is%3Aopen+label%3Abug"><img src="https://img.shields.io/github/issues/kh4f/relion/bug?label=%F0%9F%90%9B%20Bugs&style=flat-square&color=
|
|
10
|
-
<a href="https://github.com/kh4f/relion/blob/master/LICENSE"><img src="https://img.shields.io/github/license/kh4f/relion?style=flat-square&label=%F0%9F%9B%A1%EF%B8%8F%20License&color=A4BFFF&labelColor=303145" alt="license"></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/relion"><img src="https://img.shields.io/npm/v/relion?label=npm&logo=npm&style=flat-square&color=BCC7EC&labelColor=303145" alt="npm version"/></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/relion"><img src="https://img.badgesize.io/https:/unpkg.com/relion/dist/cli.js?label=Size&logo=hackthebox&logoColor=c97026&style=flat-square&color=BCC7EC&labelColor=303145" alt="bundle size"/></a>
|
|
9
|
+
<a href="https://github.com/kh4f/relion/issues?q=is%3Aissue+is%3Aopen+label%3Abug"><img src="https://img.shields.io/github/issues/kh4f/relion/bug?label=%F0%9F%90%9B%20Bugs&style=flat-square&color=BCC7EC&labelColor=303145" alt="open bugs"></a>
|
|
11
10
|
<br><br>
|
|
12
11
|
<b>A zero‑config npm lib for automating the release workflow:<br></b> version bumping, release commit & tag creation, and AI‑assisted changelog generation
|
|
13
12
|
<br><br>
|
|
@@ -70,7 +69,7 @@ About to create a tag: 'git tag v0.43.0 -m "chore(release): v0.43.0"'
|
|
|
70
69
|
|
|
71
70
|
<details><summary>Generated release context example (*):</summary>
|
|
72
71
|
|
|
73
|
-
```
|
|
72
|
+
```markdown
|
|
74
73
|
---
|
|
75
74
|
tag: v0.33.0
|
|
76
75
|
prevTag: v0.32.1
|
|
@@ -93,18 +92,19 @@ Previously, if commits contained both features and breaking changes, features wo
|
|
|
93
92
|
|
|
94
93
|
## 📋 Changelog Generation
|
|
95
94
|
|
|
96
|
-
Relion doesn’t format the changelog itself
|
|
95
|
+
Relion doesn’t format the changelog itself. Instead, it generates a `RELEASE.md` file with release metadata and commit log, and provides a [`generate-changelog`](skills/generate-changelog/SKILL.md) skill to turn that context into a polished changelog entry with AI.
|
|
97
96
|
|
|
98
|
-
|
|
97
|
+
Recommended workflow:
|
|
99
98
|
|
|
100
|
-
1.
|
|
99
|
+
1. Install the skill: `bunx skills add kh4f/relion [-g]`
|
|
100
|
+
(see the [`skills` CLI docs](https://www.npmjs.com/package/skills))
|
|
101
101
|
2. Run Relion to generate `RELEASE.md`
|
|
102
|
-
3. Review the release context
|
|
103
|
-
4.
|
|
102
|
+
3. Review the generated release context
|
|
103
|
+
4. Ask your AI agent to generate a changelog
|
|
104
104
|
|
|
105
|
-
<details><summary>Generated changelog example (from the (*) release context
|
|
105
|
+
<details><summary>Generated changelog example (from the (*) release context; Gemini 3 Pro)</summary>
|
|
106
106
|
|
|
107
|
-
```
|
|
107
|
+
```markdown
|
|
108
108
|
##   [` 📦 v0.33.0 `](https://github.com/kh4f/relion/compare/v0.32.1...v0.33.0)
|
|
109
109
|
|
|
110
110
|
###   🎁 Features
|
|
@@ -115,10 +115,4 @@ Example workflow using GitHub Copilot:
|
|
|
115
115
|
|
|
116
116
|
#####    [Full Changelog](https://github.com/kh4f/relion/compare/v0.32.1...v0.33.0)  •  Jan 10, 2026
|
|
117
117
|
```
|
|
118
|
-
</details>
|
|
119
|
-
|
|
120
|
-
<br>
|
|
121
|
-
|
|
122
|
-
<div align="center">
|
|
123
|
-
<b>MIT License © 2025-2026 <a href="https://github.com/kh4f">kh4f</a></b>
|
|
124
|
-
</div>
|
|
118
|
+
</details>
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{execSync as e,spawnSync as t}from"node:child_process";import{existsSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import{createInterface as a}from"node:readline";import o from"semver";const s=()=>{let t=e(`git config --get remote.origin.url`,{encoding:`utf8`}).trim(),n=/(github\.com.*?)(\.git)?$/.exec(t)?.[1]
|
|
2
|
+
import{execSync as e,spawnSync as t}from"node:child_process";import{existsSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import{createInterface as a}from"node:readline";import o from"semver";const s=()=>{let t=e(`git config --get remote.origin.url`,{encoding:`utf8`}).trim(),n=/(github\.com.*?)(\.git)?$/.exec(t)?.[1]??``,r=n.split(`/`).at(-1)??``;return{url:`https://${n}`,name:r}},c=t=>e(`git log ${t?`${t}..`:``} --format="%h %B---" .`,{encoding:`utf8`}).trim().split(`---`).filter(Boolean).map(e=>/^(.+?) (.+)/s.exec(e.trim())).map(e=>({hash:e?.[1]??``,message:e?.[2].trim()??``})),l=(e,t)=>{let n=e.some(e=>e.message.includes(`BREAKING CHANGE`))?t.startsWith(`0.`)?`minor`:`major`:e.some(e=>/feat(\(.*?\))?:/.test(e.message))?`minor`:`patch`;return o.inc(t,n)??(()=>{throw Error(`Failed to increment version '${t}' with release type '${n}'`)})()},u=async(e,t=!1)=>{if(t)return!0;let n=a({input:process.stdin,output:process.stdout});return await new Promise(t=>{n.question(e,e=>{n.close(),t(e.trim()!==`s`)})})},d={bump:[`package.json`],newVersion:``,tagPrefix:`v`,commitsExclude:[/^(ci|build|test)\(/,/^chore\(deps\)(?!!)/],dryRun:!1,yes:!1},f=[{filePattern:/\.rc$/,bump:(e,t)=>e.replace(/(\b(FileVersion|ProductVersion)\b.*?)\d[\w.+-]*/g,`$1${t}`).replace(/(\b(FILEVERSION|PRODUCTVERSION)\b.*?)\d[\w,+-]*/g,`$1${(/^\d+\.\d+\.\d+/.exec(t)?.[0]??``).replace(/\./g,`,`)+`,0`}`)},{filePattern:/.*/,bump:(e,t)=>e.replace(/(\bversion\b.*?)\d[\w.+-]*/,`$1${t}`)}],p=async(e,t,n,r,a)=>{if(e.yes||!await u(`About to write context to 'RELEASE.md'`,e.yes)||e.dryRun)return;let o=``,s=`---\ntag: ${r}\nprevTag: ${n}\ndate: ${new Date().toLocaleString(`en-US`,{month:`short`,day:`numeric`,year:`numeric`})}\nrepoURL: ${a}
|
|
3
3
|
---
|
|
4
4
|
`;o+=s+`
|
|
5
5
|
`;let c=t.map(e=>`[${e.hash}] ${e.message}`).join(`\n${`-`.repeat(30)}\n`);o+=`## Commit Log\n\n\`\`\`\n${c}\n\`\`\``,i(`RELEASE.md`,o,`utf8`)},m=async e=>{let t=e.bump.filter(n);await u(`About to bump version in files: ${t.join(`, `)}`,e.yes)&&t.forEach(t=>{let n=f.find(e=>e.filePattern.test(t));if(!n)return console.warn(`No matching bumper found for file '${t}', skipping...`);let a=r(t,`utf8`),o=n.bump(a,e.newVersion);e.dryRun||i(t,o,`utf8`)})},h=async(t,n)=>{let r=`${t.yes?`git add -A && `:``}git commit -m "${n}"`;await u(`About to commit changes: '${r}'`,t.yes)&&(t.dryRun||e(r,{stdio:`inherit`}))},g=async(t,n,r)=>{let i=`git tag ${n} -m "${r}"`;await u(`About to create a tag: '${i}'`,t.yes)&&(t.dryRun||e(i,{stdio:`inherit`}))},_=async e=>{let n=s();console.log(`Project: ${n.name}`),console.log(`Repo: ${n.url}`);let r={...d,...e,bump:[...d.bump,...e.bump??[]]},i=t(`git`,[`describe`,`--match`,`${r.tagPrefix}[0-9]*.[0-9]*.[0-9]*`,`--abbrev=0`],{encoding:`utf8`}).stdout.trim();console.log(`Current tag: ${i}`);let a=/\d+\.\d+\.\d+.*/.exec(i)?.[0]??`0.0.0`;console.log(`Current version: ${a}`);let o=c(i),u=o.filter(e=>!r.commitsExclude.some(t=>t.test(e.message)));console.log(`Parsed commits: ${u.length}`),r.newVersion||=l(o,a),console.log(`New version: ${r.newVersion}`);let f=`${r.tagPrefix}${r.newVersion}`;console.log(`New tag: ${f}`);let _=`chore(release): ${f}`;console.log(`Commit message: '${_}'`),console.log(`-`.repeat(30)),console.log(`
|
|
@@ -15,4 +15,4 @@ Options:
|
|
|
15
15
|
Examples:
|
|
16
16
|
bunx relion -b src/manifest.json Bump a custom file
|
|
17
17
|
bunx relion -d -v 1.2.3 Dry run with a custom version
|
|
18
|
-
`),process.exit(0));const y=/-b (.+?)( -|$)/.exec(v)?.[1].split(` `),b=/-v (\S+)/.exec(v)?.[1];let x=/-t (\S+)/.exec(v)?.[1];x===`''`&&(x=``);const S
|
|
18
|
+
`),process.exit(0));const y=/-b (.+?)( -|$)/.exec(v)?.[1].split(` `),b=/-v (\S+)/.exec(v)?.[1];let x=/-t (\S+)/.exec(v)?.[1];x===`''`&&(x=``);const S=/\b-d\b/.test(v),C=/\b-y\b/.test(v);_({...y&&{bump:y},...b&&{newVersion:b},...x&&{tagPrefix:x},dryRun:S,yes:C}).catch(e=>{console.error(e),process.exit(1)});export{};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "relion",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "🏷️ Release Workflow Helper",
|
|
5
5
|
"author": "kh4f <kh4f.dev@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"build:watch": "tsdown --watch",
|
|
17
17
|
"build:prod": "tsdown --prod",
|
|
18
18
|
"lint": "eslint",
|
|
19
|
+
"typecheck": "tsc",
|
|
19
20
|
"test": "bun test",
|
|
20
21
|
"release": "bun src/cli"
|
|
21
22
|
},
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
28
29
|
"@types/bun": "^1.3.11",
|
|
29
30
|
"@types/semver": "^7.7.1",
|
|
30
|
-
"eslint": "^10.
|
|
31
|
+
"eslint": "^10.2.0",
|
|
31
32
|
"jiti": "^2.6.1",
|
|
32
33
|
"tsdown": "^0.21.7",
|
|
33
34
|
"typescript": "^6.0.2",
|