@codedrifters/configulator 0.0.21 → 0.0.23
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.
- package/lib/aws/aws-deployment-config.d.ts +40 -108
- package/lib/aws/aws-deployment-config.js +64 -103
- package/lib/aws/aws-deployment-target.d.ts +160 -0
- package/lib/aws/aws-deployment-target.js +158 -0
- package/lib/turbo/turbo-repo.d.ts +5 -1
- package/lib/turbo/turbo-repo.js +8 -8
- package/lib/versions.d.ts +7 -3
- package/lib/versions.js +8 -4
- package/lib/workflows/aws-deploy-workflow.d.ts +54 -0
- package/lib/workflows/aws-deploy-workflow.js +218 -0
- package/lib/workflows/index.d.ts +1 -2
- package/lib/workflows/index.js +2 -3
- package/package.json +2 -2
- package/lib/workflows/build-workflow.d.ts +0 -13
- package/lib/workflows/build-workflow.js +0 -64
- package/lib/workflows/deploy-workflow.d.ts +0 -17
- package/lib/workflows/deploy-workflow.js +0 -113
- package/lib/workflows/steps/deploy.d.ts +0 -4
- package/lib/workflows/steps/deploy.js +0 -62
|
@@ -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==
|
package/lib/workflows/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./deploy-workflow";
|
|
1
|
+
export * from "./aws-deploy-workflow";
|
package/lib/workflows/index.js
CHANGED
|
@@ -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("./
|
|
18
|
-
|
|
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
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/jest": "^30.0.0",
|
|
14
|
-
"@types/node": "^22.17.
|
|
14
|
+
"@types/node": "^22.17.1",
|
|
15
15
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
16
16
|
"@typescript-eslint/parser": "^8",
|
|
17
17
|
"commit-and-tag-version": "^12",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"main": "lib/index.js",
|
|
41
41
|
"license": "MIT",
|
|
42
|
-
"version": "0.0.
|
|
42
|
+
"version": "0.0.23",
|
|
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=
|