feat(release): support groupPreVersionCommand for release groups (#27474)

This commit is contained in:
Jonathan Gelin 2024-09-17 12:23:08 +02:00 committed by GitHub
parent 786537efa8
commit 71fe65ffbd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 335 additions and 13 deletions

View File

@ -13,3 +13,22 @@ In order to ensure that projects are built before the new version is applied to
``` ```
This command will run the `build` target for all projects before the version step of Nx Release. Any command can be specified, including non-nx commands. This step is often required when [publishing from a custom dist directory](/recipes/nx-release/publish-custom-dist-directory), as the dist directory must be built before the version is applied to the dist directory's package manifest. This command will run the `build` target for all projects before the version step of Nx Release. Any command can be specified, including non-nx commands. This step is often required when [publishing from a custom dist directory](/recipes/nx-release/publish-custom-dist-directory), as the dist directory must be built before the version is applied to the dist directory's package manifest.
When using release groups in which the member projects are versioned together, you can use `groupPreVersionCommand` and it will be executed before the versioning step for that release group.
```json {% fileName="nx.json" %}
{
"release": {
"groups": {
"my-group": {
"projects": ["my-lib-one", "my-lib-two"],
"version": {
"groupPreVersionCommand": "npx nx run-many -t build -p my-lib-one,my-lib-two"
}
}
}
}
}
```
The `groupPreVersionCommand` will run in addition to the global `preVersionCommand`.

View File

@ -88,6 +88,26 @@ describe('nx release pre-version command', () => {
expect(result3).toContain('nx run-many -t build'); expect(result3).toContain('nx run-many -t build');
expect(result3).toContain(`NX Running target build for project ${pkg1}:`); expect(result3).toContain(`NX Running target build for project ${pkg1}:`);
const groupName = uniq('group-1');
updateJson(`nx.json`, (json) => {
json.release = {
groups: {
[groupName]: {
projects: [pkg1],
version: {
groupPreVersionCommand: `nx run-many -t build -p ${pkg1}`,
},
},
},
};
return json;
});
// command should succeed because the pre-version command will build the package
const result4 = runCLI(`release patch -d -g ${groupName} --first-release`);
expect(result4).toContain('NX Executing pre-version command');
updateJson(`nx.json`, (json) => { updateJson(`nx.json`, (json) => {
json.release = { json.release = {
version: { version: {
@ -98,20 +118,20 @@ describe('nx release pre-version command', () => {
}); });
// command should fail because the pre-version command will fail // command should fail because the pre-version command will fail
const result4 = runCLI('release patch -d --first-release', { const result5 = runCLI('release patch -d --first-release', {
silenceError: true,
});
expect(result4).toContain(
'NX The pre-version command failed. Retry with --verbose to see the full output of the pre-version command.'
);
expect(result4).toContain('echo "error" && exit 1');
const result5 = runCLI('release patch -d --first-release --verbose', {
silenceError: true, silenceError: true,
}); });
expect(result5).toContain( expect(result5).toContain(
'NX The pre-version command failed. Retry with --verbose to see the full output of the pre-version command.'
);
expect(result5).toContain('echo "error" && exit 1');
const result6 = runCLI('release patch -d --first-release --verbose', {
silenceError: true,
});
expect(result6).toContain(
'NX The pre-version command failed. See the full output above.' 'NX The pre-version command failed. See the full output above.'
); );
expect(result4).toContain('echo "error" && exit 1'); expect(result6).toContain('echo "error" && exit 1');
}); });
}); });

View File

@ -274,6 +274,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -449,6 +450,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -627,6 +629,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -836,6 +839,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1029,6 +1033,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1230,6 +1235,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1432,6 +1438,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1614,6 +1621,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1795,6 +1803,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1978,6 +1987,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"optionsOverride": "something", "optionsOverride": "something",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -1992,6 +2002,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@custom/generator-alternative", "generator": "@custom/generator-alternative",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2184,6 +2195,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2370,6 +2382,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2395,6 +2408,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2579,6 +2593,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2766,6 +2781,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"foo": "bar", "foo": "bar",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -2949,6 +2965,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -3133,6 +3150,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -3313,6 +3331,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -3339,6 +3358,190 @@ describe('createNxReleaseConfig()', () => {
} }
`); `);
}); });
it('should allow configuration of preVersionCommand for a group', async () => {
const res = await createNxReleaseConfig(projectGraph, projectFileMap, {
groups: {
'group-1': {
projects: ['lib-a'],
version: {
groupPreVersionCommand: 'nx run-many -t build -p lib-a',
},
},
},
});
expect(res).toMatchInlineSnapshot(`
{
"error": null,
"nxReleaseConfig": {
"changelog": {
"automaticFromRef": false,
"git": {
"commit": true,
"commitArgs": "",
"commitMessage": "chore(release): publish {version}",
"stageChanges": false,
"tag": true,
"tagArgs": "",
"tagMessage": "",
},
"projectChangelogs": false,
"workspaceChangelog": {
"createRelease": false,
"entryWhenNoChanges": "This was a version bump only, there were no code changes.",
"file": "{workspaceRoot}/CHANGELOG.md",
"renderOptions": {
"authors": true,
"commitReferences": true,
"mapAuthorsToGitHubUsernames": true,
"versionTitleDate": true,
},
"renderer": "<dirname>/release/changelog-renderer",
},
},
"conventionalCommits": {
"types": {
"build": {
"changelog": {
"hidden": true,
"title": "📦 Build",
},
"semverBump": "none",
},
"chore": {
"changelog": {
"hidden": true,
"title": "🏡 Chore",
},
"semverBump": "none",
},
"ci": {
"changelog": {
"hidden": true,
"title": "🤖 CI",
},
"semverBump": "none",
},
"docs": {
"changelog": {
"hidden": true,
"title": "📖 Documentation",
},
"semverBump": "none",
},
"examples": {
"changelog": {
"hidden": true,
"title": "🏀 Examples",
},
"semverBump": "none",
},
"feat": {
"changelog": {
"hidden": false,
"title": "🚀 Features",
},
"semverBump": "minor",
},
"fix": {
"changelog": {
"hidden": false,
"title": "🩹 Fixes",
},
"semverBump": "patch",
},
"perf": {
"changelog": {
"hidden": false,
"title": "🔥 Performance",
},
"semverBump": "none",
},
"refactor": {
"changelog": {
"hidden": true,
"title": "💅 Refactors",
},
"semverBump": "none",
},
"revert": {
"changelog": {
"hidden": true,
"title": "⏪ Revert",
},
"semverBump": "none",
},
"style": {
"changelog": {
"hidden": true,
"title": "🎨 Styles",
},
"semverBump": "none",
},
"test": {
"changelog": {
"hidden": true,
"title": "✅ Tests",
},
"semverBump": "none",
},
"types": {
"changelog": {
"hidden": true,
"title": "🌊 Types",
},
"semverBump": "none",
},
},
},
"git": {
"commit": false,
"commitArgs": "",
"commitMessage": "chore(release): publish {version}",
"stageChanges": false,
"tag": false,
"tagArgs": "",
"tagMessage": "",
},
"groups": {
"group-1": {
"changelog": false,
"projects": [
"lib-a",
],
"projectsRelationship": "fixed",
"releaseTagPattern": "v{version}",
"version": {
"conventionalCommits": false,
"generator": "@nx/js:release-version",
"generatorOptions": {},
"groupPreVersionCommand": "nx run-many -t build -p lib-a",
},
"versionPlans": false,
},
},
"projectsRelationship": "fixed",
"releaseTagPattern": "v{version}",
"version": {
"conventionalCommits": false,
"generator": "@nx/js:release-version",
"generatorOptions": {},
"git": {
"commit": false,
"commitArgs": "",
"commitMessage": "chore(release): publish {version}",
"stageChanges": true,
"tag": false,
"tagArgs": "",
"tagMessage": "",
},
"preVersionCommand": "",
},
"versionPlans": false,
},
}
`);
});
}); });
describe('user config -> top level projects', () => { describe('user config -> top level projects', () => {
@ -3511,6 +3714,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -3691,6 +3895,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -3893,6 +4098,7 @@ describe('createNxReleaseConfig()', () => {
"currentVersionResolver": "git-tag", "currentVersionResolver": "git-tag",
"specifierSource": "conventional-commits", "specifierSource": "conventional-commits",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -4065,6 +4271,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -4278,6 +4485,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -4481,6 +4689,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -4662,6 +4871,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -4843,6 +5053,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -5022,6 +5233,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -5237,6 +5449,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -5428,6 +5641,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -5622,6 +5836,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -5817,6 +6032,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6015,6 +6231,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6234,6 +6451,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6248,6 +6466,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6273,6 +6492,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6486,6 +6706,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -6859,6 +7080,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7219,6 +7441,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7234,6 +7457,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7402,6 +7626,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7590,6 +7815,7 @@ describe('createNxReleaseConfig()', () => {
"currentVersionResolver": "git-tag", "currentVersionResolver": "git-tag",
"specifierSource": "conventional-commits", "specifierSource": "conventional-commits",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7777,6 +8003,7 @@ describe('createNxReleaseConfig()', () => {
"currentVersionResolver": "registry", "currentVersionResolver": "registry",
"specifierSource": "prompt", "specifierSource": "prompt",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -7963,6 +8190,7 @@ describe('createNxReleaseConfig()', () => {
"currentVersionResolver": "git-tag", "currentVersionResolver": "git-tag",
"specifierSource": "conventional-commits", "specifierSource": "conventional-commits",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -8152,6 +8380,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -8342,6 +8571,7 @@ describe('createNxReleaseConfig()', () => {
"someUnrelatedOption": "foobar", "someUnrelatedOption": "foobar",
"specifierSource": "conventional-commits", "specifierSource": "conventional-commits",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -8571,6 +8801,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": true, "versionPlans": true,
}, },
@ -8758,6 +8989,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": { "versionPlans": {
"ignorePatternsForPlanCheck": [ "ignorePatternsForPlanCheck": [
@ -8949,6 +9181,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": true, "versionPlans": true,
}, },
@ -8963,6 +9196,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -9144,6 +9378,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": { "versionPlans": {
"ignorePatternsForPlanCheck": [ "ignorePatternsForPlanCheck": [
@ -9162,6 +9397,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -9341,6 +9577,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -9357,6 +9594,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": true, "versionPlans": true,
}, },
@ -9540,6 +9778,7 @@ describe('createNxReleaseConfig()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "@nx/js:release-version", "generator": "@nx/js:release-version",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -9556,6 +9795,7 @@ describe('createNxReleaseConfig()', () => {
"generatorOptions": { "generatorOptions": {
"specifierSource": "version-plans", "specifierSource": "version-plans",
}, },
"groupPreVersionCommand": "",
}, },
"versionPlans": { "versionPlans": {
"ignorePatternsForPlanCheck": [ "ignorePatternsForPlanCheck": [

View File

@ -274,6 +274,7 @@ export async function createNxReleaseConfig(
conventionalCommits: false, conventionalCommits: false,
generator: '@nx/js:release-version', generator: '@nx/js:release-version',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
changelog: { changelog: {
createRelease: false, createRelease: false,
@ -356,7 +357,9 @@ export async function createNxReleaseConfig(
); );
// these options are not supported at the group level, only the root/command level // these options are not supported at the group level, only the root/command level
const rootVersionWithoutGlobalOptions = { ...rootVersionConfig }; const rootVersionWithoutGlobalOptions = {
...rootVersionConfig,
};
delete rootVersionWithoutGlobalOptions.git; delete rootVersionWithoutGlobalOptions.git;
delete rootVersionWithoutGlobalOptions.preVersionCommand; delete rootVersionWithoutGlobalOptions.preVersionCommand;
@ -497,7 +500,10 @@ export async function createNxReleaseConfig(
projects: matchingProjects, projects: matchingProjects,
version: deepMergeDefaults( version: deepMergeDefaults(
// First apply any group level defaults, then apply actual root level config, then group level config // First apply any group level defaults, then apply actual root level config, then group level config
[GROUP_DEFAULTS.version, rootVersionWithoutGlobalOptions], [
GROUP_DEFAULTS.version,
{ ...rootVersionWithoutGlobalOptions, groupPreVersionCommand: '' },
],
releaseGroup.version releaseGroup.version
), ),
// If the user has set any changelog config at all, including at the root level, then use one set of defaults, otherwise default to false for the whole feature // If the user has set any changelog config at all, including at the root level, then use one set of defaults, otherwise default to false for the whole feature

View File

@ -102,6 +102,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -130,6 +131,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -142,6 +144,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -165,6 +168,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -181,6 +185,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -201,6 +206,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
} => Set { } => Set {
@ -219,6 +225,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
} => Set { } => Set {
@ -238,6 +245,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -265,6 +273,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -277,6 +286,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -305,6 +315,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -317,6 +328,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -340,6 +352,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -360,6 +373,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
} => Set { } => Set {
@ -395,6 +409,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -407,6 +422,7 @@ describe('filterReleaseGroups()', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '', generator: '',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
releaseTagPattern: '', releaseTagPattern: '',
versionPlans: false, versionPlans: false,
@ -430,6 +446,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
}, },
@ -450,6 +467,7 @@ describe('filterReleaseGroups()', () => {
"conventionalCommits": false, "conventionalCommits": false,
"generator": "", "generator": "",
"generatorOptions": {}, "generatorOptions": {},
"groupPreVersionCommand": "",
}, },
"versionPlans": false, "versionPlans": false,
} => Set { } => Set {

View File

@ -14,6 +14,7 @@ describe('shared', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '@nx/js:version', generator: '@nx/js:version',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
changelog: false, changelog: false,
releaseTagPattern: '{projectName}-{version}', releaseTagPattern: '{projectName}-{version}',
@ -28,6 +29,7 @@ describe('shared', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '@nx/js:version', generator: '@nx/js:version',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
changelog: false, changelog: false,
releaseTagPattern: '{projectName}-{version}', releaseTagPattern: '{projectName}-{version}',
@ -82,6 +84,7 @@ describe('shared', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '@nx/js:version', generator: '@nx/js:version',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
changelog: false, changelog: false,
releaseTagPattern: '{projectName}-{version}', releaseTagPattern: '{projectName}-{version}',
@ -96,6 +99,7 @@ describe('shared', () => {
conventionalCommits: false, conventionalCommits: false,
generator: '@nx/js:version', generator: '@nx/js:version',
generatorOptions: {}, generatorOptions: {},
groupPreVersionCommand: '',
}, },
changelog: false, changelog: false,
releaseTagPattern: '{projectName}-{version}', releaseTagPattern: '{projectName}-{version}',
@ -161,6 +165,7 @@ describe('shared', () => {
specifierSource: 'conventional-commits', specifierSource: 'conventional-commits',
currentVersionResolver: 'git-tag', currentVersionResolver: 'git-tag',
}, },
groupPreVersionCommand: '',
}, },
changelog: { changelog: {
createRelease: 'github', createRelease: 'github',

View File

@ -382,6 +382,12 @@ export function createAPI(overrideReleaseConfig: NxReleaseConfiguration) {
*/ */
for (const releaseGroup of releaseGroups) { for (const releaseGroup of releaseGroups) {
const releaseGroupName = releaseGroup.name; const releaseGroupName = releaseGroup.name;
runPreVersionCommand(releaseGroup.version.groupPreVersionCommand, {
dryRun: args.dryRun,
verbose: args.verbose,
});
const projectBatches = batchProjectsByGeneratorConfig( const projectBatches = batchProjectsByGeneratorConfig(
projectGraph, projectGraph,
releaseGroup, releaseGroup,

View File

@ -210,7 +210,15 @@ export interface NxReleaseConfiguration {
* *
* NOTE: git configuration is not supported at the group level, only the root/command level * NOTE: git configuration is not supported at the group level, only the root/command level
*/ */
version?: NxReleaseVersionConfiguration; version?: NxReleaseVersionConfiguration & {
/**
* A command to run after validation of nx release configuration, but before versioning begins.
* Used for preparing build artifacts. If --dry-run is passed, the command is still executed, but
* with the NX_DRY_RUN environment variable set to 'true'.
* It will run in addition to the global `preVersionCommand`
*/
groupPreVersionCommand?: string;
};
/** /**
* Project changelogs are disabled by default. * Project changelogs are disabled by default.
* *