Skip to content

Commit

Permalink
feat: support configurable node version [CLK-321949] (#201)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahammond authored Aug 18, 2023
1 parent d556813 commit 02ce0ef
Show file tree
Hide file tree
Showing 14 changed files with 557 additions and 50 deletions.
2 changes: 1 addition & 1 deletion .projenrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ new YamlFile(project, 'codecov.yml', {
});

new TextFile(project, '.nvmrc', {
lines: [parameters.PROJEN_NODE_VERSION],
lines: [project.minNodeVersion ?? parameters.PROJEN_NODE_VERSION],
});

renovateWorkflow.addRenovateWorkflowYml(project);
Expand Down
56 changes: 56 additions & 0 deletions API.md

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

14 changes: 8 additions & 6 deletions src/cdk-diff-workflow.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { SampleFile, typescript, YamlFile } from 'projen';
import { SampleFile, YamlFile } from 'projen';
import { NodePackage } from 'projen/lib/javascript';
import { clickupCdk } from './clickup-cdk';
import { OptionalNodeVersion } from './optional-node-version';
import { parameters } from './utils/parameters';

export module cdkDiffWorkflow {
Expand Down Expand Up @@ -44,7 +46,7 @@ export module cdkDiffWorkflow {
name: 'Setup Node.js',
uses: 'actions/setup-node@v3',
with: {
'node-version': parameters.PROJEN_NODE_VERSION,
'node-version': options.nodeVersion ?? parameters.PROJEN_NODE_VERSION,
},
},
{
Expand Down Expand Up @@ -265,7 +267,7 @@ export module cdkDiffWorkflow {
readonly stacks: string[];
}

export interface CDKDiffOptionsConfig {
export interface CDKDiffOptionsConfig extends OptionalNodeVersion {
/**
* Collection of environments to cdk diff
*/
Expand All @@ -282,20 +284,20 @@ export module cdkDiffWorkflow {
}

export function addCdkDiffWorkflowYml(
project: typescript.TypeScriptProject,
project: clickupCdk.ClickUpCdkTypeScriptApp,
options: CDKDiffOptionsConfig,
override?: any,
): void {
new YamlFile(project, '.github/workflows/cdk-diff.yml', {
obj: { ...createCdkDiffWorkflow(options), ...override },
obj: { ...createCdkDiffWorkflow({ nodeVersion: project.workflowNodeVersion, ...options }), ...override },
});
}

export function AddCdkLogParserDependency(pkg: NodePackage) {
pkg.addDevDeps('@time-loop/cdk-log-parser@latest');
}

export function addOidcRoleStack(project: typescript.TypeScriptProject): void {
export function addOidcRoleStack(project: clickupCdk.ClickUpCdkTypeScriptApp): void {
new SampleFile(project, `${project.srcdir}/github-actions-oidc-permissions.ts`, {
contents: `import { core } from '@time-loop/cdk-library';
import { aws_iam, Stage } from 'aws-cdk-lib';
Expand Down
44 changes: 24 additions & 20 deletions src/clickup-cdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,19 +115,18 @@ export module clickupCdk {
const authorAddress = options.authorAddress || clickupTs.defaults.authorAddress;
// Theoretically we should be able to just take a default here, but for some reason this is required.
const repositoryUrl = options.repositoryUrl || `https://github.com/${name.substring(1)}.git`;
super(
merge(clickupTs.defaults, { jsiiVersion: '5.0.*' }, options, {
authorName,
authorAddress,
name,
repositoryUrl,
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
cdkDiffOptions: cdkDiffWorkflow.getCDKDiffOptions(options.cdkDiffOptionsConfig),
}),
);
const mergedOptions = merge(clickupTs.defaults, { jsiiVersion: '5.0.*' }, options, {
authorName,
authorAddress,
name,
repositoryUrl,
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
cdkDiffOptions: cdkDiffWorkflow.getCDKDiffOptions(options.cdkDiffOptionsConfig),
});
super(mergedOptions);
clickupTs.fixTsNodeDeps(this.package);
codecov.addCodeCovYml(this);
nodeVersion.addNodeVersionFile(this);
nodeVersion.addNodeVersionFile(this, { nodeVersion: mergedOptions.workflowNodeVersion });
renovateWorkflow.addRenovateWorkflowYml(this);
semgrepWorkflow.addSemgrepWorkflowYml(this);
addToProjectWorkflow.addAddToProjectWorkflowYml(this);
Expand Down Expand Up @@ -181,6 +180,8 @@ export module clickupCdk {
*/
export class ClickUpCdkTypeScriptApp extends awscdk.AwsCdkTypeScriptApp {
readonly datadogEvent: boolean;
readonly workflowNodeVersion?: string;

constructor(options: ClickUpCdkTypeScriptAppOptions) {
if (options.packageManager === javascript.NodePackageManager.PNPM) {
throw new Error('pnpm not supported by cdkPipelines: https://staging.clickup.com/t/333/CLK-252116');
Expand All @@ -199,13 +200,13 @@ export module clickupCdk {
);
}

super(
merge(clickupTs.defaults, defaults, options, {
cdkVersion: cdkVersion ?? options.cdkVersion,
sampleCode: false,
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
}),
);
const mergedOptions = merge(clickupTs.defaults, defaults, options, {
cdkVersion: cdkVersion ?? options.cdkVersion,
sampleCode: false,
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
});
super(mergedOptions);
this.workflowNodeVersion = mergedOptions.workflowNodeVersion;
clickupTs.fixTsNodeDeps(this.package);
new AppSampleCode(this);
new SampleReadme(this, {
Expand All @@ -215,13 +216,16 @@ export module clickupCdk {
`,
});
codecov.addCodeCovYml(this);
nodeVersion.addNodeVersionFile(this);
nodeVersion.addNodeVersionFile(this, { nodeVersion: mergedOptions.workflowNodeVersion });
renovateWorkflow.addRenovateWorkflowYml(this);
semgrepWorkflow.addSemgrepWorkflowYml(this);
addToProjectWorkflow.addAddToProjectWorkflowYml(this);
updateProjen.addWorkflows(this);
if (options.cdkDiffOptionsConfig) {
cdkDiffWorkflow.addCdkDiffWorkflowYml(this, options.cdkDiffOptionsConfig);
cdkDiffWorkflow.addCdkDiffWorkflowYml(this, {
...options.cdkDiffOptionsConfig,
nodeVersion: options.workflowNodeVersion,
});
cdkDiffWorkflow.AddCdkLogParserDependency(this.package);
if (options.cdkDiffOptionsConfig.createOidcRoleStack) {
cdkDiffWorkflow.addOidcRoleStack(this);
Expand Down
17 changes: 8 additions & 9 deletions src/clickup-ts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -220,17 +220,16 @@ export module clickupTs {
*/
export class ClickUpTypeScriptProject extends typescript.TypeScriptProject {
constructor(options: ClickUpTypeScriptProjectOptions) {
super(
merge(defaults, { deps }, options, {
// Disable projen's built-in docgen class
docgen: undefined,
name: normalizeName(options.name),
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
}),
);
const mergedOptions = merge(defaults, { deps }, options, {
// Disable projen's built-in docgen class
docgen: undefined,
name: normalizeName(options.name),
renovatebotOptions: renovateWorkflow.getRenovateOptions(options.renovateOptionsConfig),
});
super(mergedOptions);
fixTsNodeDeps(this.package);
codecov.addCodeCovYml(this);
nodeVersion.addNodeVersionFile(this);
nodeVersion.addNodeVersionFile(this, { nodeVersion: mergedOptions.workflowNodeVersion });
renovateWorkflow.addRenovateWorkflowYml(this);
semgrepWorkflow.addSemgrepWorkflowYml(this);
addToProjectWorkflow.addAddToProjectWorkflowYml(this);
Expand Down
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './datadog';
export * from './datadog-service-catalog';
export * from './renovate-workflow';
export * from './slack-alert';
export * from './optional-node-version';
5 changes: 3 additions & 2 deletions src/node-version.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { TextFile, typescript } from 'projen';
import { OptionalNodeVersion } from './optional-node-version';
import { parameters } from './utils/parameters';

export module nodeVersion {
/**
* Add a `.nvmrc` file to the project.
* @param project the project for which to create / add a .nvmrc file
*/
export function addNodeVersionFile(project: typescript.TypeScriptProject): void {
export function addNodeVersionFile(project: typescript.TypeScriptProject, options?: OptionalNodeVersion): void {
new TextFile(project, '.nvmrc', {
lines: [parameters.PROJEN_NODE_VERSION],
lines: [options?.nodeVersion ?? parameters.PROJEN_NODE_VERSION],
});
}
}
7 changes: 7 additions & 0 deletions src/optional-node-version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export interface OptionalNodeVersion {
/**
* Specify a nodeVersion.
* @default - should be parameters.PROJEN_NODE_VERSION
*/
readonly nodeVersion?: string;
}
Loading

0 comments on commit 02ce0ef

Please sign in to comment.