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",