release-monorepo-semantically 1.6.0 → 1.6.2
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 +126 -0
- package/dist/MonorepoController.d.ts +1 -0
- package/dist/MonorepoController.d.ts.map +1 -1
- package/dist/MonorepoController.js +14 -0
- package/dist/MonorepoController.js.map +1 -1
- package/dist/MonorepoController.spec.js +22 -0
- package/dist/MonorepoController.spec.js.map +1 -1
- package/dist/exceptions/DomainException.d.ts +20 -0
- package/dist/exceptions/DomainException.d.ts.map +1 -0
- package/dist/exceptions/DomainException.js +43 -0
- package/dist/exceptions/DomainException.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/main.spec.js +3 -3
- package/dist/main.spec.js.map +1 -1
- package/dist/models/NpmPackage.d.ts.map +1 -1
- package/dist/models/NpmPackage.js +2 -1
- package/dist/models/NpmPackage.js.map +1 -1
- package/dist/plugins/ChangelogPlugin.d.ts +1 -1
- package/dist/plugins/ChangelogPlugin.d.ts.map +1 -1
- package/dist/plugins/ChangelogPlugin.js +5 -1
- package/dist/plugins/ChangelogPlugin.js.map +1 -1
- package/dist/plugins/ChangelogPlugin.spec.d.ts +2 -0
- package/dist/plugins/ChangelogPlugin.spec.d.ts.map +1 -0
- package/dist/plugins/ChangelogPlugin.spec.js +106 -0
- package/dist/plugins/ChangelogPlugin.spec.js.map +1 -0
- package/dist/plugins/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/GitPlugin.js +1 -0
- package/dist/plugins/GitPlugin.js.map +1 -1
- package/dist/plugins/GitPlugin.spec.d.ts +2 -0
- package/dist/plugins/GitPlugin.spec.d.ts.map +1 -0
- package/dist/plugins/GitPlugin.spec.js +92 -0
- package/dist/plugins/GitPlugin.spec.js.map +1 -0
- package/dist/plugins/GithubPlugin.d.ts.map +1 -1
- package/dist/plugins/GithubPlugin.js +7 -2
- package/dist/plugins/GithubPlugin.js.map +1 -1
- package/dist/plugins/GithubPlugin.spec.js +1 -0
- package/dist/plugins/GithubPlugin.spec.js.map +1 -1
- package/dist/plugins/NpmPlugin.d.ts +1 -1
- package/dist/plugins/NpmPlugin.d.ts.map +1 -1
- package/dist/plugins/NpmPlugin.js +10 -2
- package/dist/plugins/NpmPlugin.js.map +1 -1
- package/dist/plugins/NpmPlugin.spec.d.ts +2 -0
- package/dist/plugins/NpmPlugin.spec.d.ts.map +1 -0
- package/dist/plugins/NpmPlugin.spec.js +101 -0
- package/dist/plugins/NpmPlugin.spec.js.map +1 -0
- package/dist/plugins/PackageJsonPlugin.d.ts +1 -1
- package/dist/plugins/PackageJsonPlugin.d.ts.map +1 -1
- package/dist/plugins/PackageJsonPlugin.js +5 -1
- package/dist/plugins/PackageJsonPlugin.js.map +1 -1
- package/dist/plugins/PackageJsonPlugin.spec.js +27 -0
- package/dist/plugins/PackageJsonPlugin.spec.js.map +1 -1
- package/dist/services/ExceptionHandler.d.ts +4 -0
- package/dist/services/ExceptionHandler.d.ts.map +1 -0
- package/dist/services/ExceptionHandler.js +15 -0
- package/dist/services/ExceptionHandler.js.map +1 -0
- package/dist/services/ExceptionHandler.spec.d.ts +2 -0
- package/dist/services/ExceptionHandler.spec.d.ts.map +1 -0
- package/dist/services/ExceptionHandler.spec.js +21 -0
- package/dist/services/ExceptionHandler.spec.js.map +1 -0
- package/dist/services/GitService.d.ts +1 -0
- package/dist/services/GitService.d.ts.map +1 -1
- package/dist/services/GitService.js +4 -0
- package/dist/services/GitService.js.map +1 -1
- package/dist/services/GitService.spec.js +8 -0
- package/dist/services/GitService.spec.js.map +1 -1
- package/dist/services/HandlebarsRenderService.d.ts.map +1 -1
- package/dist/services/HandlebarsRenderService.js +3 -2
- package/dist/services/HandlebarsRenderService.js.map +1 -1
- package/dist/services/ReleaseCommitView.spec.d.ts +2 -0
- package/dist/services/ReleaseCommitView.spec.d.ts.map +1 -0
- package/dist/services/ReleaseCommitView.spec.js +35 -0
- package/dist/services/ReleaseCommitView.spec.js.map +1 -0
- package/package.json +2 -1
- package/templates/changelog.hbs +5 -5
- package/dist/plugins/ReleasePlugin.spec.d.ts +0 -2
- package/dist/plugins/ReleasePlugin.spec.d.ts.map +0 -1
- package/dist/plugins/ReleasePlugin.spec.js +0 -108
- package/dist/plugins/ReleasePlugin.spec.js.map +0 -1
- package/dist/services/ErrorHandler.d.ts +0 -4
- package/dist/services/ErrorHandler.d.ts.map +0 -1
- package/dist/services/ErrorHandler.js +0 -10
- package/dist/services/ErrorHandler.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# monorepo-semantic-release
|
|
2
|
+
|
|
3
|
+
CLI for semantic versioning and release automation in `pnpm` monorepos.
|
|
4
|
+
|
|
5
|
+
It discovers workspace packages, analyzes conventional commits per package scope, bumps versions in dependency order, updates internal dependency versions, generates changelogs, creates a release commit and tags, optionally creates GitHub Releases, and publishes to npm.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Node.js: `>=22 <23`
|
|
10
|
+
- pnpm: `10.20.0`
|
|
11
|
+
- Git repository with conventional commits
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm add -D release-monorepo-semantically
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Run from your monorepo root:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm monorepo-semantic-release
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Commit conventions
|
|
26
|
+
|
|
27
|
+
Release-triggering commits:
|
|
28
|
+
|
|
29
|
+
- `feat(scope): ...` -> `minor`
|
|
30
|
+
- `fix(scope): ...` -> `patch`
|
|
31
|
+
- `perf(scope): ...` -> `patch`
|
|
32
|
+
- `BREAKING CHANGE` or `!` -> `major`
|
|
33
|
+
|
|
34
|
+
Non-release types: `docs`, `test`, `ci`, `chore`, `refactor`, `style`.
|
|
35
|
+
|
|
36
|
+
Package scope is matched by package name.
|
|
37
|
+
|
|
38
|
+
## Release flow
|
|
39
|
+
|
|
40
|
+
1. Discover workspace packages from root `package.json` workspaces.
|
|
41
|
+
2. Exclude private packages.
|
|
42
|
+
3. Sort packages so dependencies are processed first.
|
|
43
|
+
4. Read commits since `<package-name>@<version>` tag.
|
|
44
|
+
5. Compute bump type (`major > minor > patch > none`).
|
|
45
|
+
6. Update package versions and internal dependency versions.
|
|
46
|
+
7. Render changelog entries.
|
|
47
|
+
8. Create one release commit and per-package tags.
|
|
48
|
+
9. Push commit/tags (unless disabled).
|
|
49
|
+
10. Create GitHub Releases (if configured).
|
|
50
|
+
11. Publish released packages (unless disabled).
|
|
51
|
+
|
|
52
|
+
## CLI options
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
monorepo-semantic-release [options]
|
|
56
|
+
|
|
57
|
+
Options:
|
|
58
|
+
--dry-run Preview changes without mutating files/git/publish
|
|
59
|
+
--no-push Skip git push
|
|
60
|
+
--no-publish Skip npm publish
|
|
61
|
+
--changelog-template <path> Override changelog template
|
|
62
|
+
--release-commit-template <path> Override release commit template
|
|
63
|
+
-h, --help Show help
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Template overrides
|
|
67
|
+
|
|
68
|
+
You can override templates via CLI options or root `package.json`:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"releaseTemplates": {
|
|
73
|
+
"changelogTemplate": "templates/changelog.hbs",
|
|
74
|
+
"releaseCommitTemplate": "templates/release-commit-msg.hbs"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Built-in templates:
|
|
80
|
+
|
|
81
|
+
- `templates/changelog.hbs`
|
|
82
|
+
- `templates/release-commit-msg.hbs`
|
|
83
|
+
- `templates/github-release-notes.hbs`
|
|
84
|
+
|
|
85
|
+
## GitHub Releases
|
|
86
|
+
|
|
87
|
+
GitHub release creation runs only when all conditions are met:
|
|
88
|
+
|
|
89
|
+
- `GITHUB_ACTIONS=true`
|
|
90
|
+
- `GITHUB_REPOSITORY` is set (for example `owner/repo`)
|
|
91
|
+
- `GITHUB_TOKEN` is set
|
|
92
|
+
- `gh` CLI is available
|
|
93
|
+
- not `--dry-run`
|
|
94
|
+
- not `--no-push`
|
|
95
|
+
|
|
96
|
+
Each released package creates a release:
|
|
97
|
+
|
|
98
|
+
- tag: `<package-name>@<version>`
|
|
99
|
+
- title: `<package-name> v<version>`
|
|
100
|
+
- notes rendered from `templates/github-release-notes.hbs`
|
|
101
|
+
|
|
102
|
+
## Plugin architecture
|
|
103
|
+
|
|
104
|
+
Release lifecycle is implemented by plugins:
|
|
105
|
+
|
|
106
|
+
- `PackageJsonPlugin`: updates internal dependency versions in `package.json`
|
|
107
|
+
- `ChangelogPlugin`: writes per-package changelog updates
|
|
108
|
+
- `GitPlugin`: creates release commit, tags, and push
|
|
109
|
+
- `GithubPlugin`: creates GitHub Releases
|
|
110
|
+
- `NpmPlugin`: bumps package version and publishes
|
|
111
|
+
|
|
112
|
+
## Development
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pnpm install
|
|
116
|
+
pnpm run build
|
|
117
|
+
pnpm test
|
|
118
|
+
pnpm run test:e2e
|
|
119
|
+
pnpm run lint
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Notes
|
|
123
|
+
|
|
124
|
+
- Internal monorepo dependencies are written as exact versions.
|
|
125
|
+
- Tag format is fixed: `<package-name>@<version>`.
|
|
126
|
+
- In `--dry-run`, no files/git/releases/publish actions are performed.
|
|
@@ -14,6 +14,7 @@ export declare class MonorepoController {
|
|
|
14
14
|
discoverPackages(monorepoPath: string): void;
|
|
15
15
|
release(options?: ReleaseOptions): void;
|
|
16
16
|
private logStep;
|
|
17
|
+
private ensureWritableReleaseState;
|
|
17
18
|
}
|
|
18
19
|
export {};
|
|
19
20
|
//# sourceMappingURL=MonorepoController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonorepoController.d.ts","sourceRoot":"","sources":["../src/MonorepoController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"MonorepoController.d.ts","sourceRoot":"","sources":["../src/MonorepoController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,KAAK,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;AAEnF,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,iBAAiB,CAAoB;gBAG1B,OAAO,EAAE,aAAa,EAAE,EACjC,EAAE,EAAE,qBAAqB,EACzB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,aAAa;IAG/B,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQ5C,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI;IAsD3C,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,0BAA0B;CASnC"}
|
|
@@ -4,6 +4,7 @@ exports.MonorepoController = void 0;
|
|
|
4
4
|
const NpmPackage_1 = require("./models/NpmPackage");
|
|
5
5
|
const SemVerBumpType_1 = require("./models/SemVerBumpType");
|
|
6
6
|
const sortLessDependenciesFirst_1 = require("./sortLessDependenciesFirst");
|
|
7
|
+
const DomainException_1 = require("./exceptions/DomainException");
|
|
7
8
|
class MonorepoController {
|
|
8
9
|
plugins;
|
|
9
10
|
fs;
|
|
@@ -25,6 +26,7 @@ class MonorepoController {
|
|
|
25
26
|
const { dryRun = false, noPush = false, noPublish = false } = options;
|
|
26
27
|
const releasedVersions = new Map();
|
|
27
28
|
const releasedCommits = new Map();
|
|
29
|
+
let releaseStarted = false;
|
|
28
30
|
for (const pkg of this.packageSortedList) {
|
|
29
31
|
const pkgReleaseCommits = this.vsc.findManyCommitsSinceTag(pkg.getCommitTag()).filter((c) => c.matchesScope(pkg.name) && c.isReleaseTrigger());
|
|
30
32
|
const dependencyUpdates = pkg.getDependencyUpdates(releasedVersions);
|
|
@@ -33,6 +35,10 @@ class MonorepoController {
|
|
|
33
35
|
this.logStep('SKIP', `${pkg.name}@${pkg.version}`);
|
|
34
36
|
continue;
|
|
35
37
|
}
|
|
38
|
+
if (!releaseStarted) {
|
|
39
|
+
this.ensureWritableReleaseState(dryRun);
|
|
40
|
+
releaseStarted = true;
|
|
41
|
+
}
|
|
36
42
|
const newVersion = pkg.getNewVersion(versionBump);
|
|
37
43
|
releasedVersions.set(pkg.name, newVersion);
|
|
38
44
|
releasedCommits.set(pkg.name, pkgReleaseCommits);
|
|
@@ -63,6 +69,14 @@ class MonorepoController {
|
|
|
63
69
|
logStep(step, detail) {
|
|
64
70
|
this.logger.info(`${step.padEnd(8)} ${detail}`);
|
|
65
71
|
}
|
|
72
|
+
ensureWritableReleaseState(dryRun) {
|
|
73
|
+
if (dryRun) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!this.vsc.isWorkingTreeClean()) {
|
|
77
|
+
throw new DomainException_1.DirtyWorkingTreeException();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
66
80
|
}
|
|
67
81
|
exports.MonorepoController = MonorepoController;
|
|
68
82
|
//# sourceMappingURL=MonorepoController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonorepoController.js","sourceRoot":"","sources":["../src/MonorepoController.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AACjD,4DAA+F;AAC/F,2EAAwE;
|
|
1
|
+
{"version":3,"file":"MonorepoController.js","sourceRoot":"","sources":["../src/MonorepoController.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ const vitest_1 = require("vitest");
|
|
|
4
4
|
const MonorepoController_1 = require("./MonorepoController");
|
|
5
5
|
const NpmPackage_1 = require("./models/NpmPackage");
|
|
6
6
|
const ConventionalCommit_1 = require("./models/ConventionalCommit");
|
|
7
|
+
const DomainException_1 = require("./exceptions/DomainException");
|
|
7
8
|
(0, vitest_1.describe)('MonorepoController.discoverPackages', () => {
|
|
8
9
|
(0, vitest_1.it)('given workspace package json files when packages are discovered then private packages are excluded', () => {
|
|
9
10
|
const fs = {
|
|
@@ -28,6 +29,7 @@ const ConventionalCommit_1 = require("./models/ConventionalCommit");
|
|
|
28
29
|
};
|
|
29
30
|
const vsc = {
|
|
30
31
|
findManyCommitsSinceTag: vitest_1.vi.fn().mockReturnValue([]),
|
|
32
|
+
isWorkingTreeClean: vitest_1.vi.fn().mockReturnValue(true),
|
|
31
33
|
};
|
|
32
34
|
const logger = {
|
|
33
35
|
info: vitest_1.vi.fn(),
|
|
@@ -57,6 +59,7 @@ const ConventionalCommit_1 = require("./models/ConventionalCommit");
|
|
|
57
59
|
findManyCommitsSinceTag: vitest_1.vi
|
|
58
60
|
.fn()
|
|
59
61
|
.mockImplementation((tag) => tag === 'pkg-a@1.0.0' ? [ConventionalCommit_1.ConventionalCommit.parse('feat(pkg-a): add feature')] : [ConventionalCommit_1.ConventionalCommit.parse('fix(pkg-b): resolve bug')]),
|
|
62
|
+
isWorkingTreeClean: vitest_1.vi.fn().mockReturnValue(true),
|
|
60
63
|
};
|
|
61
64
|
const logger = {
|
|
62
65
|
info: vitest_1.vi.fn(),
|
|
@@ -77,5 +80,24 @@ const ConventionalCommit_1 = require("./models/ConventionalCommit");
|
|
|
77
80
|
(0, vitest_1.expect)(finalizeArg.releasedCommits.get('pkg-a')).toHaveLength(1);
|
|
78
81
|
(0, vitest_1.expect)(finalizeArg.releasedCommits.get('pkg-b')).toHaveLength(1);
|
|
79
82
|
});
|
|
83
|
+
(0, vitest_1.it)('given dirty working tree when a non-dry-run release starts then it fails before plugin hooks mutate state', () => {
|
|
84
|
+
const plugin = {
|
|
85
|
+
onPackageReleased: vitest_1.vi.fn(),
|
|
86
|
+
onReleaseComplete: vitest_1.vi.fn(),
|
|
87
|
+
};
|
|
88
|
+
const vsc = {
|
|
89
|
+
findManyCommitsSinceTag: vitest_1.vi.fn().mockReturnValue([ConventionalCommit_1.ConventionalCommit.parse('fix(pkg-a): patch')]),
|
|
90
|
+
isWorkingTreeClean: vitest_1.vi.fn().mockReturnValue(false),
|
|
91
|
+
};
|
|
92
|
+
const logger = {
|
|
93
|
+
info: vitest_1.vi.fn(),
|
|
94
|
+
};
|
|
95
|
+
const controller = new MonorepoController_1.MonorepoController([plugin], {}, vsc, logger);
|
|
96
|
+
const pkg = NpmPackage_1.NpmPackage.createFromPackage({ name: 'pkg-a', version: '1.0.0' }, '/repo/packages/pkg-a/package.json');
|
|
97
|
+
controller.packageSortedList = [pkg];
|
|
98
|
+
(0, vitest_1.expect)(() => controller.release()).toThrow(DomainException_1.DirtyWorkingTreeException);
|
|
99
|
+
(0, vitest_1.expect)(plugin.onPackageReleased).not.toHaveBeenCalled();
|
|
100
|
+
(0, vitest_1.expect)(plugin.onReleaseComplete).not.toHaveBeenCalled();
|
|
101
|
+
});
|
|
80
102
|
});
|
|
81
103
|
//# sourceMappingURL=MonorepoController.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonorepoController.spec.js","sourceRoot":"","sources":["../src/MonorepoController.spec.ts"],"names":[],"mappings":";;AAAA,mCAAkD;AAClD,6DAA0D;AAC1D,oDAAiD;AACjD,oEAAiE;
|
|
1
|
+
{"version":3,"file":"MonorepoController.spec.js","sourceRoot":"","sources":["../src/MonorepoController.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare abstract class DomainException extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
protected constructor(code: string, message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class MissingDependencyVersionException extends DomainException {
|
|
6
|
+
constructor(packageName: string, dependencyName: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class GithubCliUnavailableException extends DomainException {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
11
|
+
export declare class TemplateInvocationTargetException extends DomainException {
|
|
12
|
+
constructor(methodName: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class TemplateMethodNotFunctionException extends DomainException {
|
|
15
|
+
constructor(methodName: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class DirtyWorkingTreeException extends DomainException {
|
|
18
|
+
constructor();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=DomainException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainException.d.ts","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":"AAAA,8BAAsB,eAAgB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM;IADvB,SAAS,aACE,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAGxD;AAED,qBAAa,6BAA8B,SAAQ,eAAe;;CAIjE;AAED,qBAAa,iCAAkC,SAAQ,eAAe;gBACxD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,kCAAmC,SAAQ,eAAe;gBACzD,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,yBAA0B,SAAQ,eAAe;;CAI7D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DirtyWorkingTreeException = exports.TemplateMethodNotFunctionException = exports.TemplateInvocationTargetException = exports.GithubCliUnavailableException = exports.MissingDependencyVersionException = exports.DomainException = void 0;
|
|
4
|
+
class DomainException extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = new.target.name;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.DomainException = DomainException;
|
|
13
|
+
class MissingDependencyVersionException extends DomainException {
|
|
14
|
+
constructor(packageName, dependencyName) {
|
|
15
|
+
super('MISSING_DEPENDENCY_VERSION', `Dependency ${dependencyName} not found in ${packageName}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.MissingDependencyVersionException = MissingDependencyVersionException;
|
|
19
|
+
class GithubCliUnavailableException extends DomainException {
|
|
20
|
+
constructor() {
|
|
21
|
+
super('GITHUB_CLI_UNAVAILABLE', 'GitHub release creation requires `gh` CLI when running in GitHub Actions');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.GithubCliUnavailableException = GithubCliUnavailableException;
|
|
25
|
+
class TemplateInvocationTargetException extends DomainException {
|
|
26
|
+
constructor(methodName) {
|
|
27
|
+
super('TEMPLATE_INVOCATION_TARGET_INVALID', `Cannot call method ${methodName} on non-object target`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.TemplateInvocationTargetException = TemplateInvocationTargetException;
|
|
31
|
+
class TemplateMethodNotFunctionException extends DomainException {
|
|
32
|
+
constructor(methodName) {
|
|
33
|
+
super('TEMPLATE_METHOD_NOT_FUNCTION', `Method ${methodName} is not a function`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.TemplateMethodNotFunctionException = TemplateMethodNotFunctionException;
|
|
37
|
+
class DirtyWorkingTreeException extends DomainException {
|
|
38
|
+
constructor() {
|
|
39
|
+
super('DIRTY_WORKING_TREE', 'Release requires a clean working tree (commit or stash local changes first)');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DirtyWorkingTreeException = DirtyWorkingTreeException;
|
|
43
|
+
//# sourceMappingURL=DomainException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainException.js","sourceRoot":"","sources":["../../src/exceptions/DomainException.ts"],"names":[],"mappings":";;;AAAA,MAAsB,eAAgB,SAAQ,KAAK;IAEtC;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AARD,0CAQC;AAED,MAAa,iCAAkC,SAAQ,eAAe;IACpE,YAAY,WAAmB,EAAE,cAAsB;QACrD,KAAK,CAAC,4BAA4B,EAAE,cAAc,cAAc,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAClG,CAAC;CACF;AAJD,8EAIC;AAED,MAAa,6BAA8B,SAAQ,eAAe;IAChE;QACE,KAAK,CAAC,wBAAwB,EAAE,0EAA0E,CAAC,CAAC;IAC9G,CAAC;CACF;AAJD,sEAIC;AAED,MAAa,iCAAkC,SAAQ,eAAe;IACpE,YAAY,UAAkB;QAC5B,KAAK,CAAC,oCAAoC,EAAE,sBAAsB,UAAU,uBAAuB,CAAC,CAAC;IACvG,CAAC;CACF;AAJD,8EAIC;AAED,MAAa,kCAAmC,SAAQ,eAAe;IACrE,YAAY,UAAkB;QAC5B,KAAK,CAAC,8BAA8B,EAAE,UAAU,UAAU,oBAAoB,CAAC,CAAC;IAClF,CAAC;CACF;AAJD,gFAIC;AAED,MAAa,yBAA0B,SAAQ,eAAe;IAC5D;QACE,KAAK,CAAC,oBAAoB,EAAE,6EAA6E,CAAC,CAAC;IAC7G,CAAC;CACF;AAJD,8DAIC"}
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ const HandlebarsRenderService_1 = require("./services/HandlebarsRenderService");
|
|
|
13
13
|
const ReleaseCommitView_1 = require("./services/ReleaseCommitView");
|
|
14
14
|
const PackageManager_1 = require("./services/PackageManager");
|
|
15
15
|
const ConsoleLogger_1 = require("./services/ConsoleLogger");
|
|
16
|
-
const
|
|
16
|
+
const ExceptionHandler_1 = require("./services/ExceptionHandler");
|
|
17
17
|
const commander_1 = require("commander");
|
|
18
18
|
const node_path_1 = __importDefault(require("node:path"));
|
|
19
19
|
const ChangelogPlugin_1 = require("./plugins/ChangelogPlugin");
|
|
@@ -75,7 +75,7 @@ function runCli(cwd = process.cwd(), cliArgs = process.argv.slice(2)) {
|
|
|
75
75
|
const cliOptions = parseCliOptions(cliArgs);
|
|
76
76
|
const fsService = new NodeFileSystemService_1.NodeFileSystemService();
|
|
77
77
|
const vcsService = new GitService_1.GitService();
|
|
78
|
-
const
|
|
78
|
+
const exceptionHandler = new ExceptionHandler_1.ExceptionHandler();
|
|
79
79
|
if (cliOptions.help) {
|
|
80
80
|
return 0;
|
|
81
81
|
}
|
|
@@ -105,7 +105,7 @@ function runCli(cwd = process.cwd(), cliArgs = process.argv.slice(2)) {
|
|
|
105
105
|
return 0;
|
|
106
106
|
}
|
|
107
107
|
catch (error) {
|
|
108
|
-
|
|
108
|
+
exceptionHandler.handle(error);
|
|
109
109
|
return 1;
|
|
110
110
|
}
|
|
111
111
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAsCA,0CA8BC;AAYD,wBA6CC;AA7HD,6DAA0D;AAC1D,4EAAyE;AACzE,sDAAmD;AACnD,4DAAqF;AACrF,gFAA6E;AAC7E,oEAAkG;AAClG,8DAA2D;AAC3D,4DAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/main.spec.js
CHANGED
|
@@ -4,7 +4,7 @@ const vitest_1 = require("vitest");
|
|
|
4
4
|
const index_1 = require("./index");
|
|
5
5
|
const MonorepoController_1 = require("./MonorepoController");
|
|
6
6
|
const NodeFileSystemService_1 = require("./services/NodeFileSystemService");
|
|
7
|
-
const
|
|
7
|
+
const ExceptionHandler_1 = require("./services/ExceptionHandler");
|
|
8
8
|
(0, vitest_1.describe)('runCli', () => {
|
|
9
9
|
(0, vitest_1.afterEach)(() => {
|
|
10
10
|
vitest_1.vi.restoreAllMocks();
|
|
@@ -46,9 +46,9 @@ const ErrorHandler_1 = require("./services/ErrorHandler");
|
|
|
46
46
|
releaseCommitTemplate: 'templates/custom-release.hbs',
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
-
(0, vitest_1.it)('given a runtime error when the cli fails then it delegates error reporting to
|
|
49
|
+
(0, vitest_1.it)('given a runtime error when the cli fails then it delegates error reporting to ExceptionHandler', () => {
|
|
50
50
|
const expectedError = new Error('boom');
|
|
51
|
-
const handleSpy = vitest_1.vi.spyOn(
|
|
51
|
+
const handleSpy = vitest_1.vi.spyOn(ExceptionHandler_1.ExceptionHandler.prototype, 'handle').mockImplementation(() => undefined);
|
|
52
52
|
vitest_1.vi.spyOn(NodeFileSystemService_1.NodeFileSystemService.prototype, 'readJson').mockImplementation(() => {
|
|
53
53
|
throw expectedError;
|
|
54
54
|
});
|
package/dist/main.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.spec.js","sourceRoot":"","sources":["../src/main.spec.ts"],"names":[],"mappings":";;AAAA,mCAA6D;AAC7D,mCAAkD;AAClD,6DAA0D;AAC1D,4EAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"main.spec.js","sourceRoot":"","sources":["../src/main.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmPackage.d.ts","sourceRoot":"","sources":["../../src/models/NpmPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"NpmPackage.d.ts","sourceRoot":"","sources":["../../src/models/NpmPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,qBAAa,UAAW,YAAW,QAAQ;IAMvC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAVlD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU;gBAKnE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGlD,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAIvD,aAAa,CAAC,UAAU,EAAE,MAAM;IAIhC,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,iCAAiC;IAQzC,OAAO,CAAC,qBAAqB;IAK7B,oBAAoB,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,uBAAuB,EAAE;IAiBtF,oBAAoB,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI1D,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;CAahD"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NpmPackage = void 0;
|
|
4
4
|
const SemVerBumpType_1 = require("./SemVerBumpType");
|
|
5
|
+
const DomainException_1 = require("../exceptions/DomainException");
|
|
5
6
|
class NpmPackage {
|
|
6
7
|
name;
|
|
7
8
|
dirname;
|
|
@@ -32,7 +33,7 @@ class NpmPackage {
|
|
|
32
33
|
findDependencyVersionByNameOrFail(depName) {
|
|
33
34
|
const dependencyVersion = this.dependencies[depName] ?? this.devDependencies[depName];
|
|
34
35
|
if (!dependencyVersion) {
|
|
35
|
-
throw new
|
|
36
|
+
throw new DomainException_1.MissingDependencyVersionException(this.name, depName);
|
|
36
37
|
}
|
|
37
38
|
return dependencyVersion;
|
|
38
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmPackage.js","sourceRoot":"","sources":["../../src/models/NpmPackage.ts"],"names":[],"mappings":";;;AAGA,qDAAkD;
|
|
1
|
+
{"version":3,"file":"NpmPackage.js","sourceRoot":"","sources":["../../src/models/NpmPackage.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,6 @@ export declare class ChangelogPlugin implements ReleasePlugin {
|
|
|
8
8
|
private readonly fs;
|
|
9
9
|
private readonly logger;
|
|
10
10
|
constructor(changelogName: string, view: ChangelogView, fs: NodeFileSystemService, logger: ConsoleLogger);
|
|
11
|
-
onPackageReleased({ pkg, releasedCommits, releasedVersions, releasedPackages }: PackageReleasedPluginContext): void;
|
|
11
|
+
onPackageReleased({ dryRun, pkg, releasedCommits, releasedVersions, releasedPackages }: PackageReleasedPluginContext): void;
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=ChangelogPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangelogPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/ChangelogPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,qBAAqB,EACzB,MAAM,EAAE,aAAa;IAGxC,iBAAiB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,4BAA4B,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ChangelogPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/ChangelogPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,qBAAqB,EACzB,MAAM,EAAE,aAAa;IAGxC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,4BAA4B,GAAG,IAAI;CAiB5H"}
|
|
@@ -16,7 +16,11 @@ class ChangelogPlugin {
|
|
|
16
16
|
this.fs = fs;
|
|
17
17
|
this.logger = logger;
|
|
18
18
|
}
|
|
19
|
-
onPackageReleased({ pkg, releasedCommits, releasedVersions, releasedPackages }) {
|
|
19
|
+
onPackageReleased({ dryRun, pkg, releasedCommits, releasedVersions, releasedPackages }) {
|
|
20
|
+
if (dryRun) {
|
|
21
|
+
this.logger.info(`SKIP ${pkg.name} ${this.changelogName} (dry-run)`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
20
24
|
const changelogFile = node_path_1.default.resolve(pkg.dirname, this.changelogName);
|
|
21
25
|
const content = this.view.render({
|
|
22
26
|
pkg,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangelogPlugin.js","sourceRoot":"","sources":["../../src/plugins/ChangelogPlugin.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAM7B,MAAa,eAAe;IAEP;IACA;IACA;IACA;IAJnB,YACmB,aAAqB,EACrB,IAAmB,EACnB,EAAyB,EACzB,MAAqB;QAHrB,kBAAa,GAAb,aAAa,CAAQ;QACrB,SAAI,GAAJ,IAAI,CAAe;QACnB,OAAE,GAAF,EAAE,CAAuB;QACzB,WAAM,GAAN,MAAM,CAAe;IACrC,CAAC;IAEJ,iBAAiB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAgC;
|
|
1
|
+
{"version":3,"file":"ChangelogPlugin.js","sourceRoot":"","sources":["../../src/plugins/ChangelogPlugin.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAM7B,MAAa,eAAe;IAEP;IACA;IACA;IACA;IAJnB,YACmB,aAAqB,EACrB,IAAmB,EACnB,EAAyB,EACzB,MAAqB;QAHrB,kBAAa,GAAb,aAAa,CAAQ;QACrB,SAAI,GAAJ,IAAI,CAAe;QACnB,OAAE,GAAF,EAAE,CAAuB;QACzB,WAAM,GAAN,MAAM,CAAe;IACrC,CAAC;IAEJ,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAgC;QAClH,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,YAAY,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,GAAG;YACH,gBAAgB;YAChB,gBAAgB;YAChB,eAAe;YACf,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;SACnF,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACjE,CAAC;CACF;AAzBD,0CAyBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangelogPlugin.spec.d.ts","sourceRoot":"","sources":["../../src/plugins/ChangelogPlugin.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const ChangelogPlugin_1 = require("./ChangelogPlugin");
|
|
5
|
+
const NpmPackage_1 = require("../models/NpmPackage");
|
|
6
|
+
const ConventionalCommit_1 = require("../models/ConventionalCommit");
|
|
7
|
+
(0, vitest_1.describe)('ChangelogPlugin', () => {
|
|
8
|
+
(0, vitest_1.it)('given dry run when package is released then changelog write is skipped', () => {
|
|
9
|
+
const view = {
|
|
10
|
+
render: vitest_1.vi.fn().mockReturnValue('new changelog'),
|
|
11
|
+
};
|
|
12
|
+
const fs = {
|
|
13
|
+
fileExists: vitest_1.vi.fn().mockReturnValue(true),
|
|
14
|
+
readFile: vitest_1.vi.fn().mockReturnValue('old changelog'),
|
|
15
|
+
writeFile: vitest_1.vi.fn(),
|
|
16
|
+
};
|
|
17
|
+
const logger = {
|
|
18
|
+
info: vitest_1.vi.fn(),
|
|
19
|
+
};
|
|
20
|
+
const plugin = new ChangelogPlugin_1.ChangelogPlugin('CHANGELOG.md', view, fs, logger);
|
|
21
|
+
const pkg = NpmPackage_1.NpmPackage.createFromPackage({ name: 'pkg-a', version: '1.0.0' }, '/repo/packages/pkg-a');
|
|
22
|
+
plugin.onPackageReleased?.({
|
|
23
|
+
dryRun: true,
|
|
24
|
+
noPush: false,
|
|
25
|
+
noPublish: false,
|
|
26
|
+
pkg,
|
|
27
|
+
releasedVersions: new Map([['pkg-a', '1.0.1']]),
|
|
28
|
+
releasedPackages: [pkg],
|
|
29
|
+
releasedCommits: [ConventionalCommit_1.ConventionalCommit.parse('fix(pkg-a): patch')],
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.expect)(view.render).not.toHaveBeenCalled();
|
|
32
|
+
(0, vitest_1.expect)(fs.readFile).not.toHaveBeenCalled();
|
|
33
|
+
(0, vitest_1.expect)(fs.writeFile).not.toHaveBeenCalled();
|
|
34
|
+
(0, vitest_1.expect)(logger.info).toHaveBeenCalledWith('SKIP pkg-a CHANGELOG.md (dry-run)');
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('given missing changelog when package is released then empty existing content is passed to view', () => {
|
|
37
|
+
const view = {
|
|
38
|
+
render: vitest_1.vi.fn().mockReturnValue('new changelog'),
|
|
39
|
+
};
|
|
40
|
+
const fs = {
|
|
41
|
+
fileExists: vitest_1.vi.fn().mockReturnValue(false),
|
|
42
|
+
readFile: vitest_1.vi.fn(),
|
|
43
|
+
writeFile: vitest_1.vi.fn(),
|
|
44
|
+
};
|
|
45
|
+
const logger = {
|
|
46
|
+
info: vitest_1.vi.fn(),
|
|
47
|
+
};
|
|
48
|
+
const plugin = new ChangelogPlugin_1.ChangelogPlugin('CHANGELOG.md', view, fs, logger);
|
|
49
|
+
const pkg = NpmPackage_1.NpmPackage.createFromPackage({ name: 'pkg-a', version: '1.0.0' }, '/repo/packages/pkg-a');
|
|
50
|
+
const commits = [ConventionalCommit_1.ConventionalCommit.parse('fix(pkg-a): patch')];
|
|
51
|
+
plugin.onPackageReleased?.({
|
|
52
|
+
dryRun: false,
|
|
53
|
+
noPush: false,
|
|
54
|
+
noPublish: false,
|
|
55
|
+
pkg,
|
|
56
|
+
releasedVersions: new Map([['pkg-a', '1.0.1']]),
|
|
57
|
+
releasedPackages: [pkg],
|
|
58
|
+
releasedCommits: commits,
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.expect)(view.render).toHaveBeenCalledWith({
|
|
61
|
+
pkg,
|
|
62
|
+
releasedPackages: [pkg],
|
|
63
|
+
releasedVersions: new Map([['pkg-a', '1.0.1']]),
|
|
64
|
+
releasedCommits: commits,
|
|
65
|
+
existing: '',
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.expect)(fs.readFile).not.toHaveBeenCalled();
|
|
68
|
+
(0, vitest_1.expect)(fs.writeFile).toHaveBeenCalledWith('/repo/packages/pkg-a/CHANGELOG.md', 'new changelog');
|
|
69
|
+
(0, vitest_1.expect)(logger.info).toHaveBeenCalledWith('WRITE pkg-a CHANGELOG.md');
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.it)('given existing changelog when package is released then existing content is passed to view and file is rewritten', () => {
|
|
72
|
+
const view = {
|
|
73
|
+
render: vitest_1.vi.fn().mockReturnValue('new changelog'),
|
|
74
|
+
};
|
|
75
|
+
const fs = {
|
|
76
|
+
fileExists: vitest_1.vi.fn().mockReturnValue(true),
|
|
77
|
+
readFile: vitest_1.vi.fn().mockReturnValue('old changelog'),
|
|
78
|
+
writeFile: vitest_1.vi.fn(),
|
|
79
|
+
};
|
|
80
|
+
const logger = {
|
|
81
|
+
info: vitest_1.vi.fn(),
|
|
82
|
+
};
|
|
83
|
+
const plugin = new ChangelogPlugin_1.ChangelogPlugin('CHANGELOG.md', view, fs, logger);
|
|
84
|
+
const pkg = NpmPackage_1.NpmPackage.createFromPackage({ name: 'pkg-a', version: '1.0.0' }, '/repo/packages/pkg-a');
|
|
85
|
+
const commits = [ConventionalCommit_1.ConventionalCommit.parse('fix(pkg-a): patch')];
|
|
86
|
+
plugin.onPackageReleased?.({
|
|
87
|
+
dryRun: false,
|
|
88
|
+
noPush: false,
|
|
89
|
+
noPublish: false,
|
|
90
|
+
pkg,
|
|
91
|
+
releasedVersions: new Map([['pkg-a', '1.0.1']]),
|
|
92
|
+
releasedPackages: [pkg],
|
|
93
|
+
releasedCommits: commits,
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.expect)(view.render).toHaveBeenCalledWith({
|
|
96
|
+
pkg,
|
|
97
|
+
releasedPackages: [pkg],
|
|
98
|
+
releasedVersions: new Map([['pkg-a', '1.0.1']]),
|
|
99
|
+
releasedCommits: commits,
|
|
100
|
+
existing: 'old changelog',
|
|
101
|
+
});
|
|
102
|
+
(0, vitest_1.expect)(fs.writeFile).toHaveBeenCalledWith('/repo/packages/pkg-a/CHANGELOG.md', 'new changelog');
|
|
103
|
+
(0, vitest_1.expect)(logger.info).toHaveBeenCalledWith('WRITE pkg-a CHANGELOG.md');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=ChangelogPlugin.spec.js.map
|