Skip to content

Commit

Permalink
feat(monorepo): align pdk projen peer dep version with synthesized pr…
Browse files Browse the repository at this point in the history
…ojects projen version

This change ensures all subprojects of a monorepo have the same projen version as the monorepo
itself for non-runtime dependencies, and sets the default projen version to 0.79.x. This also
provides a single place to change when updating the peer dependency version of projen for PDK, which
will automatically ensure vended PDK projects have that same version and we avoid the "unmet peer"
warning in future.

Fixes #661
  • Loading branch information
cogwirrel committed Feb 1, 2024
1 parent cf3c2f4 commit 028c53b
Show file tree
Hide file tree
Showing 37 changed files with 248 additions and 84 deletions.
1 change: 1 addition & 0 deletions .projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions docs/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/aws-arch/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/aws-arch/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/cdk-graph-plugin-diagram/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/cdk-graph-plugin-diagram/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/cdk-graph-plugin-threat-composer/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/cdk-graph-plugin-threat-composer/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/cdk-graph/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/cdk-graph/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/cloudscape-react-ts-website/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/cloudscape-react-ts-website/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/identity/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/identity/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/infrastructure/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/infrastructure/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/monorepo/.eslintrc.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions packages/monorepo/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/monorepo/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions packages/monorepo/src/components/projen-dependency.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*! Copyright [Amazon.com](http://amazon.com/), Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0 */
import { DependencyType, Project } from "projen";
import PROJEN_VERSION from "./projen-version";

export const DEFAULT_PROJEN_VERSION = PROJEN_VERSION;

/**
* Synchronise all subproject projen versions to the given projen version
*/
export const syncProjenVersions = (
subProjects: Project[],
projenVersion: string = DEFAULT_PROJEN_VERSION
) => {
subProjects.forEach((subProject) => {
// Set the projen version to one consistent with the monorepo for any node projects
const projenDependencies = subProject.deps.all.filter(
(d) => d.name === "projen" && d.type !== DependencyType.RUNTIME
);
projenDependencies.forEach((d) => {
subProject.deps.removeDependency(d.name, d.type);
subProject.deps.addDependency(
`projen@${projenVersion}`,
d.type,
d.metadata
);
});
});
};
1 change: 1 addition & 0 deletions packages/monorepo/src/components/projen-version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default "^0.79.6";
18 changes: 18 additions & 0 deletions packages/monorepo/src/projects/java/monorepo-java.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ import {
INxProjectCore,
} from "../../components/nx-configurator";
import { NxWorkspace } from "../../components/nx-workspace";
import {
DEFAULT_PROJEN_VERSION,
syncProjenVersions,
} from "../../components/projen-dependency";
import { Nx } from "../../nx-types";

const MVN_PLUGIN_PATH = "./.nx/plugins/nx_plugin.js";
Expand All @@ -32,6 +36,11 @@ export class MonorepoJavaProject extends JavaProject implements INxProjectCore {
public readonly nxConfigurator: NxConfigurator;
private readonly installTask: Task;

/**
* Version of projen used by the monorepo and its subprojects
*/
private readonly projenVersion: string;

constructor(options: MonorepoJavaOptions) {
super({
...options,
Expand All @@ -40,7 +49,14 @@ export class MonorepoJavaProject extends JavaProject implements INxProjectCore {
version: options.version ?? "0.0.0",
groupId: options.groupId ?? "com.aws",
artifactId: options.artifactId ?? "monorepo",
projenrcJavaOptions: {
...options.projenrcJavaOptions,
projenVersion:
options.projenrcJavaOptions?.projenVersion ?? DEFAULT_PROJEN_VERSION,
},
});
this.projenVersion =
options.projenrcJavaOptions?.projenVersion ?? DEFAULT_PROJEN_VERSION;

this.addTestDependency("software.aws/pdk@^0");

Expand Down Expand Up @@ -155,6 +171,8 @@ export class MonorepoJavaProject extends JavaProject implements INxProjectCore {
this.nxConfigurator.preSynthesize();

super.preSynthesize();

syncProjenVersions(this.subprojects, this.projenVersion);
}

/**
Expand Down
Loading

0 comments on commit 028c53b

Please sign in to comment.