changelog-tool 0.5.0 → 0.7.0
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/changelog.md +16 -2
- package/changelog.mjs +2 -2
- package/cli.mjs +22 -2
- package/package.json +4 -2
- package/readme.md +45 -17
- package/test/parse.mjs +1 -0
- package/tsconfig.json +0 -1
- package/util.mjs +43 -0
package/changelog.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
0.7.0 (2023-02-14)
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* The "release" command now automatically commits and and creates a git tag,
|
8
|
+
much like `npm version`
|
9
|
+
|
10
|
+
|
11
|
+
0.6.0 (2023-02-14)
|
12
|
+
------------------
|
13
|
+
|
14
|
+
* The release command now automatically calls "npm version" if a package.json
|
15
|
+
was found in the project directory
|
16
|
+
* Bug fix: the --major and --minor arguments were ignored when using "add" to
|
17
|
+
create a new version log
|
18
|
+
|
19
|
+
|
4
20
|
0.5.0 (2023-02-12)
|
5
21
|
------------------
|
6
22
|
|
@@ -8,8 +24,6 @@ Changelog
|
|
8
24
|
`--minor` arguments.
|
9
25
|
* The `add` command now uses the -m argument instead of a positional for the
|
10
26
|
message.
|
11
|
-
* bla
|
12
|
-
* bla
|
13
27
|
|
14
28
|
|
15
29
|
0.4.1 (2023-02-12)
|
package/changelog.mjs
CHANGED
@@ -38,13 +38,13 @@ export class Changelog {
|
|
38
38
|
* Adds a new version to the log. Version string is automatically increased
|
39
39
|
* from the previous one
|
40
40
|
*
|
41
|
-
* @
|
41
|
+
* @param {'patch'|'minor'|'major'} changeType
|
42
42
|
* @returns {VersionLog}
|
43
43
|
*/
|
44
44
|
newVersion(changeType = 'patch') {
|
45
45
|
|
46
46
|
const lastVersion = this.versions[0].version;
|
47
|
-
const newVersion = calculateNextVersion(lastVersion);
|
47
|
+
const newVersion = calculateNextVersion(lastVersion, changeType);
|
48
48
|
const versionLog = new VersionLog(newVersion);
|
49
49
|
|
50
50
|
return this.add(versionLog);
|
package/cli.mjs
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
import { parseArgs } from 'node:util';
|
4
4
|
import * as fs from 'node:fs/promises';
|
5
5
|
import * as url from 'node:url';
|
6
|
-
import { readPackageVersion, exists, calculateNextVersion } from './util.mjs';
|
6
|
+
import { readPackageVersion, exists, calculateNextVersion, isGit, isGitClean, runCommand } from './util.mjs';
|
7
7
|
import { Changelog, VersionLog, LogItem } from './changelog.mjs';
|
8
8
|
import { parseFile } from './parse.mjs';
|
9
|
+
import { execSync } from 'node:child_process';
|
9
10
|
|
10
11
|
const filename = 'changelog.md';
|
11
12
|
|
@@ -78,7 +79,7 @@ async function main() {
|
|
78
79
|
changeType = 'major';
|
79
80
|
}
|
80
81
|
if (!values.message) {
|
81
|
-
throw new Error('The "-m" or "
|
82
|
+
throw new Error('The "-m" or "--message" argument is required');
|
82
83
|
}
|
83
84
|
await add({
|
84
85
|
message: values.message,
|
@@ -235,9 +236,28 @@ async function release() {
|
|
235
236
|
}
|
236
237
|
lastVersion.date = new Date().toISOString().substr(0,10);
|
237
238
|
console.log(`Releasing ${lastVersion.version}`);
|
239
|
+
|
240
|
+
const useGit = await isGit();
|
241
|
+
|
242
|
+
if (useGit) {
|
243
|
+
if (!await isGitClean()) {
|
244
|
+
throw new Error('Current git working directory is not clean. Please commit your changes first');
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
238
248
|
await fs.writeFile(filename, changelog.toString());
|
239
249
|
console.log(`${changelog.versions.length} changelogs saved to ${filename}`);
|
240
250
|
|
251
|
+
if (await exists('package.json')) {
|
252
|
+
runCommand(
|
253
|
+
`npm version "${lastVersion.version}" --no-git-tag-version`
|
254
|
+
);
|
255
|
+
}
|
256
|
+
if (useGit) {
|
257
|
+
runCommand(`git add --all`);
|
258
|
+
runCommand(`git tag v${lastVersion.version}`);
|
259
|
+
}
|
260
|
+
|
241
261
|
}
|
242
262
|
|
243
263
|
/**
|
package/package.json
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "changelog-tool",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.7.0",
|
4
4
|
"description": "A CLI tool for manipulating changelogs",
|
5
|
+
"type": "module",
|
5
6
|
"main": "index.mjs",
|
6
7
|
"scripts": {
|
7
|
-
"test": "node --test"
|
8
|
+
"test": "node --test",
|
9
|
+
"watch": "tsc --watch"
|
8
10
|
},
|
9
11
|
"keywords": [
|
10
12
|
"changelog",
|
package/readme.md
CHANGED
@@ -26,7 +26,7 @@ Installation
|
|
26
26
|
------------
|
27
27
|
|
28
28
|
```sh
|
29
|
-
npm install changelog-tool --
|
29
|
+
npm install changelog-tool --global
|
30
30
|
```
|
31
31
|
|
32
32
|
CLI
|
@@ -36,33 +36,61 @@ To tool can be used programmatically and with the CLI. The CLI has the
|
|
36
36
|
following commands:
|
37
37
|
|
38
38
|
```
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
changelog init - Create a new, empty npx changelog.
|
40
|
+
changelog add -m [message] - Adds a new line to the npx changelog.
|
41
|
+
changelog release - Marks the current npx changelog as released.
|
42
|
+
changelog show - Show the last npx changelog.
|
43
|
+
changelog show [version] - Show the npx changelog of a specific version.
|
44
|
+
changelog list - List all versions in the npx changelog.
|
45
|
+
changelog format - Reformats the npx changelog in the standard format.
|
46
46
|
```
|
47
47
|
|
48
|
-
###
|
48
|
+
### 'add' command
|
49
49
|
|
50
|
-
|
50
|
+
The add comment lets you add a new message at the bottom of the last unreleased
|
51
|
+
version.
|
52
|
+
|
53
|
+
To use it, just run:
|
51
54
|
|
52
55
|
```
|
53
|
-
|
56
|
+
changelog add -m "Bug fix"
|
54
57
|
```
|
55
58
|
|
56
|
-
|
57
|
-
|
59
|
+
If there is no unreleased version, it will create a new section and increase
|
60
|
+
the version number.
|
58
61
|
|
59
|
-
If the change should
|
60
|
-
|
62
|
+
If the current change should result in a new major or minor version number, you
|
63
|
+
can use the following arguments.
|
61
64
|
|
62
65
|
```
|
63
|
-
|
64
|
-
|
66
|
+
changelog add --minor -m "New feature"
|
67
|
+
changelog add --major -m "Backwards compatibility break"
|
65
68
|
```
|
66
69
|
|
67
70
|
These settings will automatically adjust the version string of the most recent
|
68
71
|
unreleased version.
|
72
|
+
|
73
|
+
### 'release' command
|
74
|
+
|
75
|
+
The release command will look for a recent unreleased version in the changelog
|
76
|
+
(where the date is marked `????-??-??`) and change it to the current date:
|
77
|
+
|
78
|
+
```
|
79
|
+
changelog release
|
80
|
+
```
|
81
|
+
|
82
|
+
If the tool detects a `package.json` file in the current directory, it will
|
83
|
+
also call:
|
84
|
+
|
85
|
+
```
|
86
|
+
npm version [version] --no-git-tag-version
|
87
|
+
```
|
88
|
+
|
89
|
+
This command adjust the `version` field in `package.json` to match the latest
|
90
|
+
changelog version.
|
91
|
+
|
92
|
+
If the tool detects if this is a git directory, it will also:
|
93
|
+
|
94
|
+
* Ensure that the working directory is clean.
|
95
|
+
* Commit the changes.
|
96
|
+
* Create a tag with `git tag v[version]`.
|
package/test/parse.mjs
CHANGED
package/tsconfig.json
CHANGED
package/util.mjs
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
// @ts-check
|
2
|
+
import { execSync } from 'node:child_process';
|
2
3
|
import * as fs from 'node:fs/promises';
|
4
|
+
import * as path from 'node:path';
|
3
5
|
|
4
6
|
/**
|
5
7
|
* Checks if a file exists
|
@@ -108,3 +110,44 @@ export function calculateNextVersion(prevVersion, changeType = 'patch') {
|
|
108
110
|
return parts.join('.');
|
109
111
|
|
110
112
|
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Returns true if we're in a git-powered directory
|
116
|
+
*
|
117
|
+
* @returns {Promise<boolean>}
|
118
|
+
*/
|
119
|
+
export async function isGit() {
|
120
|
+
|
121
|
+
let currentPath = process.cwd();
|
122
|
+
while(currentPath!=='/') {
|
123
|
+
if (await exists(path.join(currentPath,'.git'))) {
|
124
|
+
return true;
|
125
|
+
}
|
126
|
+
currentPath = path.dirname(currentPath);
|
127
|
+
}
|
128
|
+
return false;
|
129
|
+
|
130
|
+
}
|
131
|
+
|
132
|
+
/**
|
133
|
+
* @param {string} command
|
134
|
+
* @returns {string}
|
135
|
+
*/
|
136
|
+
export function runCommand(command) {
|
137
|
+
|
138
|
+
process.stderr.write(command + '\n');
|
139
|
+
return execSync(command).toString('utf-8');
|
140
|
+
|
141
|
+
}
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Returns true if the current working directory is clean.
|
145
|
+
*
|
146
|
+
* @returns {boolean}
|
147
|
+
*/
|
148
|
+
export function isGitClean() {
|
149
|
+
|
150
|
+
const result = execSync('git status --porcelain=v1').toString('utf-8');
|
151
|
+
return result.trim().length === 0;
|
152
|
+
|
153
|
+
}
|