-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path.projenrc.ts
185 lines (170 loc) · 6.3 KB
/
.projenrc.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { JsiiProject } from "projen/lib/cdk";
import { JobStep } from "projen/lib/github/workflows-model";
import { NpmAccess, UpgradeDependenciesSchedule } from "projen/lib/javascript";
import { AutoApprove } from "./projenrc/auto-approve";
import { Automerge } from "./projenrc/automerge";
import { CustomizedLicense } from "./projenrc/customized-license";
import { UpgradeCDKTF } from "./projenrc/upgrade-cdktf";
import { UpgradeJSIIAndTypeScript } from "./projenrc/upgrade-jsii-typescript";
import { UpgradeProjen } from "./projenrc/upgrade-projen";
const name = "projen-cdktf-hybrid-construct";
const constructsVersion = "10.3.0";
/** JSII and TS should always use the same major/minor version range */
const typescriptVersion = "~5.5.0";
const projenVersion = "0.88.0";
const githubActionPinnedVersions = {
"actions/checkout": "11bd71901bbe5b1630ceea73d27597364c9af683", // v4.2.2
"actions/download-artifact": "fa0a91b85d4f404e444e00e005971372dc801d16", // v4.1.8
"actions/github-script": "60a0d83039c74a4aee543508d2ffcb1c3799cdea", // v7.0.1
"actions/setup-node": "39370e3970a6d050c480ffad4ff0ed4d3fdee5af", // v4.1.0
"actions/upload-artifact": "6f51ac03b9356f520e9adb1b1b7802705f340c2b", // v4.5.0
"amannn/action-semantic-pull-request":
"0723387faaf9b38adef4775cd42cfd5155ed6017", // v5.5.3
"hashicorp/setup-copywrite": "32638da2d4e81d56a0764aa1547882fc4d209636", // v1.1.3
"hashicorp/setup-terraform": "b9cd54a3c349d3f38e8881555d616ced269862dd", // v3.1.2
"peter-evans/create-pull-request": "67ccf781d68cd99b580ae25a5c18a1cc84ffff1f", // v7.0.6
};
const project = new JsiiProject({
defaultReleaseBranch: "main",
name,
repositoryUrl: `https://github.com/cdktf/${name}.git`,
author: "HashiCorp",
authorAddress: "https://hashicorp.com",
authorOrganization: true,
packageName: name,
prettier: true,
projenrcTs: true,
description:
"Projen template for CDKTF Constructs that should also be used as Terraform Modules.",
licensed: false,
release: true,
releaseToNpm: true,
npmAccess: NpmAccess.PUBLIC,
mergify: false,
depsUpgradeOptions: {
workflowOptions: {
labels: ["auto-approve", "automerge", "dependencies"],
schedule: UpgradeDependenciesSchedule.WEEKLY,
},
},
gitignore: [".idea/"],
workflowGitIdentity: {
name: "team-tf-cdk",
email: "github-team-tf-cdk@hashicorp.com",
},
typescriptVersion,
jsiiVersion: typescriptVersion,
pullRequestTemplate: false,
// Necessary due to this bug: https://github.com/projen/projen/issues/3950#issuecomment-2483442005
// If this bug gets fixed, the below `eslintOptions` section should be able to be removed
eslintOptions: {
fileExtensions: [],
dirs: ["src", "test", "projenrc", ".projenrc.ts"],
},
});
project.tsconfig?.exclude?.push("src/exampleCode/**");
project.tsconfig?.exclude?.push("example/**");
project.tsconfig?.exclude?.push("examples/**");
project.addPeerDeps(
`projen@>= ${projenVersion}`,
`constructs@>= ${constructsVersion}`
);
project.addBundledDeps("change-case");
project.addDevDeps(
"fs-extra",
"glob",
`projen@${projenVersion}`,
`constructs@${constructsVersion}`,
"semver",
"@types/semver",
"@types/fs-extra",
"@types/glob",
"@types/change-case",
"ts-node@10.9.1",
"comment-json"
);
// This gets rid of the following error during the build » package » package-all » package:js step:
// Error: Conflicting versions of constructs in type system: previously loaded 10.3.0, trying to load 10.4.2
// It is not clear why the above error occurs; none of our other Projen projects have this problem
project.package.addPackageResolutions(`constructs@${constructsVersion}`);
new CustomizedLicense(project);
new AutoApprove(project);
new Automerge(project);
new UpgradeCDKTF(project);
new UpgradeJSIIAndTypeScript(project, typescriptVersion);
new UpgradeProjen(project);
project.addTask("buildExample", {
exec: "yarn buildExample:hybrid && yarn buildExample:terraform",
});
project.addTask("buildExample:hybrid", {
exec: "git clean -dfx . && rm -rf lib modules src terraform construct-examples && yarn && yarn projen && yarn && yarn build",
cwd: "./examples/hybrid-module",
});
project.addTask("buildExample:terraform", {
exec: "git clean -dfx . && rm -rf lib modules src terraform construct-examples && yarn && yarn projen && yarn && yarn build",
cwd: "./examples/terraform-module",
});
project.addTask("upgrade:hybrid", {
exec: "yarn projen upgrade",
cwd: "./examples/hybrid-module",
});
project.addTask("upgrade:terraform", {
exec: "yarn projen upgrade",
cwd: "./examples/terraform-module",
});
project.removeTask("post-upgrade");
const upgradeTask = project.addTask("post-upgrade", {
description: "Runs after upgrading dependencies",
exec: "yarn compile",
});
upgradeTask.exec("yarn projen upgrade:hybrid");
upgradeTask.exec("yarn projen upgrade:terraform");
project.testTask.exec("yarn buildExample");
project.addPackageIgnore("scripts");
project.addPackageIgnore("examples");
project.addPackageIgnore("projenrc");
project.addPackageIgnore("/.projenrc.ts");
project.addPackageIgnore(".copywrite.hcl");
// Run copywrite tool to add copyright headers to all files
project.buildWorkflow?.addPostBuildSteps(
{
name: "Setup Copywrite tool",
uses: "hashicorp/setup-copywrite",
},
{ name: "Add headers using Copywrite tool", run: "copywrite headers" }
);
const setupTerraformStep = {
name: "Setup Terraform",
uses: "hashicorp/setup-terraform",
with: {
terraform_wrapper: false,
},
};
const buildSteps = (project.buildWorkflow as any).preBuildSteps as JobStep[];
const releaseSteps = (project.release as any).defaultBranch.workflow.jobs
.release.steps;
buildSteps.push(setupTerraformStep);
releaseSteps.splice(1, 0, setupTerraformStep);
// Use pinned versions of github actions
Object.entries(githubActionPinnedVersions).forEach(([action, sha]) => {
project.github?.actions.set(action, `${action}@${sha}`);
});
const releaseWorkflow = project.tryFindObjectFile(
".github/workflows/release.yml"
);
releaseWorkflow?.addOverride("on.push", {
branches: ["main"],
"paths-ignore": [
// don't do a release if the change was only to these files/directories
"examples/**",
".github/ISSUE_TEMPLATE/**",
".github/CODEOWNERS",
".github/dependabot.yml",
".github/**/*.md",
],
});
project.synth();