autorel 0.0.22 → 0.0.23
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 +9 -7
- package/dist/cli.d.ts +8 -1
- package/dist/cli.js +14 -14
- package/dist/config.d.ts +2 -2
- package/dist/config.js +6 -2
- package/dist/defaults.d.ts +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.js +23 -17
- package/dist/semver.d.ts +1 -0
- package/dist/semver.js +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Autorel automatically does the following, if appropriate:
|
|
|
23
23
|
- Unlike some other tools, `autorel` is 100% compliant with Conventional Commits and SemVer out of the box, including "!" for breaking changes
|
|
24
24
|
|
|
25
25
|
**😃 Simple & Easy to Use**
|
|
26
|
-
- No confusing configuration files
|
|
26
|
+
- No confusing configuration files or complex setup
|
|
27
27
|
- Works with any CI/CD system, including GitHub Actions
|
|
28
28
|
- Out of the box TypeScript support
|
|
29
29
|
|
|
@@ -35,7 +35,7 @@ Autorel automatically does the following, if appropriate:
|
|
|
35
35
|
# Example Usage (CLI)
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npx autorel --publish --run
|
|
38
|
+
npx autorel --publish --run 'echo "Next version is ${NEXT_VERSION}"'
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
This will:
|
|
@@ -43,7 +43,7 @@ This will:
|
|
|
43
43
|
1. Bump the version based on the commit messages since the last release (including pushing the tag and updating package.json)
|
|
44
44
|
2. Create a new release on GitHub with Release Notes
|
|
45
45
|
3. Publish the release to NPM
|
|
46
|
-
4. Run the command `echo "Next version is ${NEXT_VERSION}
|
|
46
|
+
4. Run the command `echo "Next version is ${NEXT_VERSION}"`
|
|
47
47
|
|
|
48
48
|
You can also install `autorel` globally and run it that way:
|
|
49
49
|
|
|
@@ -144,10 +144,12 @@ runScript: |
|
|
|
144
144
|
|
|
145
145
|
## pre-release
|
|
146
146
|
|
|
147
|
-
The pre-release channel to use. This will be appended to the version number. For example, if the version is `1.0.0` and the pre-release is `alpha`, the version will be `1.0.0-alpha.1`. For "production" releases,
|
|
147
|
+
The pre-release channel to use. This will be appended to the version number. For example, if the version is `1.0.0` and the pre-release is `alpha`, the version will be `1.0.0-alpha.1`. For "production" releases, the "latest" tag will be used for NPM.
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
This is typically set via the `branches` configuration (recommended), but can be overridden here.
|
|
150
|
+
|
|
151
|
+
- CLI: `--pre-release`
|
|
152
|
+
- Argument: `preRelease: string`
|
|
151
153
|
- Default: `undefined`
|
|
152
154
|
|
|
153
155
|
## breakingChangeTitle (YAML only)
|
|
@@ -217,7 +219,7 @@ You can find the types defined at [src/index.ts](src/index.ts).
|
|
|
217
219
|
- Issue a PR against `main` and request review. Make sure all tests pass and coverage is good.
|
|
218
220
|
- Write about `autorel` in your blog, tweet about it, or share it with your friends!
|
|
219
221
|
|
|
220
|
-
##
|
|
222
|
+
## Sponsors
|
|
221
223
|
|
|
222
224
|
<picture>
|
|
223
225
|
<source srcset="docs/aeroview-logo-lockup.svg" media="(prefers-color-scheme: dark)">
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -17,24 +17,24 @@ console.log('----------------------------');
|
|
|
17
17
|
program
|
|
18
18
|
.version(packageJson.version, '-v, --version')
|
|
19
19
|
.description('An example CLI for managing a directory')
|
|
20
|
-
.option('--dry', 'Do a dry run')
|
|
21
|
-
.option('--pre-release <value>', 'Pre-release channel. If specified, the release will be marked as a pre-release. Overrides
|
|
22
|
-
.option('--
|
|
23
|
-
.option('--run <value>', 'Command to run after the release is successful')
|
|
24
|
-
.option('--no-release', '
|
|
25
|
-
.option('--publish', 'Publish the package to npm, requires passing --npm-token or NPM_TOKEN environment variable')
|
|
20
|
+
.option('--dry', 'Do a dry run (arg: dryRun)')
|
|
21
|
+
.option('--pre-release <value>', 'Pre-release channel. If specified, the release will be marked as a pre-release. Overrides branches configuration. (arg: preRelease)')
|
|
22
|
+
.option('--use-version <value>', 'Specify a version to be used instead of calculating it from commit analysis. Must be a valid SemVer version, with no \'v\'. Overrides --pre-release, commitType, and branches configuration. (arg: useVersion)')
|
|
23
|
+
.option('--run <value>', 'Command to run after the release is successful. (arg: run)')
|
|
24
|
+
.option('--no-release', 'Skips creating a release on GitHub. (arg: noRelease)')
|
|
25
|
+
.option('--publish', 'Publish the package to npm, requires passing --npm-token or NPM_TOKEN environment variable. (arg: publish)')
|
|
26
26
|
.parse(process.argv);
|
|
27
27
|
const options = program.opts();
|
|
28
|
-
const
|
|
29
|
-
output_1.default.debug(`Options: ${JSON.stringify(options, null, 2)}`);
|
|
30
|
-
output_1.default.debug(`Config: ${JSON.stringify(config, null, 2)}`);
|
|
31
|
-
(0, _1.autorel)({
|
|
32
|
-
...config,
|
|
28
|
+
const cliOptions = {
|
|
33
29
|
dryRun: options.dry,
|
|
34
30
|
run: options.run,
|
|
35
31
|
prereleaseChannel: options.preRelease,
|
|
36
|
-
|
|
32
|
+
useVersion: options.useVersion,
|
|
37
33
|
publish: options.publish,
|
|
38
|
-
noRelease: options.
|
|
39
|
-
}
|
|
34
|
+
noRelease: options.release === false,
|
|
35
|
+
};
|
|
36
|
+
const config = (0, config_1.getConfig)(cliOptions);
|
|
37
|
+
output_1.default.debug(`CLI Options: ${JSON.stringify(cliOptions, null, 2)}`);
|
|
38
|
+
output_1.default.debug(`Config: ${JSON.stringify(config, null, 2)}`);
|
|
39
|
+
(0, _1.autorel)(config);
|
|
40
40
|
//# sourceMappingURL=cli.js.map
|
package/dist/config.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function getConfig():
|
|
1
|
+
import { Config } from '.';
|
|
2
|
+
export declare function getConfig(overrides?: Partial<Config>): Config;
|
package/dist/config.js
CHANGED
|
@@ -38,7 +38,7 @@ const validateConfig = rtype_1.predicates.object({
|
|
|
38
38
|
run: rtype_1.predicates.optional(rtype_1.predicates.string()),
|
|
39
39
|
runScript: rtype_1.predicates.optional(rtype_1.predicates.string()),
|
|
40
40
|
prereleaseChannel: rtype_1.predicates.optional(rtype_1.predicates.string()),
|
|
41
|
-
|
|
41
|
+
useVersion: rtype_1.predicates.optional(rtype_1.predicates.string()),
|
|
42
42
|
noRelease: rtype_1.predicates.optional(rtype_1.predicates.boolean()),
|
|
43
43
|
publish: rtype_1.predicates.optional(rtype_1.predicates.boolean()),
|
|
44
44
|
breakingChangeTitle: rtype_1.predicates.optional(rtype_1.predicates.string()),
|
|
@@ -64,6 +64,9 @@ function readAutorelYaml(filePath = '.autorel.yaml') {
|
|
|
64
64
|
output_1.default.log('.autorel.yaml not found, using default configuration');
|
|
65
65
|
return {};
|
|
66
66
|
}
|
|
67
|
+
else {
|
|
68
|
+
output_1.default.log('Using .autorel.yaml configuration');
|
|
69
|
+
}
|
|
67
70
|
const [readErr, fileContents] = (0, rtype_1.toResult)(() => fs.readFileSync(absolutePath, 'utf8'));
|
|
68
71
|
if (readErr) {
|
|
69
72
|
output_1.default.error('Error reading .autorel.yaml file:');
|
|
@@ -81,11 +84,12 @@ function readAutorelYaml(filePath = '.autorel.yaml') {
|
|
|
81
84
|
}
|
|
82
85
|
return parsedData;
|
|
83
86
|
}
|
|
84
|
-
function getConfig() {
|
|
87
|
+
function getConfig(overrides) {
|
|
85
88
|
const localConfig = readAutorelYaml();
|
|
86
89
|
return {
|
|
87
90
|
...defaults_1.defaultConfig,
|
|
88
91
|
...localConfig,
|
|
92
|
+
...overrides,
|
|
89
93
|
};
|
|
90
94
|
}
|
|
91
95
|
exports.getConfig = getConfig;
|
package/dist/defaults.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const defaultConfig:
|
|
1
|
+
import { Config } from '.';
|
|
2
|
+
export declare const defaultConfig: Config;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,17 +7,17 @@ export type ReleaseBranch = {
|
|
|
7
7
|
name: string;
|
|
8
8
|
prereleaseChannel?: string;
|
|
9
9
|
};
|
|
10
|
-
export type
|
|
10
|
+
export type Config = {
|
|
11
11
|
dryRun?: boolean;
|
|
12
12
|
run?: string;
|
|
13
13
|
runScript?: string;
|
|
14
14
|
prereleaseChannel?: string;
|
|
15
|
-
|
|
15
|
+
useVersion?: string;
|
|
16
16
|
noRelease?: boolean;
|
|
17
17
|
publish?: boolean;
|
|
18
18
|
breakingChangeTitle: string;
|
|
19
19
|
commitTypes: CommitType[];
|
|
20
20
|
branches: ReleaseBranch[];
|
|
21
21
|
};
|
|
22
|
-
export declare function getPrereleaseChannel(
|
|
23
|
-
export declare function autorel(args:
|
|
22
|
+
export declare function getPrereleaseChannel(config: Config): string | undefined;
|
|
23
|
+
export declare function autorel(args: Config): Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -36,16 +36,14 @@ const color = __importStar(require("./lib/colors"));
|
|
|
36
36
|
const changelog_1 = require("./changelog");
|
|
37
37
|
const github = __importStar(require("./services/github"));
|
|
38
38
|
const output_1 = __importDefault(require("./lib/output"));
|
|
39
|
-
const config_1 = require("./config");
|
|
40
39
|
const versionBump_1 = require("./versionBump");
|
|
41
40
|
const sh_1 = require("./lib/sh");
|
|
42
|
-
function getPrereleaseChannel(
|
|
43
|
-
if (
|
|
44
|
-
return
|
|
41
|
+
function getPrereleaseChannel(config) {
|
|
42
|
+
if (config.prereleaseChannel)
|
|
43
|
+
return config.prereleaseChannel;
|
|
45
44
|
const branch = git.getCurrentBranch();
|
|
46
45
|
if (!branch)
|
|
47
46
|
throw new Error('Could not get the current branch.');
|
|
48
|
-
const config = (0, config_1.getConfig)();
|
|
49
47
|
if (!config.branches || !config.branches.length)
|
|
50
48
|
throw new Error('Branches are not defined in the configuration.');
|
|
51
49
|
const matchingBranch = config.branches.find((b) => b.name === branch);
|
|
@@ -59,7 +57,7 @@ async function autorel(args) {
|
|
|
59
57
|
if (args.dryRun) {
|
|
60
58
|
output_1.default.warn('Running in dry-run mode. No changes will be made.');
|
|
61
59
|
}
|
|
62
|
-
if (prereleaseChannel && !args.
|
|
60
|
+
if (prereleaseChannel && !args.useVersion) {
|
|
63
61
|
output_1.default.log(`Using prerelease channel: ${color.bold(prereleaseChannel)}`);
|
|
64
62
|
}
|
|
65
63
|
const commitTypeMap = new Map(args.commitTypes.map((type) => [type.type, type]));
|
|
@@ -77,29 +75,39 @@ async function autorel(args) {
|
|
|
77
75
|
|| (releaseType === 'minor' && color.yellow('minor'))
|
|
78
76
|
|| (releaseType === 'patch' && color.green('patch'));
|
|
79
77
|
output_1.default.log(`The release type is: ${releaseTypeStr}`);
|
|
80
|
-
if (releaseType === 'none' && !args.
|
|
81
|
-
output_1.default.log('No release is needed. Have a nice day ^_^');
|
|
78
|
+
if (releaseType === 'none' && !args.useVersion) {
|
|
79
|
+
output_1.default.log('No release is needed. Have a nice day (^_^)/');
|
|
82
80
|
return;
|
|
83
81
|
}
|
|
84
|
-
const
|
|
85
|
-
if (args.
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
const nextTagCalculated = semver.incrementVersion(lastProdTag || 'v0.0.1', lastTag || 'v0.0.1', releaseType, prereleaseChannel);
|
|
83
|
+
if (args.useVersion) {
|
|
84
|
+
if (/^v(.+)$/.test(args.useVersion))
|
|
85
|
+
throw new Error('useVersion should not start with a "v".');
|
|
86
|
+
if (!semver.isValidVersion(args.useVersion))
|
|
87
|
+
throw new Error('useVersion must be a valid SemVer version');
|
|
88
|
+
if (releaseType === 'none') {
|
|
89
|
+
output_1.default.warn(`We didn't find any commmits that would create a release, but you have set 'useVersion', which will force a release as: ${color.bold(args.useVersion)}.`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
output_1.default.warn(`The next version would be ${nextTagCalculated}, but the version was set by useVersion to be: ${color.bold(args.useVersion)}.`);
|
|
93
|
+
}
|
|
94
|
+
output_1.default.warn('I hope you know what you\'re doing. (=^・ω・^=)');
|
|
88
95
|
}
|
|
89
96
|
else {
|
|
90
|
-
output_1.default.log(`The next version is: ${color.bold(
|
|
97
|
+
output_1.default.log(`The next version is: ${color.bold(nextTagCalculated)}`);
|
|
91
98
|
}
|
|
99
|
+
const nextTag = args.useVersion ? `v${args.useVersion}` : nextTagCalculated;
|
|
92
100
|
const changelog = (0, changelog_1.generateChangelog)(parsedCommits, commitTypeMap, args.breakingChangeTitle);
|
|
93
101
|
output_1.default.debug(`The changelog is:\n${changelog}`);
|
|
94
102
|
if (args.dryRun)
|
|
95
103
|
return;
|
|
96
|
-
git.createAndPushTag(
|
|
104
|
+
git.createAndPushTag(nextTag);
|
|
97
105
|
const { owner, repository } = git.getRepo();
|
|
98
106
|
!args.noRelease && github.createRelease({
|
|
99
107
|
token: process.env.GITHUB_TOKEN,
|
|
100
108
|
owner,
|
|
101
109
|
repository,
|
|
102
|
-
tag:
|
|
110
|
+
tag: nextTag,
|
|
103
111
|
name: nextTag,
|
|
104
112
|
body: changelog,
|
|
105
113
|
});
|
|
@@ -112,11 +120,9 @@ async function autorel(args) {
|
|
|
112
120
|
// run post-release script
|
|
113
121
|
if (args.run) {
|
|
114
122
|
output_1.default.log('Running post-release command:');
|
|
115
|
-
output_1.default.log('');
|
|
116
123
|
output_1.default.log('----------------------------');
|
|
117
124
|
output_1.default.log(args.run);
|
|
118
125
|
output_1.default.log('----------------------------');
|
|
119
|
-
output_1.default.log('');
|
|
120
126
|
(0, sh_1.cmd)(args.run);
|
|
121
127
|
}
|
|
122
128
|
else if (args.runScript) {
|
package/dist/semver.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export declare function incrPatch(version: Semver): Semver;
|
|
|
13
13
|
export declare function incrMinor(version: Semver): Semver;
|
|
14
14
|
export declare function incrMajor(version: Semver): Semver;
|
|
15
15
|
export declare function returnHighestVersion(version1: Semver, version2: Semver): Semver;
|
|
16
|
+
export declare function isValidVersion(ver: string): boolean;
|
|
16
17
|
export {};
|
package/dist/semver.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.returnHighestVersion = exports.incrMajor = exports.incrMinor = exports.incrPatch = exports.incrByType = exports.incrementVersion = exports.fromTag = exports.toTag = void 0;
|
|
3
|
+
exports.isValidVersion = exports.returnHighestVersion = exports.incrMajor = exports.incrMinor = exports.incrPatch = exports.incrByType = exports.incrementVersion = exports.fromTag = exports.toTag = void 0;
|
|
4
4
|
function toTag(version) {
|
|
5
5
|
let versionString = `${version.major}.${version.minor}.${version.patch}`;
|
|
6
6
|
if (version.channel) {
|
|
@@ -226,4 +226,8 @@ function returnHighestVersion(version1, version2) {
|
|
|
226
226
|
return version1;
|
|
227
227
|
}
|
|
228
228
|
exports.returnHighestVersion = returnHighestVersion;
|
|
229
|
+
function isValidVersion(ver) {
|
|
230
|
+
return !!fromTag(`v${ver}`);
|
|
231
|
+
}
|
|
232
|
+
exports.isValidVersion = isValidVersion;
|
|
229
233
|
//# sourceMappingURL=semver.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autorel",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"description": "Automate semantic releases based on conventional commits. Similar to semantic-release but much simpler.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Marc H. Weiner <mhweiner234@gmail.com> (https://mhweiner.com)",
|