@codedrifters/configulator 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsDeployWorkflow = exports.PROD_DEPLOY_NAME = void 0;
4
+ const projen_1 = require("projen");
5
+ const build_1 = require("projen/lib/build");
6
+ const github_1 = require("projen/lib/github");
7
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
8
+ const aws_1 = require("../aws");
9
+ const aws_deployment_target_1 = require("../aws/aws-deployment-target");
10
+ const projects_1 = require("../projects");
11
+ const turbo_1 = require("../turbo");
12
+ const versions_1 = require("../versions");
13
+ exports.PROD_DEPLOY_NAME = "prod-deploy";
14
+ class AwsDeployWorkflow extends projen_1.Component {
15
+ static of(project, buildWorkflow) {
16
+ const isDefined = (c) => c instanceof AwsDeployWorkflow && c.buildWorkflow === buildWorkflow;
17
+ return project.components.find(isDefined);
18
+ }
19
+ constructor(project, options = {}) {
20
+ super(project);
21
+ this.project = project;
22
+ this.setupNode = () => {
23
+ return [
24
+ {
25
+ name: "Setup Node",
26
+ uses: "actions/setup-node@v4",
27
+ with: {
28
+ ["node-version"]: versions_1.VERSION.NODE_WORKFLOWS,
29
+ },
30
+ // occasionally this step fails due to internal issues at github
31
+ timeoutMinutes: 1,
32
+ },
33
+ ];
34
+ };
35
+ this.setupPnpm = () => {
36
+ return [
37
+ {
38
+ name: "Setup PNPM",
39
+ uses: "pnpm/action-setup@v3",
40
+ with: {
41
+ version: versions_1.VERSION.PNPM_VERSION,
42
+ },
43
+ },
44
+ ];
45
+ };
46
+ this.deploySteps = (target) => {
47
+ const { awsDeploymentType, account, region, ciDeploymentConfig, awsDeploymentConfig, } = target;
48
+ const { roleArn } = ciDeploymentConfig ?? {};
49
+ const { cdkOut } = awsDeploymentConfig;
50
+ return [
51
+ ...this.setupPnpm(),
52
+ ...this.setupNode(),
53
+ /**
54
+ * Install CDK
55
+ */
56
+ {
57
+ name: "Install CDK",
58
+ run: "pnpm add aws-cdk",
59
+ },
60
+ /**
61
+ * Configure AWS creds.
62
+ */
63
+ {
64
+ name: `AWS Creds ${awsDeploymentType}/${account}/${region}`,
65
+ uses: "aws-actions/configure-aws-credentials@v4",
66
+ with: {
67
+ "role-to-assume": roleArn,
68
+ "aws-region": region,
69
+ "role-duration-seconds": 900, // 15 minutes
70
+ },
71
+ },
72
+ /**
73
+ * Run CDK Deploy
74
+ */
75
+ {
76
+ name: `Deploy ${target.awsDeploymentType}/${target.account}/${target.region}`,
77
+ run: `pnpm dlx aws-cdk deploy --no-rollback --require-approval=never --app=${cdkOut} "*-${account}-${region}"`,
78
+ },
79
+ ];
80
+ };
81
+ /***************************************************************************
82
+ *
83
+ * Root project check
84
+ *
85
+ * Detect the root project and ensure it's of type MonorepoProject.
86
+ *
87
+ **************************************************************************/
88
+ if (!(project.root instanceof projects_1.MonorepoProject)) {
89
+ throw new Error("AwsDeployWorkflow requires the root project to be a MonorepoProject");
90
+ }
91
+ this.rootProject = project.root;
92
+ /***************************************************************************
93
+ *
94
+ * GitHub Check
95
+ *
96
+ * Make sure github config is active in the project. This is to ensure all
97
+ * workflows will be output properly during synth.
98
+ *
99
+ **************************************************************************/
100
+ const github = github_1.GitHub.of(this.rootProject);
101
+ if (!github) {
102
+ throw new Error("AwsDeployWorkflow requires a GitHub component in the root project");
103
+ }
104
+ /***************************************************************************
105
+ *
106
+ * Workflow Deploy Type
107
+ *
108
+ * What type of environments are we deploying into? We'll default to dev to
109
+ * be safe.
110
+ *
111
+ **************************************************************************/
112
+ this.awsDeployType = options.awsDeployType ?? aws_deployment_target_1.AWS_DEPLOY_TYPE.DEV;
113
+ /***************************************************************************
114
+ *
115
+ * Workflow Deploy Targets
116
+ *
117
+ * Use provided targets or discover them based on the deploy type. Only
118
+ * include targets that are marked for CI/CD.
119
+ *
120
+ **************************************************************************/
121
+ this.awsDeploymentTargets =
122
+ options.awsDeploymentTargets ??
123
+ aws_1.AwsDeploymentConfig.of(project)?.awsDeploymentTargets.filter((target) => target.awsDeploymentType === this.awsDeployType &&
124
+ target.ciDeployment) ??
125
+ [];
126
+ /***************************************************************************
127
+ *
128
+ * Build Workflow Options
129
+ *
130
+ * Can't use the options if an existing workflow was passed in.
131
+ *
132
+ **************************************************************************/
133
+ if (options.buildWorkflow && options.buildWorkflowOptions) {
134
+ throw new Error("Cannot provide both buildWorkflow and buildWorkflowOptions");
135
+ }
136
+ /***************************************************************************
137
+ *
138
+ * Build Workflow
139
+ *
140
+ * Create a workflow either based on input or from scratch.
141
+ *
142
+ **************************************************************************/
143
+ this.buildWorkflow =
144
+ options.buildWorkflow ??
145
+ new build_1.BuildWorkflow(project, {
146
+ /**
147
+ * Name based on project and environment.
148
+ */
149
+ name: ["deploy", project.name, this.awsDeployType].join("-"),
150
+ /**
151
+ * Use the root projects build task.
152
+ */
153
+ buildTask: this.rootProject.buildTask,
154
+ /**
155
+ * Use push triggers based n the branch config for each environment.
156
+ */
157
+ workflowTriggers: {
158
+ push: {
159
+ branches: [
160
+ ...this.awsDeploymentTargets.flatMap((t) => t.branches.map((b) => b.branch)),
161
+ ],
162
+ },
163
+ workflowDispatch: {},
164
+ ...options.buildWorkflowOptions?.workflowTriggers,
165
+ },
166
+ /**
167
+ * Never allow mutations for deploys. This should have been handled
168
+ * during build.
169
+ */
170
+ mutableBuild: false,
171
+ /**
172
+ * Setup Config steps to run before the build.
173
+ */
174
+ preBuildSteps: [
175
+ ...this.setupPnpm(),
176
+ ...this.setupNode(),
177
+ {
178
+ name: "Install dependencies",
179
+ run: "pnpm i --no-frozen-lockfile",
180
+ },
181
+ ],
182
+ ...options.buildWorkflowOptions,
183
+ });
184
+ /***************************************************************************
185
+ *
186
+ * Add Deployments to workflow
187
+ *
188
+ **************************************************************************/
189
+ this.awsDeploymentTargets.forEach((target) => {
190
+ const deployJobName = `${target.awsDeploymentType}-deploy-${this.project.name}-${target.account}-${target.region}`;
191
+ this.buildWorkflow.addPostBuildJob(deployJobName, {
192
+ name: `Deploy ${target.awsDeploymentType}/${target.account}/${target.region}`,
193
+ runsOn: ["ubuntu-latest"],
194
+ permissions: {
195
+ contents: workflows_model_1.JobPermission.READ,
196
+ idToken: workflows_model_1.JobPermission.WRITE,
197
+ },
198
+ concurrency: deployJobName,
199
+ steps: [...this.deploySteps(target)],
200
+ });
201
+ });
202
+ }
203
+ preSynthesize() {
204
+ /***************************************************************************
205
+ *
206
+ * Add turbo to all workflow, if turbo is in use by root project
207
+ *
208
+ **************************************************************************/
209
+ if (turbo_1.TurboRepo.of(this.rootProject)) {
210
+ this.buildWorkflow.addPostBuildSteps({
211
+ name: "Build Sub Projects",
212
+ run: `npx projen ${turbo_1.ROOT_CI_TASK_NAME}`,
213
+ });
214
+ }
215
+ }
216
+ }
217
+ exports.AwsDeployWorkflow = AwsDeployWorkflow;
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvd3MvYXdzLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFFbkMsNENBQXVFO0FBQ3ZFLDhDQUEyQztBQUMzQyx1RUFBMkU7QUFFM0UsZ0NBQTZDO0FBQzdDLHdFQUdzQztBQUN0QywwQ0FBOEM7QUFDOUMsb0NBQXdEO0FBQ3hELDBDQUFzQztBQUV6QixRQUFBLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQTZCOUMsTUFBYSxpQkFBa0IsU0FBUSxrQkFBUztJQUN2QyxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQTRCLEVBQzVCLGFBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBWSxFQUEwQixFQUFFLENBQ3pELENBQUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQztRQUN0RSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFzQkQsWUFDUyxPQUE0QixFQUNuQyxVQUFpQyxFQUFFO1FBRW5DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBK0o3QixjQUFTLEdBQUcsR0FBbUIsRUFBRTtZQUN2QyxPQUFPO2dCQUNMO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsdUJBQXVCO29CQUM3QixJQUFJLEVBQUU7d0JBQ0osQ0FBQyxjQUFjLENBQUMsRUFBRSxrQkFBTyxDQUFDLGNBQWM7cUJBQ3pDO29CQUNELGdFQUFnRTtvQkFDaEUsY0FBYyxFQUFFLENBQUM7aUJBQ2xCO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxHQUFtQixFQUFFO1lBQ3ZDLE9BQU87Z0JBQ0w7b0JBQ0UsSUFB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QyxlQUFlLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxJQUFJLEVBQUUsVUFBVSxNQUFNLENBQUMsaUJBQWlCLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUM3RSxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUM1QixPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2lCQUM3QjtnQkFDRCxXQUFXLEVBQUUsYUFBYTtnQkFDMUIsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBFRCxhQUFhO1FBQ1g7Ozs7b0ZBSTRFO1FBRTVFLElBQUksaUJBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDbkMsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsR0FBRyxFQUFFLGNBQWMseUJBQWlCLEVBQUU7YUFDdkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBSRCw4Q0FvUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSBcInByb2plbi9saWIvYXdzY2RrXCI7XG5pbXBvcnQgeyBCdWlsZFdvcmtmbG93LCBCdWlsZFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCJwcm9qZW4vbGliL2J1aWxkXCI7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWJcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBWYWx1ZU9mIH0gZnJvbSBcInR5cGUtZmVzdFwiO1xuaW1wb3J0IHsgQXdzRGVwbG95bWVudENvbmZpZyB9IGZyb20gXCIuLi9hd3NcIjtcbmltcG9ydCB7XG4gIEFXU19ERVBMT1lfVFlQRSxcbiAgQXdzRGVwbG95bWVudFRhcmdldCxcbn0gZnJvbSBcIi4uL2F3cy9hd3MtZGVwbG95bWVudC10YXJnZXRcIjtcbmltcG9ydCB7IE1vbm9yZXBvUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0c1wiO1xuaW1wb3J0IHsgUk9PVF9DSV9UQVNLX05BTUUsIFR1cmJvUmVwbyB9IGZyb20gXCIuLi90dXJib1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uc1wiO1xuXG5leHBvcnQgY29uc3QgUFJPRF9ERVBMT1lfTkFNRSA9IFwicHJvZC1kZXBsb3lcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGxveSBpcyB0aGlzIHdvcmtmbG93IGZvcj9cbiAgICpcbiAgICogQGRlZmF1bHQgQVdTX0RFUExPWV9UWVBFLkRFVlxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRGVwbG95VHlwZT86IFZhbHVlT2Y8dHlwZW9mIEFXU19ERVBMT1lfVFlQRT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgZmVlZCBhIGxpc3Qgb2YgdGFyZ2V0cyB0byBkZXBsb3kgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGRpc2NvdmVycyBhbGwgdGFyZ2V0cyB1c2luZyBkZXBsb3lUeXBlXG4gICAqL1xuICByZWFkb25seSBhd3NEZXBsb3ltZW50VGFyZ2V0cz86IEFycmF5PEF3c0RlcGxveW1lbnRUYXJnZXQ+O1xuXG4gIC8qKlxuICAgKiBFeGlzdGluZyB3b3JrZmxvdywgdXNlZnVsIGlmIHdlJ3JlIHRhY2tpbmcgZGVwbG95bWVudHMgb250byBhbiBleGlzdGluZ1xuICAgKiBidWlsZCB3b3JrZmxvd1xuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IEJ1aWxkV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBidWlsZCB3b3JrZmxvdywgaWYgbm8gYnVpbGQgd29ya2Zsb3cgaXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBidWlsZFdvcmtmbG93T3B0aW9ucz86IEJ1aWxkV29ya2Zsb3dPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgQXdzRGVwbG95V29ya2Zsb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgc3RhdGljIG9mKFxuICAgIHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHAsXG4gICAgYnVpbGRXb3JrZmxvdzogQnVpbGRXb3JrZmxvdyxcbiAgKTogQXdzRGVwbG95V29ya2Zsb3cgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGVmaW5lZCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEF3c0RlcGxveVdvcmtmbG93ID0+XG4gICAgICBjIGluc3RhbmNlb2YgQXdzRGVwbG95V29ya2Zsb3cgJiYgYy5idWlsZFdvcmtmbG93ID09PSBidWlsZFdvcmtmbG93O1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0RlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IHByb2plY3QgZm9yIHRoaXMgZGVwbG95IHdvcmtmbG93LiBNdXN0IGJlIGEgbW9ub3JlcG8gcHJvamVjdC5cbiAgICovXG4gIHByaXZhdGUgcm9vdFByb2plY3Q6IE1vbm9yZXBvUHJvamVjdDtcblxuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGxveSBpcyB0aGlzIHdvcmtmbG93IGZvcj9cbiAgICovXG4gIHB1YmxpYyBhd3NEZXBsb3lUeXBlOiBWYWx1ZU9mPHR5cGVvZiBBV1NfREVQTE9ZX1RZUEU+O1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXRzIHRvIGRlcGxveSB0by5cbiAgICovXG4gIHJlYWRvbmx5IGF3c0RlcGxveW1lbnRUYXJnZXRzOiBBcnJheTxBd3NEZXBsb3ltZW50VGFyZ2V0PjtcblxuICAvKipcbiAgICogSG9sZCB0aGUgZGVwbG95IHdvcmtmbG93IHNvIHdlIGNhbiBhZGQgdG8gaXQgaW4gcHJlU3ludGhcbiAgICovXG4gIHB1YmxpYyBidWlsZFdvcmtmbG93OiBCdWlsZFdvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLFxuICAgIG9wdGlvbnM6IERlcGxveVdvcmtmbG93T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFJvb3QgcHJvamVjdCBjaGVja1xuICAgICAqXG4gICAgICogRGV0ZWN0IHRoZSByb290IHByb2plY3QgYW5kIGVuc3VyZSBpdCdzIG9mIHR5cGUgTW9ub3JlcG9Qcm9qZWN0LlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKCEocHJvamVjdC5yb290IGluc3RhbmNlb2YgTW9ub3JlcG9Qcm9qZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF3c0RlcGxveVdvcmtmbG93IHJlcXVpcmVzIHRoZSByb290IHByb2plY3QgdG8gYmUgYSBNb25vcmVwb1Byb2plY3RcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290UHJvamVjdCA9IHByb2plY3Qucm9vdDtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEdpdEh1YiBDaGVja1xuICAgICAqXG4gICAgICogTWFrZSBzdXJlIGdpdGh1YiBjb25maWcgaXMgYWN0aXZlIGluIHRoZSBwcm9qZWN0LiBUaGlzIGlzIHRvIGVuc3VyZSBhbGxcbiAgICAgKiB3b3JrZmxvd3Mgd2lsbCBiZSBvdXRwdXQgcHJvcGVybHkgZHVyaW5nIHN5bnRoLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgZ2l0aHViID0gR2l0SHViLm9mKHRoaXMucm9vdFByb2plY3QpO1xuXG4gICAgaWYgKCFnaXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBd3NEZXBsb3lXb3JrZmxvdyByZXF1aXJlcyBhIEdpdEh1YiBjb21wb25lbnQgaW4gdGhlIHJvb3QgcHJvamVjdFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBXb3JrZmxvdyBEZXBsb3kgVHlwZVxuICAgICAqXG4gICAgICogV2hhdCB0eXBlIG9mIGVudmlyb25tZW50cyBhcmUgd2UgZGVwbG95aW5nIGludG8/IFdlJ2xsIGRlZmF1bHQgdG8gZGV2IHRvXG4gICAgICogYmUgc2FmZS5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYXdzRGVwbG95VHlwZSA9IG9wdGlvbnMuYXdzRGVwbG95VHlwZSA/PyBBV1NfREVQTE9ZX1RZUEUuREVWO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogV29ya2Zsb3cgRGVwbG95IFRhcmdldHNcbiAgICAgKlxuICAgICAqIFVzZSBwcm92aWRlZCB0YXJnZXRzIG9yIGRpc2NvdmVyIHRoZW0gYmFzZWQgb24gdGhlIGRlcGxveSB0eXBlLiBPbmx5XG4gICAgICogaW5jbHVkZSB0YXJnZXRzIHRoYXQgYXJlIG1hcmtlZCBmb3IgQ0kvQ0QuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmF3c0RlcGxveW1lbnRUYXJnZXRzID1cbiAgICAgIG9wdGlvbnMuYXdzRGVwbG95bWVudFRhcmdldHMgPz9cbiAgICAgIEF3c0RlcGxveW1lbnRDb25maWcub2YocHJvamVjdCk/LmF3c0RlcGxveW1lbnRUYXJnZXRzLmZpbHRlcihcbiAgICAgICAgKHRhcmdldCkgPT5cbiAgICAgICAgICB0YXJnZXQuYXdzRGVwbG95bWVudFR5cGUgPT09IHRoaXMuYXdzRGVwbG95VHlwZSAmJlxuICAgICAgICAgIHRhcmdldC5jaURlcGxveW1lbnQsXG4gICAgICApID8/XG4gICAgICBbXTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEJ1aWxkIFdvcmtmbG93IE9wdGlvbnNcbiAgICAgKlxuICAgICAqIENhbid0IHVzZSB0aGUgb3B0aW9ucyBpZiBhbiBleGlzdGluZyB3b3JrZmxvdyB3YXMgcGFzc2VkIGluLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKG9wdGlvbnMuYnVpbGRXb3JrZmxvdyAmJiBvcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHByb3ZpZGUgYm90aCBidWlsZFdvcmtmbG93IGFuZCBidWlsZFdvcmtmbG93T3B0aW9uc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBCdWlsZCBXb3JrZmxvd1xuICAgICAqXG4gICAgICogQ3JlYXRlIGEgd29ya2Zsb3cgZWl0aGVyIGJhc2VkIG9uIGlucHV0IG9yIGZyb20gc2NyYXRjaC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdyA9XG4gICAgICBvcHRpb25zLmJ1aWxkV29ya2Zsb3cgPz9cbiAgICAgIG5ldyBCdWlsZFdvcmtmbG93KHByb2plY3QsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5hbWUgYmFzZWQgb24gcHJvamVjdCBhbmQgZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiBbXCJkZXBsb3lcIiwgcHJvamVjdC5uYW1lLCB0aGlzLmF3c0RlcGxveVR5cGVdLmpvaW4oXCItXCIpLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhlIHJvb3QgcHJvamVjdHMgYnVpbGQgdGFzay5cbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5yb290UHJvamVjdC5idWlsZFRhc2ssXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBwdXNoIHRyaWdnZXJzIGJhc2VkIG4gdGhlIGJyYW5jaCBjb25maWcgZm9yIGVhY2ggZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB3b3JrZmxvd1RyaWdnZXJzOiB7XG4gICAgICAgICAgcHVzaDoge1xuICAgICAgICAgICAgYnJhbmNoZXM6IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5hd3NEZXBsb3ltZW50VGFyZ2V0cy5mbGF0TWFwKCh0KSA9PlxuICAgICAgICAgICAgICAgIHQuYnJhbmNoZXMubWFwKChiKSA9PiBiLmJyYW5jaCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICAgICAgLi4ub3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ud29ya2Zsb3dUcmlnZ2VycyxcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTmV2ZXIgYWxsb3cgbXV0YXRpb25zIGZvciBkZXBsb3lzLiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZFxuICAgICAgICAgKiBkdXJpbmcgYnVpbGQuXG4gICAgICAgICAqL1xuICAgICAgICBtdXRhYmxlQnVpbGQ6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXR1cCBDb25maWcgc3RlcHMgdG8gcnVuIGJlZm9yZSB0aGUgYnVpbGQuXG4gICAgICAgICAqL1xuICAgICAgICBwcmVCdWlsZFN0ZXBzOiBbXG4gICAgICAgICAgLi4udGhpcy5zZXR1cFBucG0oKSxcbiAgICAgICAgICAuLi50aGlzLnNldHVwTm9kZSgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXNcIixcbiAgICAgICAgICAgIHJ1bjogXCJwbnBtIGkgLS1uby1mcm96ZW4tbG9ja2ZpbGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAuLi5vcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zLFxuICAgICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBBZGQgRGVwbG95bWVudHMgdG8gd29ya2Zsb3dcbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYXdzRGVwbG95bWVudFRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBkZXBsb3lKb2JOYW1lID0gYCR7dGFyZ2V0LmF3c0RlcGxveW1lbnRUeXBlfS1kZXBsb3ktJHt0aGlzLnByb2plY3QubmFtZX0tJHt0YXJnZXQuYWNjb3VudH0tJHt0YXJnZXQucmVnaW9ufWA7XG5cbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdy5hZGRQb3N0QnVpbGRKb2IoZGVwbG95Sm9iTmFtZSwge1xuICAgICAgICBuYW1lOiBgRGVwbG95ICR7dGFyZ2V0LmF3c0RlcGxveW1lbnRUeXBlfS8ke3RhcmdldC5hY2NvdW50fS8ke3RhcmdldC5yZWdpb259YCxcbiAgICAgICAgcnVuc09uOiBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uY3VycmVuY3k6IGRlcGxveUpvYk5hbWUsXG4gICAgICAgIHN0ZXBzOiBbLi4udGhpcy5kZXBsb3lTdGVwcyh0YXJnZXQpXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5vZGUgPSAoKTogQXJyYXk8Sm9iU3RlcD4gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgTm9kZVwiLFxuICAgICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2NFwiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgW1wibm9kZS12ZXJzaW9uXCJdOiBWRVJTSU9OLk5PREVfV09SS0ZMT1dTLFxuICAgICAgICB9LFxuICAgICAgICAvLyBvY2Nhc2lvbmFsbHkgdGhpcyBzdGVwIGZhaWxzIGR1ZSB0byBpbnRlcm5hbCBpc3N1ZXMgYXQgZ2l0aHViXG4gICAgICAgIHRpbWVvdXRNaW51dGVzOiAxLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0dXBQbnBtID0gKCk6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIlNldHVwIFBOUE1cIixcbiAgICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cEB2M1wiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgdmVyc2lvbjogVkVSU0lPTi5QTlBNX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG5cbiAgcHJpdmF0ZSBkZXBsb3lTdGVwcyA9ICh0YXJnZXQ6IEF3c0RlcGxveW1lbnRUYXJnZXQpOiBBcnJheTxKb2JTdGVwPiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgYXdzRGVwbG95bWVudFR5cGUsXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgY2lEZXBsb3ltZW50Q29uZmlnLFxuICAgICAgYXdzRGVwbG95bWVudENvbmZpZyxcbiAgICB9ID0gdGFyZ2V0O1xuICAgIGNvbnN0IHsgcm9sZUFybiB9ID0gY2lEZXBsb3ltZW50Q29uZmlnID8/IHt9O1xuICAgIGNvbnN0IHsgY2RrT3V0IH0gPSBhd3NEZXBsb3ltZW50Q29uZmlnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuc2V0dXBQbnBtKCksXG4gICAgICAuLi50aGlzLnNldHVwTm9kZSgpLFxuXG4gICAgICAvKipcbiAgICAgICAqIEluc3RhbGwgQ0RLXG4gICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJJbnN0YWxsIENES1wiLFxuICAgICAgICBydW46IFwicG5wbSBhZGQgYXdzLWNka1wiLFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb25maWd1cmUgQVdTIGNyZWRzLlxuICAgICAgICovXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGBBV1MgQ3JlZHMgJHthd3NEZXBsb3ltZW50VHlwZX0vJHthY2NvdW50fS8ke3JlZ2lvbn1gLFxuICAgICAgICB1c2VzOiBcImF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjRcIixcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIFwicm9sZS10by1hc3N1bWVcIjogcm9sZUFybixcbiAgICAgICAgICBcImF3cy1yZWdpb25cIjogcmVnaW9uLFxuICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCwgLy8gMTUgbWludXRlc1xuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBSdW4gQ0RLIERlcGxveVxuICAgICAgICovXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGBEZXBsb3kgJHt0YXJnZXQuYXdzRGVwbG95bWVudFR5cGV9LyR7dGFyZ2V0LmFjY291bnR9LyR7dGFyZ2V0LnJlZ2lvbn1gLFxuICAgICAgICBydW46IGBwbnBtIGRseCBhd3MtY2RrIGRlcGxveSAtLW5vLXJvbGxiYWNrIC0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlciAtLWFwcD0ke2Nka091dH0gXCIqLSR7YWNjb3VudH0tJHtyZWdpb259XCJgLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogQWRkIHR1cmJvIHRvIGFsbCB3b3JrZmxvdywgaWYgdHVyYm8gaXMgaW4gdXNlIGJ5IHJvb3QgcHJvamVjdFxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKFR1cmJvUmVwby5vZih0aGlzLnJvb3RQcm9qZWN0KSkge1xuICAgICAgdGhpcy5idWlsZFdvcmtmbG93LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgICAgbmFtZTogXCJCdWlsZCBTdWIgUHJvamVjdHNcIixcbiAgICAgICAgcnVuOiBgbnB4IHByb2plbiAke1JPT1RfQ0lfVEFTS19OQU1FfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1 @@
1
- export * from "./build-workflow";
2
- export * from "./deploy-workflow";
1
+ export * from "./aws-deploy-workflow";
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./build-workflow"), exports);
18
- __exportStar(require("./deploy-workflow"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYnVpbGQtd29ya2Zsb3dcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcGxveS13b3JrZmxvd1wiO1xuIl19
17
+ __exportStar(require("./aws-deploy-workflow"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hd3MtZGVwbG95LXdvcmtmbG93XCI7XG4iXX0=
package/package.json CHANGED
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "main": "lib/index.js",
41
41
  "license": "MIT",
42
- "version": "0.0.21",
42
+ "version": "0.0.22",
43
43
  "types": "lib/index.d.ts",
44
44
  "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".",
45
45
  "scripts": {
@@ -1,13 +0,0 @@
1
- import { Component } from "projen";
2
- import { TypeScriptAppProject } from "projen/lib/typescript";
3
- export declare const PREVIEW_DEPLOY_NAME = "preview-deploy";
4
- export declare class BuildWorkflow extends Component {
5
- project: TypeScriptAppProject;
6
- constructor(project: TypeScriptAppProject);
7
- /**
8
- * This runs after all the projects are setup but before any files are
9
- * synthesized. This allows us to update the build yaml with complete
10
- * information.
11
- */
12
- preSynthesize(): void;
13
- }
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildWorkflow = exports.PREVIEW_DEPLOY_NAME = void 0;
4
- const projen_1 = require("projen");
5
- const awscdk_1 = require("projen/lib/awscdk");
6
- const workflows_model_1 = require("projen/lib/github/workflows-model");
7
- const deploy_1 = require("./steps/deploy");
8
- const aws_deployment_config_1 = require("../aws/aws-deployment-config");
9
- exports.PREVIEW_DEPLOY_NAME = "preview-deploy";
10
- class BuildWorkflow extends projen_1.Component {
11
- constructor(project) {
12
- super(project);
13
- this.project = project;
14
- }
15
- /**
16
- * This runs after all the projects are setup but before any files are
17
- * synthesized. This allows us to update the build yaml with complete
18
- * information.
19
- */
20
- preSynthesize() {
21
- super.preSynthesize();
22
- /**
23
- * Deploy PR preview to dev environment(s)
24
- */
25
- this.project.subprojects
26
- // only AwsCdkTypeScriptApp projects
27
- .filter((subproject) => subproject instanceof awscdk_1.AwsCdkTypeScriptApp)
28
- .forEach((subproject) => {
29
- /**
30
- * an array of all deployment configs.
31
- */
32
- const deployConfigs = aws_deployment_config_1.AwsDeploymentConfig.of(subproject);
33
- /**
34
- * Any configs? let's see if any have CI support for PR deploys!
35
- */
36
- if (deployConfigs) {
37
- deployConfigs.forEach((config) => {
38
- config.deploymentTargets
39
- // only development targets for CI
40
- .filter((dt) => dt.ciDeployment &&
41
- dt.awsDeploymentType === aws_deployment_config_1.AWS_DEPLOY_TYPE.DEV)
42
- .forEach((dt) => {
43
- /**
44
- * Nice long annoying but unique name.
45
- */
46
- const deployJobName = `${exports.PREVIEW_DEPLOY_NAME}-${this.project.name}-${dt.account}-${dt.region}`;
47
- this.project.buildWorkflow?.addPostBuildJob(deployJobName, {
48
- name: `Deploy PR Preview to ${dt.account}/${dt.region}`,
49
- runsOn: ["ubuntu-latest"],
50
- permissions: {
51
- contents: workflows_model_1.JobPermission.READ,
52
- idToken: workflows_model_1.JobPermission.WRITE,
53
- },
54
- concurrency: deployJobName,
55
- steps: [...(0, deploy_1.deploySteps)(subproject, dt)],
56
- });
57
- });
58
- });
59
- }
60
- });
61
- }
62
- }
63
- exports.BuildWorkflow = BuildWorkflow;
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3dzL2J1aWxkLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyw4Q0FBd0Q7QUFDeEQsdUVBQWtFO0FBRWxFLDJDQUE2QztBQUM3Qyx3RUFHc0M7QUFFekIsUUFBQSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUVwRCxNQUFhLGFBQWMsU0FBUSxrQkFBUztJQUMxQyxZQUFtQixPQUE2QjtRQUM5QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFERSxZQUFPLEdBQVAsT0FBTyxDQUFzQjtJQUVoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWE7UUFDWCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEI7O1dBRUc7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDdEIsb0NBQW9DO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxZQUFZLDRCQUFtQixDQUFDO2FBQ2pFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3RCOztlQUVHO1lBQ0gsTUFBTSxhQUFhLEdBQUcsMkNBQW1CLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXpEOztlQUVHO1lBQ0gsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMvQixNQUFNLENBQUMsaUJBQWlCO3dCQUN0QixrQ0FBa0M7eUJBQ2pDLE1BQU0sQ0FDTCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ0wsRUFBRSxDQUFDLFlBQVk7d0JBQ2YsRUFBRSxDQUFDLGlCQUFpQixLQUFLLHVDQUFlLENBQUMsR0FBRyxDQUMvQzt5QkFDQSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDZDs7MkJBRUc7d0JBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBRywyQkFBbUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFFL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQWEsRUFBRTs0QkFDekQsSUFBSSxFQUFFLHdCQUF3QixFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7NEJBQ3ZELE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQzs0QkFDekIsV0FBVyxFQUFFO2dDQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7Z0NBQzVCLE9BQU8sRUFBRSwrQkFBYSxDQUFDLEtBQUs7NkJBQzdCOzRCQUNELFdBQVcsRUFBRSxhQUFhOzRCQUMxQixLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUEsb0JBQVcsRUFBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7eUJBQ3hDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRjtBQTFERCxzQ0EwREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSBcInByb2plbi9saWIvYXdzY2RrXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgVHlwZVNjcmlwdEFwcFByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBkZXBsb3lTdGVwcyB9IGZyb20gXCIuL3N0ZXBzL2RlcGxveVwiO1xuaW1wb3J0IHtcbiAgQVdTX0RFUExPWV9UWVBFLFxuICBBd3NEZXBsb3ltZW50Q29uZmlnLFxufSBmcm9tIFwiLi4vYXdzL2F3cy1kZXBsb3ltZW50LWNvbmZpZ1wiO1xuXG5leHBvcnQgY29uc3QgUFJFVklFV19ERVBMT1lfTkFNRSA9IFwicHJldmlldy1kZXBsb3lcIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkV29ya2Zsb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvamVjdDogVHlwZVNjcmlwdEFwcFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJ1bnMgYWZ0ZXIgYWxsIHRoZSBwcm9qZWN0cyBhcmUgc2V0dXAgYnV0IGJlZm9yZSBhbnkgZmlsZXMgYXJlXG4gICAqIHN5bnRoZXNpemVkLiBUaGlzIGFsbG93cyB1cyB0byB1cGRhdGUgdGhlIGJ1aWxkIHlhbWwgd2l0aCBjb21wbGV0ZVxuICAgKiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgLyoqXG4gICAgICogRGVwbG95IFBSIHByZXZpZXcgdG8gZGV2IGVudmlyb25tZW50KHMpXG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0LnN1YnByb2plY3RzXG4gICAgICAvLyBvbmx5IEF3c0Nka1R5cGVTY3JpcHRBcHAgcHJvamVjdHNcbiAgICAgIC5maWx0ZXIoKHN1YnByb2plY3QpID0+IHN1YnByb2plY3QgaW5zdGFuY2VvZiBBd3NDZGtUeXBlU2NyaXB0QXBwKVxuICAgICAgLmZvckVhY2goKHN1YnByb2plY3QpID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFuIGFycmF5IG9mIGFsbCBkZXBsb3ltZW50IGNvbmZpZ3MuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkZXBsb3lDb25maWdzID0gQXdzRGVwbG95bWVudENvbmZpZy5vZihzdWJwcm9qZWN0KTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQW55IGNvbmZpZ3M/IGxldCdzIHNlZSBpZiBhbnkgaGF2ZSBDSSBzdXBwb3J0IGZvciBQUiBkZXBsb3lzIVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGRlcGxveUNvbmZpZ3MpIHtcbiAgICAgICAgICBkZXBsb3lDb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgY29uZmlnLmRlcGxveW1lbnRUYXJnZXRzXG4gICAgICAgICAgICAgIC8vIG9ubHkgZGV2ZWxvcG1lbnQgdGFyZ2V0cyBmb3IgQ0lcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZHQpID0+XG4gICAgICAgICAgICAgICAgICBkdC5jaURlcGxveW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgIGR0LmF3c0RlcGxveW1lbnRUeXBlID09PSBBV1NfREVQTE9ZX1RZUEUuREVWLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5mb3JFYWNoKChkdCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5pY2UgbG9uZyBhbm5veWluZyBidXQgdW5pcXVlIG5hbWUuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwbG95Sm9iTmFtZSA9IGAke1BSRVZJRVdfREVQTE9ZX05BTUV9LSR7dGhpcy5wcm9qZWN0Lm5hbWV9LSR7ZHQuYWNjb3VudH0tJHtkdC5yZWdpb259YDtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdC5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRKb2IoZGVwbG95Sm9iTmFtZSwge1xuICAgICAgICAgICAgICAgICAgbmFtZTogYERlcGxveSBQUiBQcmV2aWV3IHRvICR7ZHQuYWNjb3VudH0vJHtkdC5yZWdpb259YCxcbiAgICAgICAgICAgICAgICAgIHJ1bnNPbjogW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgICAgICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IGRlcGxveUpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICBzdGVwczogWy4uLmRlcGxveVN0ZXBzKHN1YnByb2plY3QsIGR0KV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,17 +0,0 @@
1
- import { Component } from "projen";
2
- import { TypeScriptAppProject } from "projen/lib/typescript";
3
- export declare const PROD_DEPLOY_NAME = "prod-deploy";
4
- export declare class DeployWorkflow extends Component {
5
- project: TypeScriptAppProject;
6
- /**
7
- * Hold the deploy workflow so we can add to it in preSynth
8
- */
9
- private workflow;
10
- constructor(project: TypeScriptAppProject);
11
- /**
12
- * This runs after all the projects are setup but before any files are
13
- * synthesized. This allows us to update the build yaml with complete
14
- * information.
15
- */
16
- preSynthesize(): void;
17
- }
@@ -1,113 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeployWorkflow = exports.PROD_DEPLOY_NAME = void 0;
4
- const projen_1 = require("projen");
5
- const awscdk_1 = require("projen/lib/awscdk");
6
- const build_1 = require("projen/lib/build");
7
- const github_1 = require("projen/lib/github");
8
- const workflows_model_1 = require("projen/lib/github/workflows-model");
9
- const versions_1 = require("../versions");
10
- const deploy_1 = require("./steps/deploy");
11
- const aws_deployment_config_1 = require("../aws/aws-deployment-config");
12
- const turbo_repo_1 = require("../turbo/turbo-repo");
13
- exports.PROD_DEPLOY_NAME = "prod-deploy";
14
- class DeployWorkflow extends projen_1.Component {
15
- constructor(project) {
16
- super(project);
17
- this.project = project;
18
- const github = github_1.GitHub.of(project);
19
- if (!github) {
20
- throw new Error("DeployWorkflow requires a GitHub component in the project");
21
- }
22
- /***************************************************************************
23
- *
24
- * Build normally
25
- *
26
- * TODO: This should really be using a released artifact from a
27
- * versioned build.
28
- *
29
- **************************************************************************/
30
- this.workflow = new build_1.BuildWorkflow(project, {
31
- name: "deploy",
32
- buildTask: project.buildTask,
33
- workflowTriggers: {
34
- push: {
35
- branches: ["main"],
36
- },
37
- workflowDispatch: {},
38
- },
39
- mutableBuild: false,
40
- preBuildSteps: [
41
- {
42
- name: "Setup PNPM",
43
- uses: "pnpm/action-setup@v3",
44
- with: {
45
- version: versions_1.VERSION.PNPM_VERSION,
46
- },
47
- },
48
- {
49
- name: "Install dependencies",
50
- run: "pnpm i --no-frozen-lockfile",
51
- },
52
- ],
53
- });
54
- /**
55
- * Attach build all turbo runner to the build workflow.
56
- */
57
- this.workflow.addPostBuildSteps({
58
- name: "Build Sub Projects",
59
- run: `npx projen ${turbo_repo_1.ROOT_CI_TASK_NAME}`,
60
- });
61
- }
62
- /**
63
- * This runs after all the projects are setup but before any files are
64
- * synthesized. This allows us to update the build yaml with complete
65
- * information.
66
- */
67
- preSynthesize() {
68
- super.preSynthesize();
69
- /***************************************************************************
70
- *
71
- * Production Deploy
72
- *
73
- **************************************************************************/
74
- this.project.subprojects
75
- // only AwsCdkTypeScriptApp projects
76
- .filter((subproject) => subproject instanceof awscdk_1.AwsCdkTypeScriptApp)
77
- .forEach((subproject) => {
78
- /**
79
- * An array of all deployment configs.
80
- */
81
- const deployConfigs = aws_deployment_config_1.AwsDeploymentConfig.of(subproject);
82
- /**
83
- * Any configs? let's see if any have CI support for PR deploys!
84
- */
85
- if (deployConfigs) {
86
- deployConfigs.forEach((config) => {
87
- config.deploymentTargets
88
- // only development targets for CI
89
- .filter((dt) => dt.ciDeployment &&
90
- dt.awsDeploymentType === aws_deployment_config_1.AWS_DEPLOY_TYPE.PROD)
91
- .forEach((dt) => {
92
- /**
93
- * Nice long annoying but unique name.
94
- */
95
- const deployJobName = `deploy-${this.project.name}-${dt.account}-${dt.region}`;
96
- this.workflow.addPostBuildJob(deployJobName, {
97
- name: `Deploy Prod to ${dt.account}/${dt.region}`,
98
- runsOn: ["ubuntu-latest"],
99
- permissions: {
100
- contents: workflows_model_1.JobPermission.READ,
101
- idToken: workflows_model_1.JobPermission.WRITE,
102
- },
103
- concurrency: deployJobName,
104
- steps: [...(0, deploy_1.deploySteps)(subproject, dt)],
105
- });
106
- });
107
- });
108
- }
109
- });
110
- }
111
- }
112
- exports.DeployWorkflow = DeployWorkflow;
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93cy9kZXBsb3ktd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBQ25DLDhDQUF3RDtBQUN4RCw0Q0FBaUQ7QUFDakQsOENBQTJDO0FBQzNDLHVFQUFrRTtBQUVsRSwwQ0FBc0M7QUFDdEMsMkNBQTZDO0FBQzdDLHdFQUdzQztBQUN0QyxvREFBd0Q7QUFFM0MsUUFBQSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFFOUMsTUFBYSxjQUFlLFNBQVEsa0JBQVM7SUFNM0MsWUFBbUIsT0FBNkI7UUFDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREUsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFHOUMsTUFBTSxNQUFNLEdBQUcsZUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUVEOzs7Ozs7O29GQU80RTtRQUU1RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDekMsSUFBSSxFQUFFLFFBQVE7WUFDZCxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLElBQUksRUFBRTtvQkFDSixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7aUJBQ25CO2dCQUNELGdCQUFnQixFQUFFLEVBQUU7YUFDckI7WUFDRCxZQUFZLEVBQUUsS0FBSztZQUVuQixhQUFhLEVBQUU7Z0JBQ2I7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsa0JBQU8sQ0FBQyxZQUFZO3FCQUM5QjtpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsc0JBQXNCO29CQUM1QixHQUFHLEVBQUUsNkJBQTZCO2lCQUNuQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1lBQzlCLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsR0FBRyxFQUFFLGNBQWMsOEJBQWlCLEVBQUU7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhO1FBQ1gsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXRCOzs7O29GQUk0RTtRQUU1RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDdEIsb0NBQW9DO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxZQUFZLDRCQUFtQixDQUFDO2FBQ2pFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3RCOztlQUVHO1lBQ0gsTUFBTSxhQUFhLEdBQUcsMkNBQW1CLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXpEOztlQUVHO1lBQ0gsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMvQixNQUFNLENBQUMsaUJBQWlCO3dCQUN0QixrQ0FBa0M7eUJBQ2pDLE1BQU0sQ0FDTCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ0wsRUFBRSxDQUFDLFlBQVk7d0JBQ2YsRUFBRSxDQUFDLGlCQUFpQixLQUFLLHVDQUFlLENBQUMsSUFBSSxDQUNoRDt5QkFDQSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDZDs7MkJBRUc7d0JBQ0gsTUFBTSxhQUFhLEdBQUcsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFFL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFOzRCQUMzQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTs0QkFDakQsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDOzRCQUN6QixXQUFXLEVBQUU7Z0NBQ1gsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSTtnQ0FDNUIsT0FBTyxFQUFFLCtCQUFhLENBQUMsS0FBSzs2QkFDN0I7NEJBQ0QsV0FBVyxFQUFFLGFBQWE7NEJBQzFCLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBQSxvQkFBVyxFQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQzt5QkFDeEMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNGO0FBckhELHdDQXFIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tIFwicHJvamVuL2xpYi9hd3NjZGtcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3cgfSBmcm9tIFwicHJvamVuL2xpYi9idWlsZFwiO1xuaW1wb3J0IHsgR2l0SHViIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgVHlwZVNjcmlwdEFwcFByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4uL3ZlcnNpb25zXCI7XG5pbXBvcnQgeyBkZXBsb3lTdGVwcyB9IGZyb20gXCIuL3N0ZXBzL2RlcGxveVwiO1xuaW1wb3J0IHtcbiAgQVdTX0RFUExPWV9UWVBFLFxuICBBd3NEZXBsb3ltZW50Q29uZmlnLFxufSBmcm9tIFwiLi4vYXdzL2F3cy1kZXBsb3ltZW50LWNvbmZpZ1wiO1xuaW1wb3J0IHsgUk9PVF9DSV9UQVNLX05BTUUgfSBmcm9tIFwiLi4vdHVyYm8vdHVyYm8tcmVwb1wiO1xuXG5leHBvcnQgY29uc3QgUFJPRF9ERVBMT1lfTkFNRSA9IFwicHJvZC1kZXBsb3lcIjtcblxuZXhwb3J0IGNsYXNzIERlcGxveVdvcmtmbG93IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGRlcGxveSB3b3JrZmxvdyBzbyB3ZSBjYW4gYWRkIHRvIGl0IGluIHByZVN5bnRoXG4gICAqL1xuICBwcml2YXRlIHdvcmtmbG93OiBCdWlsZFdvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9qZWN0OiBUeXBlU2NyaXB0QXBwUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgZ2l0aHViID0gR2l0SHViLm9mKHByb2plY3QpO1xuXG4gICAgaWYgKCFnaXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJEZXBsb3lXb3JrZmxvdyByZXF1aXJlcyBhIEdpdEh1YiBjb21wb25lbnQgaW4gdGhlIHByb2plY3RcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogQnVpbGQgbm9ybWFsbHlcbiAgICAgKlxuICAgICAqIFRPRE86IFRoaXMgc2hvdWxkIHJlYWxseSBiZSB1c2luZyBhIHJlbGVhc2VkIGFydGlmYWN0IGZyb20gYVxuICAgICAqICAgICAgICB2ZXJzaW9uZWQgYnVpbGQuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IEJ1aWxkV29ya2Zsb3cocHJvamVjdCwge1xuICAgICAgbmFtZTogXCJkZXBsb3lcIixcbiAgICAgIGJ1aWxkVGFzazogcHJvamVjdC5idWlsZFRhc2ssXG4gICAgICB3b3JrZmxvd1RyaWdnZXJzOiB7XG4gICAgICAgIHB1c2g6IHtcbiAgICAgICAgICBicmFuY2hlczogW1wibWFpblwiXSxcbiAgICAgICAgfSxcbiAgICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICB9LFxuICAgICAgbXV0YWJsZUJ1aWxkOiBmYWxzZSxcblxuICAgICAgcHJlQnVpbGRTdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJTZXR1cCBQTlBNXCIsXG4gICAgICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cEB2M1wiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIHZlcnNpb246IFZFUlNJT04uUE5QTV9WRVJTSU9OLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkluc3RhbGwgZGVwZW5kZW5jaWVzXCIsXG4gICAgICAgICAgcnVuOiBcInBucG0gaSAtLW5vLWZyb3plbi1sb2NrZmlsZVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBidWlsZCBhbGwgdHVyYm8gcnVubmVyIHRvIHRoZSBidWlsZCB3b3JrZmxvdy5cbiAgICAgKi9cbiAgICB0aGlzLndvcmtmbG93LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgIG5hbWU6IFwiQnVpbGQgU3ViIFByb2plY3RzXCIsXG4gICAgICBydW46IGBucHggcHJvamVuICR7Uk9PVF9DSV9UQVNLX05BTUV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJ1bnMgYWZ0ZXIgYWxsIHRoZSBwcm9qZWN0cyBhcmUgc2V0dXAgYnV0IGJlZm9yZSBhbnkgZmlsZXMgYXJlXG4gICAqIHN5bnRoZXNpemVkLiBUaGlzIGFsbG93cyB1cyB0byB1cGRhdGUgdGhlIGJ1aWxkIHlhbWwgd2l0aCBjb21wbGV0ZVxuICAgKiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogUHJvZHVjdGlvbiBEZXBsb3lcbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMucHJvamVjdC5zdWJwcm9qZWN0c1xuICAgICAgLy8gb25seSBBd3NDZGtUeXBlU2NyaXB0QXBwIHByb2plY3RzXG4gICAgICAuZmlsdGVyKChzdWJwcm9qZWN0KSA9PiBzdWJwcm9qZWN0IGluc3RhbmNlb2YgQXdzQ2RrVHlwZVNjcmlwdEFwcClcbiAgICAgIC5mb3JFYWNoKChzdWJwcm9qZWN0KSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBhbGwgZGVwbG95bWVudCBjb25maWdzLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGVwbG95Q29uZmlncyA9IEF3c0RlcGxveW1lbnRDb25maWcub2Yoc3VicHJvamVjdCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFueSBjb25maWdzPyBsZXQncyBzZWUgaWYgYW55IGhhdmUgQ0kgc3VwcG9ydCBmb3IgUFIgZGVwbG95cyFcbiAgICAgICAgICovXG4gICAgICAgIGlmIChkZXBsb3lDb25maWdzKSB7XG4gICAgICAgICAgZGVwbG95Q29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5kZXBsb3ltZW50VGFyZ2V0c1xuICAgICAgICAgICAgICAvLyBvbmx5IGRldmVsb3BtZW50IHRhcmdldHMgZm9yIENJXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGR0KSA9PlxuICAgICAgICAgICAgICAgICAgZHQuY2lEZXBsb3ltZW50ICYmXG4gICAgICAgICAgICAgICAgICBkdC5hd3NEZXBsb3ltZW50VHlwZSA9PT0gQVdTX0RFUExPWV9UWVBFLlBST0QsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZvckVhY2goKGR0KSA9PiB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTmljZSBsb25nIGFubm95aW5nIGJ1dCB1bmlxdWUgbmFtZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBsb3lKb2JOYW1lID0gYGRlcGxveS0ke3RoaXMucHJvamVjdC5uYW1lfS0ke2R0LmFjY291bnR9LSR7ZHQucmVnaW9ufWA7XG5cbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LmFkZFBvc3RCdWlsZEpvYihkZXBsb3lKb2JOYW1lLCB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBgRGVwbG95IFByb2QgdG8gJHtkdC5hY2NvdW50fS8ke2R0LnJlZ2lvbn1gLFxuICAgICAgICAgICAgICAgICAgcnVuc09uOiBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgICAgICAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeTogZGVwbG95Sm9iTmFtZSxcbiAgICAgICAgICAgICAgICAgIHN0ZXBzOiBbLi4uZGVwbG95U3RlcHMoc3VicHJvamVjdCwgZHQpXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,4 +0,0 @@
1
- import { AwsCdkTypeScriptApp } from "projen/lib/awscdk";
2
- import { JobStep } from "projen/lib/github/workflows-model";
3
- import { AwsDeploymentTarget } from "../../aws/aws-deployment-config";
4
- export declare const deploySteps: (project: AwsCdkTypeScriptApp, deployTarget: AwsDeploymentTarget) => Array<JobStep>;
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deploySteps = void 0;
4
- const node_path_1 = require("node:path");
5
- const versions_1 = require("../../versions");
6
- const deploySteps = (project, deployTarget) => {
7
- const projectPath = (0, node_path_1.relative)(project.root.outdir, project.outdir);
8
- const cdkOut = (0, node_path_1.join)("dist", projectPath, "cdk.out");
9
- return [
10
- /**
11
- * Setup PNPM
12
- */
13
- {
14
- name: "Setup PNPM",
15
- uses: "pnpm/action-setup@v3",
16
- with: {
17
- version: versions_1.VERSION.PNPM_VERSION,
18
- },
19
- },
20
- /**
21
- * Setup Node
22
- */
23
- {
24
- name: "Setup Node",
25
- uses: "actions/setup-node@v4",
26
- with: {
27
- ["node-version"]: versions_1.VERSION.NODE_WORKFLOWS,
28
- },
29
- // occasionally this step fails due to internal issues at github
30
- timeoutMinutes: 1,
31
- },
32
- /**
33
- * Install CDK
34
- */
35
- {
36
- name: "Install CDK",
37
- run: "pnpm add aws-cdk",
38
- },
39
- /**
40
- * Configure AWS creds.
41
- */
42
- {
43
- name: `Configure AWS Credentials for ${deployTarget.account}/${deployTarget.region}`,
44
- uses: "aws-actions/configure-aws-credentials@v4",
45
- with: {
46
- "role-to-assume": deployTarget.ciDeploymentConfig?.roleArn ??
47
- "ERROR: No role ARN provided",
48
- "aws-region": deployTarget.region,
49
- "role-duration-seconds": 900, // 15 minutes
50
- },
51
- },
52
- /**
53
- * Run CDK Deploy
54
- */
55
- {
56
- name: `Deploy To ${deployTarget.account}/${deployTarget.region}`,
57
- run: `pnpm dlx aws-cdk deploy --no-rollback --require-approval=never --app=${cdkOut} "*-${deployTarget.account}-${deployTarget.region}"`,
58
- },
59
- ];
60
- };
61
- exports.deploySteps = deploySteps;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBSTNDLDZDQUF5QztBQUVsQyxNQUFNLFdBQVcsR0FBRyxDQUN6QixPQUE0QixFQUM1QixZQUFpQyxFQUNqQixFQUFFO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUEsb0JBQVEsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBSSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFcEQsT0FBTztRQUNMOztXQUVHO1FBQ0g7WUFDRSxJQUFJLEVBQUUsWUFBWTtZQUNsQixJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsa0JBQU8sQ0FBQyxZQUFZO2FBQzlCO1NBQ0Y7UUFFRDs7V0FFRztRQUNIO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixJQUFJLEVBQUU7Z0JBQ0osQ0FBQyxjQUFjLENBQUMsRUFBRSxrQkFBTyxDQUFDLGNBQWM7YUFDekM7WUFDRCxnRUFBZ0U7WUFDaEUsY0FBYyxFQUFFLENBQUM7U0FDbEI7UUFFRDs7V0FFRztRQUNIO1lBQ0UsSUFBSSxFQUFFLGFBQWE7WUFDbkIsR0FBRyxFQUFFLGtCQUFrQjtTQUN4QjtRQUVEOztXQUVHO1FBQ0g7WUFDRSxJQUFJLEVBQUUsaUNBQWlDLFlBQVksQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUNwRixJQUFJLEVBQUUsMENBQTBDO1lBQ2hELElBQUksRUFBRTtnQkFDSixnQkFBZ0IsRUFDZCxZQUFZLENBQUMsa0JBQWtCLEVBQUUsT0FBTztvQkFDeEMsNkJBQTZCO2dCQUMvQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxhQUFhO2FBQzVDO1NBQ0Y7UUFFRDs7V0FFRztRQUNIO1lBQ0UsSUFBSSxFQUFFLGFBQWEsWUFBWSxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ2hFLEdBQUcsRUFBRSx3RUFBd0UsTUFBTSxPQUFPLFlBQVksQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRztTQUN6STtLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFoRVcsUUFBQSxXQUFXLGVBZ0V0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gXCJwcm9qZW4vbGliL2F3c2Nka1wiO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gXCJwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IEF3c0RlcGxveW1lbnRUYXJnZXQgfSBmcm9tIFwiLi4vLi4vYXdzL2F3cy1kZXBsb3ltZW50LWNvbmZpZ1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuLi8uLi92ZXJzaW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZGVwbG95U3RlcHMgPSAoXG4gIHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHAsXG4gIGRlcGxveVRhcmdldDogQXdzRGVwbG95bWVudFRhcmdldCxcbik6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgY29uc3QgcHJvamVjdFBhdGggPSByZWxhdGl2ZShwcm9qZWN0LnJvb3Qub3V0ZGlyLCBwcm9qZWN0Lm91dGRpcik7XG5cbiAgY29uc3QgY2RrT3V0ID0gam9pbihcImRpc3RcIiwgcHJvamVjdFBhdGgsIFwiY2RrLm91dFwiKTtcblxuICByZXR1cm4gW1xuICAgIC8qKlxuICAgICAqIFNldHVwIFBOUE1cbiAgICAgKi9cbiAgICB7XG4gICAgICBuYW1lOiBcIlNldHVwIFBOUE1cIixcbiAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBAdjNcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTi5QTlBNX1ZFUlNJT04sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXR1cCBOb2RlXG4gICAgICovXG4gICAge1xuICAgICAgbmFtZTogXCJTZXR1cCBOb2RlXCIsXG4gICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2NFwiLFxuICAgICAgd2l0aDoge1xuICAgICAgICBbXCJub2RlLXZlcnNpb25cIl06IFZFUlNJT04uTk9ERV9XT1JLRkxPV1MsXG4gICAgICB9LFxuICAgICAgLy8gb2NjYXNpb25hbGx5IHRoaXMgc3RlcCBmYWlscyBkdWUgdG8gaW50ZXJuYWwgaXNzdWVzIGF0IGdpdGh1YlxuICAgICAgdGltZW91dE1pbnV0ZXM6IDEsXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluc3RhbGwgQ0RLXG4gICAgICovXG4gICAge1xuICAgICAgbmFtZTogXCJJbnN0YWxsIENES1wiLFxuICAgICAgcnVuOiBcInBucG0gYWRkIGF3cy1jZGtcIixcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIEFXUyBjcmVkcy5cbiAgICAgKi9cbiAgICB7XG4gICAgICBuYW1lOiBgQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscyBmb3IgJHtkZXBsb3lUYXJnZXQuYWNjb3VudH0vJHtkZXBsb3lUYXJnZXQucmVnaW9ufWAsXG4gICAgICB1c2VzOiBcImF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjRcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOlxuICAgICAgICAgIGRlcGxveVRhcmdldC5jaURlcGxveW1lbnRDb25maWc/LnJvbGVBcm4gPz9cbiAgICAgICAgICBcIkVSUk9SOiBObyByb2xlIEFSTiBwcm92aWRlZFwiLFxuICAgICAgICBcImF3cy1yZWdpb25cIjogZGVwbG95VGFyZ2V0LnJlZ2lvbixcbiAgICAgICAgXCJyb2xlLWR1cmF0aW9uLXNlY29uZHNcIjogOTAwLCAvLyAxNSBtaW51dGVzXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSdW4gQ0RLIERlcGxveVxuICAgICAqL1xuICAgIHtcbiAgICAgIG5hbWU6IGBEZXBsb3kgVG8gJHtkZXBsb3lUYXJnZXQuYWNjb3VudH0vJHtkZXBsb3lUYXJnZXQucmVnaW9ufWAsXG4gICAgICBydW46IGBwbnBtIGRseCBhd3MtY2RrIGRlcGxveSAtLW5vLXJvbGxiYWNrIC0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlciAtLWFwcD0ke2Nka091dH0gXCIqLSR7ZGVwbG95VGFyZ2V0LmFjY291bnR9LSR7ZGVwbG95VGFyZ2V0LnJlZ2lvbn1cImAsXG4gICAgfSxcbiAgXTtcbn07XG4iXX0=