diff --git a/.projen/tasks.json b/.projen/tasks.json index dbdf55d4d92..4ccd8a11212 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -253,6 +253,10 @@ } ] }, + "post-upgrade": { + "name": "post-upgrade", + "description": "Runs after upgrading dependencies" + }, "pre-compile": { "name": "pre-compile", "description": "Prepare the project for compilation" @@ -370,6 +374,9 @@ }, { "exec": "/bin/bash ./projen.bash" + }, + { + "spawn": "post-upgrade" } ] }, diff --git a/API.md b/API.md index 38772518b73..d085de70b93 100644 --- a/API.md +++ b/API.md @@ -7555,6 +7555,7 @@ new javascript.UpgradeDependencies(project: NodeProject, options?: UpgradeDepend Name | Type | Description -----|------|------------- **ignoresProjen**🔹 | boolean | Whether or not projen is also upgraded in this workflow,. +**postUpgradeTask**🔹 | [Task](#projen-task) | A task run after the upgrade task. **workflows**🔹 | Array<[github.GithubWorkflow](#projen-github-githubworkflow)> | The workflows that execute the upgrades. **containerOptions**?🔹 | [github.workflows.ContainerOptions](#projen-github-workflows-containeroptions) | Container definitions for the upgrade workflow.
__*Optional*__ diff --git a/package.json b/package.json index c3e04640a64..39e6ea23d77 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "package:js": "/bin/bash ./projen.bash package:js", "package:python": "/bin/bash ./projen.bash package:python", "post-compile": "/bin/bash ./projen.bash post-compile", + "post-upgrade": "/bin/bash ./projen.bash post-upgrade", "pre-compile": "/bin/bash ./projen.bash pre-compile", "readme-macros": "/bin/bash ./projen.bash readme-macros", "release": "/bin/bash ./projen.bash release", diff --git a/src/javascript/upgrade-dependencies.ts b/src/javascript/upgrade-dependencies.ts index 717f81e9e8f..5d798fa09de 100644 --- a/src/javascript/upgrade-dependencies.ts +++ b/src/javascript/upgrade-dependencies.ts @@ -106,6 +106,11 @@ export class UpgradeDependencies extends Component { */ public containerOptions?: ContainerOptions; + /** + * A task run after the upgrade task. + */ + public readonly postUpgradeTask: Task; + private readonly gitIdentity: GitIdentity; private readonly postBuildSteps: JobStep[]; @@ -122,6 +127,12 @@ export class UpgradeDependencies extends Component { this.containerOptions = options.workflowOptions?.container; project.addDevDeps("npm-check-updates@^12"); + + this.postUpgradeTask = + project.tasks.tryFind("post-upgrade") ?? + project.tasks.addTask("post-upgrade", { + description: "Runs after upgrading dependencies", + }); } /** @@ -197,6 +208,8 @@ export class UpgradeDependencies extends Component { // run "projen" to give projen a chance to update dependencies (it will also run "yarn install") task.exec(this._project.projenCommand); + task.spawn(this.postUpgradeTask); + return task; } diff --git a/test/__snapshots__/integ.test.ts.snap b/test/__snapshots__/integ.test.ts.snap index a02a90289fb..434f1bb39e4 100644 --- a/test/__snapshots__/integ.test.ts.snap +++ b/test/__snapshots__/integ.test.ts.snap @@ -1334,6 +1334,10 @@ UNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .c }, ], }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -1438,6 +1442,9 @@ UNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .c Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "watch": Object { @@ -1879,6 +1886,7 @@ project.synth(); "package:js": "npx projen package:js", "package:python": "npx projen package:python", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "release": "npx projen release", @@ -2762,6 +2770,10 @@ UNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .c }, ], }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -2830,6 +2842,9 @@ UNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .c Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -2863,6 +2878,9 @@ UNEXPECTED BREAKING CHANGES: add keys such as 'removed:constructs.Node.of' to .c Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "watch": Object { @@ -3424,6 +3442,7 @@ project.synth(); "package:js": "npx projen package:js", "package:python": "npx projen package:python", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "test": "npx projen test", @@ -4217,6 +4236,10 @@ tsconfig.tsbuildinfo "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -4285,6 +4308,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -4318,6 +4344,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "watch": Object { @@ -4828,6 +4857,7 @@ project.synth(); "eslint": "npx projen eslint", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "test": "npx projen test", @@ -5504,6 +5534,10 @@ junit.xml "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -5605,6 +5639,9 @@ junit.xml Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -5638,6 +5675,9 @@ junit.xml Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, }, @@ -5919,6 +5959,7 @@ project.synth(); "default": "npx projen default", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "release": "npx projen release", diff --git a/test/node-project.test.ts b/test/node-project.test.ts index 467c57ae713..e524da66225 100644 --- a/test/node-project.test.ts +++ b/test/node-project.test.ts @@ -807,6 +807,18 @@ describe("workflowRunsOn", () => { }); }); +test("post-upgrade workflow", () => { + // GIVEN + const project = new TestNodeProject(); + + // THEN + const snapshot = synthSnapshot(project); + const tasks = snapshot[Tasks.MANIFEST_FILE].tasks; + expect(tasks.upgrade.steps[tasks.upgrade.steps.length - 1]).toStrictEqual({ + spawn: "post-upgrade", + }); +}); + class TestNodeProject extends NodeProject { constructor(options: Partial = {}) { super({ diff --git a/test/web/__snapshots__/nextjs-project.test.ts.snap b/test/web/__snapshots__/nextjs-project.test.ts.snap index be4cf4a51c1..ff6f384aacc 100644 --- a/test/web/__snapshots__/nextjs-project.test.ts.snap +++ b/test/web/__snapshots__/nextjs-project.test.ts.snap @@ -582,6 +582,10 @@ pull_request_rules: "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -678,6 +682,9 @@ pull_request_rules: Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -711,6 +718,9 @@ pull_request_rules: Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, }, @@ -955,6 +965,7 @@ pull_request_rules: "export": "npx projen export", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "release": "npx projen release", diff --git a/test/web/__snapshots__/nextjs-ts-project.test.ts.snap b/test/web/__snapshots__/nextjs-ts-project.test.ts.snap index aec47d26f9e..75ae2f18dcb 100644 --- a/test/web/__snapshots__/nextjs-ts-project.test.ts.snap +++ b/test/web/__snapshots__/nextjs-ts-project.test.ts.snap @@ -513,6 +513,10 @@ tsconfig.tsbuildinfo "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -570,6 +574,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -603,6 +610,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "watch": Object { @@ -857,6 +867,7 @@ tsconfig.tsbuildinfo "export": "npx projen export", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "server": "npx projen server", diff --git a/test/web/__snapshots__/react-project.test.ts.snap b/test/web/__snapshots__/react-project.test.ts.snap index d887bd7e704..e8f68d6df0d 100644 --- a/test/web/__snapshots__/react-project.test.ts.snap +++ b/test/web/__snapshots__/react-project.test.ts.snap @@ -567,6 +567,10 @@ pull_request_rules: "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -650,6 +654,9 @@ pull_request_rules: Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -683,6 +690,9 @@ pull_request_rules: Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, }, @@ -937,6 +947,7 @@ pull_request_rules: "eject": "npx projen eject", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "release": "npx projen release", diff --git a/test/web/__snapshots__/react-ts-project.test.ts.snap b/test/web/__snapshots__/react-ts-project.test.ts.snap index 1c3380a3b4d..6c83e840bd8 100644 --- a/test/web/__snapshots__/react-ts-project.test.ts.snap +++ b/test/web/__snapshots__/react-ts-project.test.ts.snap @@ -508,6 +508,10 @@ tsconfig.tsbuildinfo "description": "Runs after successful compilation", "name": "post-compile", }, + "post-upgrade": Object { + "description": "Runs after upgrading dependencies", + "name": "post-upgrade", + }, "pre-compile": Object { "description": "Prepare the project for compilation", "name": "pre-compile", @@ -552,6 +556,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "upgrade-projen": Object { @@ -585,6 +592,9 @@ tsconfig.tsbuildinfo Object { "exec": "npx projen", }, + Object { + "spawn": "post-upgrade", + }, ], }, "watch": Object { @@ -850,6 +860,7 @@ tsconfig.tsbuildinfo "eject": "npx projen eject", "package": "npx projen package", "post-compile": "npx projen post-compile", + "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "projen": "npx projen", "test": "npx projen test",