@xpertss/projen-types 0.0.1 → 0.0.2
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/.jsii +1083 -92
- package/API.md +7459 -4313
- package/README.md +103 -1
- package/lib/actions/action-build-workflow.d.ts +17 -0
- package/lib/actions/action-build-workflow.js +52 -0
- package/lib/actions/action-dogfood-workflow.d.ts +47 -0
- package/lib/actions/action-dogfood-workflow.js +84 -0
- package/lib/actions/action-sonar-workflow.d.ts +25 -0
- package/lib/actions/action-sonar-workflow.js +64 -0
- package/lib/actions/github-action-project.d.ts +60 -0
- package/lib/actions/github-action-project.js +155 -0
- package/lib/cdk/app-runtime-scaffold.js +1 -1
- package/lib/cdk/cdk-app-project.js +2 -4
- package/lib/cdk/cdk-infra-project.js +1 -1
- package/lib/cdk/cdk-typescript-base.js +16 -3
- package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
- package/lib/cdk/components/edge-networking-constructs.js +1 -1
- package/lib/cdk/database-component.js +1 -1
- package/lib/cdk/options.d.ts +0 -2
- package/lib/cdk/options.js +1 -1
- package/lib/common/actions-allowlist-guard.d.ts +37 -0
- package/lib/common/actions-allowlist-guard.js +70 -0
- package/lib/common/internal-actions.d.ts +10 -0
- package/lib/common/internal-actions.js +33 -0
- package/lib/common/manual-deploy-workflow.d.ts +0 -2
- package/lib/common/manual-deploy-workflow.js +1 -12
- package/lib/common/projen-drift-check-workflow.d.ts +36 -0
- package/lib/common/projen-drift-check-workflow.js +73 -0
- package/lib/common/upgrade-workflow.js +6 -2
- package/lib/common/workflow-change-notice-workflow.d.ts +33 -0
- package/lib/common/workflow-change-notice-workflow.js +58 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +9 -1
- package/lib/java/components/cdk-deploy-hook.js +1 -1
- package/lib/java/components/code-index-workflow.js +1 -1
- package/lib/java/components/docker-publish.js +1 -1
- package/lib/java/components/flyway-migration.js +1 -1
- package/lib/java/components/github-packages-publish.js +1 -1
- package/lib/java/components/maven-central-publish.js +1 -1
- package/lib/java/java-app-project.js +1 -1
- package/lib/java/java-library-project.js +1 -1
- package/lib/java/java-maven-base.js +13 -4
- package/lib/java/java-service-project.js +1 -1
- package/package.json +1 -1
- package/release-publishing.md +57 -66
- package/lib/common/drift-check.d.ts +0 -8
- package/lib/common/drift-check.js +0 -18
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GitHubActionProject = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const projen_1 = require("projen");
|
|
6
|
+
const action_build_workflow_1 = require("./action-build-workflow");
|
|
7
|
+
const action_dogfood_workflow_1 = require("./action-dogfood-workflow");
|
|
8
|
+
const action_sonar_workflow_1 = require("./action-sonar-workflow");
|
|
9
|
+
const actions_allowlist_guard_1 = require("../common/actions-allowlist-guard");
|
|
10
|
+
const constants_1 = require("../common/constants");
|
|
11
|
+
const internal_actions_1 = require("../common/internal-actions");
|
|
12
|
+
const projen_drift_check_workflow_1 = require("../common/projen-drift-check-workflow");
|
|
13
|
+
const workflow_change_notice_workflow_1 = require("../common/workflow-change-notice-workflow");
|
|
14
|
+
// `require('projen/package.json')`/`require('../../package.json')` resolve
|
|
15
|
+
// via Node's normal module resolution, so in a *published* package these
|
|
16
|
+
// read the versions actually installed in the consuming repo's
|
|
17
|
+
// node_modules - exactly the "PROJEN_VERSION of the synth" / "version of
|
|
18
|
+
// this package that scaffolded the repo" the private package.json's
|
|
19
|
+
// devDependencies need to pin (see F010 CI-dependencies section).
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
|
+
const PROJEN_VERSION = require('projen/package.json').version;
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
23
|
+
const PROJEN_TYPES_VERSION = require('../../package.json').version;
|
|
24
|
+
// Exact pins, recorded as component constants (AD-001: no latest/moving
|
|
25
|
+
// tag/semver range in anything a generated repo depends on). Upgrading any
|
|
26
|
+
// of these is a reviewed diff of this file.
|
|
27
|
+
const COMMIT_AND_TAG_VERSION = '13.2.1';
|
|
28
|
+
const TS_NODE_VERSION = '10.9.2';
|
|
29
|
+
const TYPESCRIPT_VERSION = '6.0.3';
|
|
30
|
+
function defaultReadmeContents(options) {
|
|
31
|
+
return `# ${options.name}
|
|
32
|
+
|
|
33
|
+
${options.description ?? ''}
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
\`\`\`yaml
|
|
38
|
+
- uses: xpertss/${options.name}@<ref>
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
## Bumping
|
|
42
|
+
|
|
43
|
+
A \`feat:\`/\`fix:\` commit pushed to \`main\` is released automatically: bump,
|
|
44
|
+
tag \`vX.Y.Z\`, GitHub Release. See \`.github/workflows/release.yml\`.
|
|
45
|
+
|
|
46
|
+
## Trust contract
|
|
47
|
+
|
|
48
|
+
This is a composite (shell) action - no Node/npm at runtime, no Docker. Its
|
|
49
|
+
CI lint gate (\`build.yml\`), dogfood test (\`test-dogfood.yml\`), and Sonar
|
|
50
|
+
scan (\`sonar.yml\`) are scaffolded by \`@xpertss/projen-types\`'
|
|
51
|
+
\`GitHubActionProject\`; only \`action.yml\` and its shell scripts are
|
|
52
|
+
hand-committed.
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite
|
|
57
|
+
* (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release`
|
|
58
|
+
* workflows, versioning and release discipline, the F003 verify components,
|
|
59
|
+
* the F009 allowlist guard, and repo boilerplate (`tsconfig.json` for
|
|
60
|
+
* `.projenrc.ts`, a private version-source `package.json`, `.yamllint`,
|
|
61
|
+
* `LICENSE`, and a `README.md` template). The action's own content
|
|
62
|
+
* (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand
|
|
63
|
+
* per the action's own F### spec - this type only lints it.
|
|
64
|
+
*/
|
|
65
|
+
class GitHubActionProject extends projen_1.github.GitHubProject {
|
|
66
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.2" };
|
|
67
|
+
buildWorkflow;
|
|
68
|
+
dogfoodWorkflow;
|
|
69
|
+
sonarWorkflow;
|
|
70
|
+
release;
|
|
71
|
+
constructor(options) {
|
|
72
|
+
if (!options.sonarHostUrl) {
|
|
73
|
+
throw new Error('GitHubActionProject requires sonarHostUrl');
|
|
74
|
+
}
|
|
75
|
+
if (!options.dogfood?.scenario || options.dogfood.scenario.length === 0) {
|
|
76
|
+
throw new Error('GitHubActionProject requires dogfood.scenario with at least one step');
|
|
77
|
+
}
|
|
78
|
+
if (!options.dogfood.cleanup || options.dogfood.cleanup.length === 0) {
|
|
79
|
+
throw new Error('GitHubActionProject requires dogfood.cleanup');
|
|
80
|
+
}
|
|
81
|
+
super({
|
|
82
|
+
...options,
|
|
83
|
+
readme: options.readme ?? { contents: defaultReadmeContents(options) },
|
|
84
|
+
});
|
|
85
|
+
const gh = this.github;
|
|
86
|
+
if (!gh) {
|
|
87
|
+
throw new Error('GitHubActionProject requires GitHub integration to be enabled');
|
|
88
|
+
}
|
|
89
|
+
(0, internal_actions_1.applyInternalActionOverrides)(gh);
|
|
90
|
+
new projen_drift_check_workflow_1.ProjenDriftCheckWorkflow(this, {
|
|
91
|
+
gheTokenSecret: options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET,
|
|
92
|
+
});
|
|
93
|
+
new workflow_change_notice_workflow_1.WorkflowChangeNoticeWorkflow(this);
|
|
94
|
+
new actions_allowlist_guard_1.ActionsAllowlistGuard(this);
|
|
95
|
+
new projen_1.License(this, {
|
|
96
|
+
spdx: options.license ?? 'MIT',
|
|
97
|
+
copyrightOwner: 'xpertss',
|
|
98
|
+
});
|
|
99
|
+
// Wires the default task to run `.projenrc.ts` via ts-node - a bare
|
|
100
|
+
// GitHubProject has no default task that does this on its own. Runs
|
|
101
|
+
// `npx -y -p ts-node -c ...` under the hood; pinning `ts-node`/
|
|
102
|
+
// `typescript` below as exact devDeps means that, after `npm ci`, this
|
|
103
|
+
// resolves from the committed local install instead of the registry.
|
|
104
|
+
new projen_1.typescript.ProjenrcTs(this, { tsconfigFileName: 'tsconfig.json' });
|
|
105
|
+
new projen_1.JsonFile(this, 'package.json', {
|
|
106
|
+
obj: {
|
|
107
|
+
name: options.name,
|
|
108
|
+
version: '0.0.0',
|
|
109
|
+
private: true,
|
|
110
|
+
description: options.description,
|
|
111
|
+
devDependencies: {
|
|
112
|
+
'projen': PROJEN_VERSION,
|
|
113
|
+
'@xpertss/projen-types': PROJEN_TYPES_VERSION,
|
|
114
|
+
'commit-and-tag-version': COMMIT_AND_TAG_VERSION,
|
|
115
|
+
'ts-node': TS_NODE_VERSION,
|
|
116
|
+
'typescript': TYPESCRIPT_VERSION,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
new projen_1.YamlFile(this, '.yamllint', {
|
|
121
|
+
obj: {
|
|
122
|
+
extends: 'default',
|
|
123
|
+
rules: { 'line-length': { max: 120 } },
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
this.buildWorkflow = new action_build_workflow_1.ActionBuildWorkflow(this);
|
|
127
|
+
this.dogfoodWorkflow = new action_dogfood_workflow_1.ActionDogfoodWorkflow(this, options.dogfood);
|
|
128
|
+
this.sonarWorkflow = new action_sonar_workflow_1.ActionSonarWorkflow(this, {
|
|
129
|
+
sonarHostUrl: options.sonarHostUrl,
|
|
130
|
+
sonarTokenSecret: options.sonarTokenSecret,
|
|
131
|
+
sonarPullRequestGate: options.sonarPullRequestGate,
|
|
132
|
+
});
|
|
133
|
+
// `githubRelease` defaults to true, which auto-wires
|
|
134
|
+
// `publishToGitHubReleases` - its `gh release create ... --target
|
|
135
|
+
// $GITHUB_SHA` creates the tag *and* the release together for our
|
|
136
|
+
// continuous (push-to-main) trigger. No separate `publishToGit` call
|
|
137
|
+
// needed (that path only fires for a manual release trigger).
|
|
138
|
+
this.release = new projen_1.release.Release(this, {
|
|
139
|
+
branch: 'main',
|
|
140
|
+
// No build artifact for a composite action (AD-001) - this is only
|
|
141
|
+
// where Release stages its own version/changelog files.
|
|
142
|
+
artifactsDirectory: 'dist',
|
|
143
|
+
tasks: [this.buildWorkflow.task],
|
|
144
|
+
versionFile: 'package.json',
|
|
145
|
+
releasableCommits: projen_1.ReleasableCommits.featuresAndFixes(),
|
|
146
|
+
releaseTrigger: projen_1.release.ReleaseTrigger.continuous(),
|
|
147
|
+
bumpPackage: `commit-and-tag-version@${COMMIT_AND_TAG_VERSION}`,
|
|
148
|
+
releaseWorkflowSetupSteps: [
|
|
149
|
+
{ name: 'Install dependencies', run: 'npm ci' },
|
|
150
|
+
],
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.GitHubActionProject = GitHubActionProject;
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbi1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvZ2l0aHViLWFjdGlvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FRZ0I7QUFDaEIsbUVBQThEO0FBQzlELHVFQUF3RjtBQUN4RixtRUFBOEQ7QUFDOUQsK0VBQTBFO0FBQzFFLG1EQUErRDtBQUMvRCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLCtGQUF5RjtBQUV6RiwyRUFBMkU7QUFDM0UseUVBQXlFO0FBQ3pFLCtEQUErRDtBQUMvRCx5RUFBeUU7QUFDekUsb0VBQW9FO0FBQ3BFLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFXLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUzRSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDRDQUE0QztBQUM1QyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQUN4QyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFDakMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFpRG5DLFNBQVMscUJBQXFCLENBQUMsT0FBbUM7SUFDaEUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJOztFQUV4QixPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7Ozs7O2tCQUtULE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Q0FlN0IsQ0FBQztBQUNGLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLGVBQU0sQ0FBQyxhQUFhOztJQUMzQyxhQUFhLENBQXNCO0lBQ25DLGVBQWUsQ0FBd0I7SUFDdkMsYUFBYSxDQUFzQjtJQUNuQyxPQUFPLENBQWtCO0lBRXpDLFlBQVksT0FBbUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FDYixzRUFBc0UsQ0FDdkUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7U0FDdkUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxDQUNoRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUEsK0NBQTRCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUU7WUFDakMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksb0NBQXdCO1NBQ25FLENBQUMsQ0FBQztRQUNILElBQUksOERBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSwrQ0FBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxJQUFJLGdCQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUs7WUFDOUIsY0FBYyxFQUFFLFNBQVM7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxnRUFBZ0U7UUFDaEUsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSxJQUFJLG1CQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFdkUsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDakMsR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsZUFBZSxFQUFFO29CQUNmLFFBQVEsRUFBRSxjQUFjO29CQUN4Qix1QkFBdUIsRUFBRSxvQkFBb0I7b0JBQzdDLHdCQUF3QixFQUFFLHNCQUFzQjtvQkFDaEQsU0FBUyxFQUFFLGVBQWU7b0JBQzFCLFlBQVksRUFBRSxrQkFBa0I7aUJBQ2pDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM5QixHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTthQUN2QztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSwyQ0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksK0NBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksMkNBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ2pELFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1lBQzFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0I7U0FDbkQsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELGtFQUFrRTtRQUNsRSxrRUFBa0U7UUFDbEUscUVBQXFFO1FBQ3JFLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZ0JBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsbUVBQW1FO1lBQ25FLHdEQUF3RDtZQUN4RCxrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFdBQVcsRUFBRSxjQUFjO1lBQzNCLGlCQUFpQixFQUFFLDBCQUFpQixDQUFDLGdCQUFnQixFQUFFO1lBQ3ZELGNBQWMsRUFBRSxnQkFBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsV0FBVyxFQUFFLDBCQUEwQixzQkFBc0IsRUFBRTtZQUMvRCx5QkFBeUIsRUFBRTtnQkFDekIsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTthQUNoRDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdEdILGtEQXVHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEpzb25GaWxlLFxuICBMaWNlbnNlLFxuICBSZWxlYXNhYmxlQ29tbWl0cyxcbiAgWWFtbEZpbGUsXG4gIGdpdGh1YixcbiAgcmVsZWFzZSxcbiAgdHlwZXNjcmlwdCxcbn0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEFjdGlvbkJ1aWxkV29ya2Zsb3cgfSBmcm9tICcuL2FjdGlvbi1idWlsZC13b3JrZmxvdyc7XG5pbXBvcnQgeyBBY3Rpb25Eb2dmb29kT3B0aW9ucywgQWN0aW9uRG9nZm9vZFdvcmtmbG93IH0gZnJvbSAnLi9hY3Rpb24tZG9nZm9vZC13b3JrZmxvdyc7XG5pbXBvcnQgeyBBY3Rpb25Tb25hcldvcmtmbG93IH0gZnJvbSAnLi9hY3Rpb24tc29uYXItd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uc0FsbG93bGlzdEd1YXJkIH0gZnJvbSAnLi4vY29tbW9uL2FjdGlvbnMtYWxsb3dsaXN0LWd1YXJkJztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyB9IGZyb20gJy4uL2NvbW1vbi9pbnRlcm5hbC1hY3Rpb25zJztcbmltcG9ydCB7IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW4tZHJpZnQtY2hlY2std29ya2Zsb3cnO1xuaW1wb3J0IHsgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1jaGFuZ2Utbm90aWNlLXdvcmtmbG93JztcblxuLy8gYHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKWAvYHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpYCByZXNvbHZlXG4vLyB2aWEgTm9kZSdzIG5vcm1hbCBtb2R1bGUgcmVzb2x1dGlvbiwgc28gaW4gYSAqcHVibGlzaGVkKiBwYWNrYWdlIHRoZXNlXG4vLyByZWFkIHRoZSB2ZXJzaW9ucyBhY3R1YWxseSBpbnN0YWxsZWQgaW4gdGhlIGNvbnN1bWluZyByZXBvJ3Ncbi8vIG5vZGVfbW9kdWxlcyAtIGV4YWN0bHkgdGhlIFwiUFJPSkVOX1ZFUlNJT04gb2YgdGhlIHN5bnRoXCIgLyBcInZlcnNpb24gb2Zcbi8vIHRoaXMgcGFja2FnZSB0aGF0IHNjYWZmb2xkZWQgdGhlIHJlcG9cIiB0aGUgcHJpdmF0ZSBwYWNrYWdlLmpzb24nc1xuLy8gZGV2RGVwZW5kZW5jaWVzIG5lZWQgdG8gcGluIChzZWUgRjAxMCBDSS1kZXBlbmRlbmNpZXMgc2VjdGlvbikuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9UWVBFU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vLyBFeGFjdCBwaW5zLCByZWNvcmRlZCBhcyBjb21wb25lbnQgY29uc3RhbnRzIChBRC0wMDE6IG5vIGxhdGVzdC9tb3Zpbmdcbi8vIHRhZy9zZW12ZXIgcmFuZ2UgaW4gYW55dGhpbmcgYSBnZW5lcmF0ZWQgcmVwbyBkZXBlbmRzIG9uKS4gVXBncmFkaW5nIGFueVxuLy8gb2YgdGhlc2UgaXMgYSByZXZpZXdlZCBkaWZmIG9mIHRoaXMgZmlsZS5cbmNvbnN0IENPTU1JVF9BTkRfVEFHX1ZFUlNJT04gPSAnMTMuMi4xJztcbmNvbnN0IFRTX05PREVfVkVSU0lPTiA9ICcxMC45LjInO1xuY29uc3QgVFlQRVNDUklQVF9WRVJTSU9OID0gJzYuMC4zJztcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzIGdpdGh1Yi5HaXRIdWJQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgYWN0aW9uLiBVc2VkIGluIHRoZSBkZWZhdWx0IFJFQURNRVxuICAgKiB0ZW1wbGF0ZSBhbmQgcmVjb3JkZWQgaW4gdGhlIHByaXZhdGUgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2l0SHViIEFjdGlvbnMgc2VjcmV0IGhvbGRpbmcgdGhlIFBBVCB1c2VkIGZvclxuICAgKiBwcm9qZW4tYXV0b21hdGlvbiBQUiBjb21tZW50cyAoRjAwMy9GMDA5KSBhbmQsIHdoZW4gdGhlIGFjdGlvbiBoYXMgYVxuICAgKiBgdG9rZW5gIGlucHV0LCB0aGUgZG9nZm9vZCdzIGludm9jYXRpb24gb2YgaXQuXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqL1xuICByZWFkb25seSBnaGVUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBvcmcncyBzZWxmLWhvc3RlZCBTb25hclF1YmUgaW5zdGFuY2UuIE1VU1QgYmUgcmVhY2hhYmxlIGZyb21cbiAgICogZ2l0aHViLmNvbS1ob3N0ZWQgKHB1YmxpYykgcnVubmVycyAoQUQtMDAxKS4gUmVxdWlyZWQsIG5vIGRlZmF1bHQ6IGFcbiAgICogZ3Vlc3NlZCBzZXJ2ZXIgaXMgd29yc2UgdGhhbiBhIGxvdWQgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvbmFySG9zdFVybDogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIlNPTkFSX1RPS0VOXCIgKi9cbiAgcmVhZG9ubHkgc29uYXJUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBgc29uYXIueW1sYCBhbHNvIHJ1bnMgb24gYHB1bGxfcmVxdWVzdGAgYXMgYSBwYXNzL2ZhaWwgZ2F0ZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc29uYXJQdWxsUmVxdWVzdEdhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9nZm9vZCBzY2VuYXJpbyAoQUQtMDAxKS4gV2hhdCBmaXh0dXJlIHN0YXRlLCB3aGF0IHRvIGFzc2VydCwgYW5kXG4gICAqIGhvdyB0byBjbGVhbiB1cCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBhY3Rpb24ncyBvd24gRiMjIyBzcGVjIC0gdGhlXG4gICAqIGhpZ2hlc3QtcmlzayBiZWhhdmlvciBvZiB0aGF0IGFjdGlvbi4gUmVxdWlyZWQ6IGEgZGVmYXVsdCBuby1vcFxuICAgKiBkb2dmb29kIHdvdWxkIHNpbGVudGx5IGhvbGxvdyBvdXQgYSBsb2FkLWJlYXJpbmcgQUQtMDAxIHdvcmtmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgZG9nZm9vZDogQWN0aW9uRG9nZm9vZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNQRFggaWRlbnRpZmllciBmb3IgdGhlIGdlbmVyYXRlZCBgTElDRU5TRWAuXG4gICAqIEBkZWZhdWx0IFwiTUlUXCJcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2U/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyAke29wdGlvbnMubmFtZX1cblxuJHtvcHRpb25zLmRlc2NyaXB0aW9uID8/ICcnfVxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGB5YW1sXG4tIHVzZXM6IHhwZXJ0c3MvJHtvcHRpb25zLm5hbWV9QDxyZWY+XG5cXGBcXGBcXGBcblxuIyMgQnVtcGluZ1xuXG5BIFxcYGZlYXQ6XFxgL1xcYGZpeDpcXGAgY29tbWl0IHB1c2hlZCB0byBcXGBtYWluXFxgIGlzIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHk6IGJ1bXAsXG50YWcgXFxgdlguWS5aXFxgLCBHaXRIdWIgUmVsZWFzZS4gU2VlIFxcYC5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sXFxgLlxuXG4jIyBUcnVzdCBjb250cmFjdFxuXG5UaGlzIGlzIGEgY29tcG9zaXRlIChzaGVsbCkgYWN0aW9uIC0gbm8gTm9kZS9ucG0gYXQgcnVudGltZSwgbm8gRG9ja2VyLiBJdHNcbkNJIGxpbnQgZ2F0ZSAoXFxgYnVpbGQueW1sXFxgKSwgZG9nZm9vZCB0ZXN0IChcXGB0ZXN0LWRvZ2Zvb2QueW1sXFxgKSwgYW5kIFNvbmFyXG5zY2FuIChcXGBzb25hci55bWxcXGApIGFyZSBzY2FmZm9sZGVkIGJ5IFxcYEB4cGVydHNzL3Byb2plbi10eXBlc1xcYCdcblxcYEdpdEh1YkFjdGlvblByb2plY3RcXGA7IG9ubHkgXFxgYWN0aW9uLnltbFxcYCBhbmQgaXRzIHNoZWxsIHNjcmlwdHMgYXJlXG5oYW5kLWNvbW1pdHRlZC5cbmA7XG59XG5cbi8qKlxuICogU2NhZmZvbGRzIHRoZSByZXBvIGxpZmVjeWNsZSAoQUQtMDAxKSBhcm91bmQgYSBoYW5kLWNvbW1pdHRlZCwgY29tcG9zaXRlXG4gKiAoc2hlbGwpIEdpdEh1YiBBY3Rpb246IHRoZSBgYnVpbGRgL2B0ZXN0LWRvZ2Zvb2RgL2Bzb25hcmAvYHJlbGVhc2VgXG4gKiB3b3JrZmxvd3MsIHZlcnNpb25pbmcgYW5kIHJlbGVhc2UgZGlzY2lwbGluZSwgdGhlIEYwMDMgdmVyaWZ5IGNvbXBvbmVudHMsXG4gKiB0aGUgRjAwOSBhbGxvd2xpc3QgZ3VhcmQsIGFuZCByZXBvIGJvaWxlcnBsYXRlIChgdHNjb25maWcuanNvbmAgZm9yXG4gKiBgLnByb2plbnJjLnRzYCwgYSBwcml2YXRlIHZlcnNpb24tc291cmNlIGBwYWNrYWdlLmpzb25gLCBgLnlhbWxsaW50YCxcbiAqIGBMSUNFTlNFYCwgYW5kIGEgYFJFQURNRS5tZGAgdGVtcGxhdGUpLiBUaGUgYWN0aW9uJ3Mgb3duIGNvbnRlbnRcbiAqIChgYWN0aW9uLnltbGAsIGl0cyBzaGVsbCBzY3JpcHRzLCBgdGVzdC9gIGZpeHR1cmVzKSBpcyBhdXRob3JlZCBieSBoYW5kXG4gKiBwZXIgdGhlIGFjdGlvbidzIG93biBGIyMjIHNwZWMgLSB0aGlzIHR5cGUgb25seSBsaW50cyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YkFjdGlvblByb2plY3QgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBidWlsZFdvcmtmbG93OiBBY3Rpb25CdWlsZFdvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgZG9nZm9vZFdvcmtmbG93OiBBY3Rpb25Eb2dmb29kV29ya2Zsb3c7XG4gIHB1YmxpYyByZWFkb25seSBzb25hcldvcmtmbG93OiBBY3Rpb25Tb25hcldvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZTogcmVsZWFzZS5SZWxlYXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEh1YkFjdGlvblByb2plY3RPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnNvbmFySG9zdFVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWJBY3Rpb25Qcm9qZWN0IHJlcXVpcmVzIHNvbmFySG9zdFVybCcpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZG9nZm9vZD8uc2NlbmFyaW8gfHwgb3B0aW9ucy5kb2dmb29kLnNjZW5hcmlvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBkb2dmb29kLnNjZW5hcmlvIHdpdGggYXQgbGVhc3Qgb25lIHN0ZXAnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmRvZ2Zvb2QuY2xlYW51cCB8fCBvcHRpb25zLmRvZ2Zvb2QuY2xlYW51cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBkb2dmb29kLmNsZWFudXAnKTtcbiAgICB9XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZSA/PyB7IGNvbnRlbnRzOiBkZWZhdWx0UmVhZG1lQ29udGVudHMob3B0aW9ucykgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGdoID0gdGhpcy5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzKGdoKTtcblxuICAgIG5ldyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3codGhpcywge1xuICAgICAgZ2hlVG9rZW5TZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgIH0pO1xuICAgIG5ldyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93KHRoaXMpO1xuICAgIG5ldyBBY3Rpb25zQWxsb3dsaXN0R3VhcmQodGhpcyk7XG5cbiAgICBuZXcgTGljZW5zZSh0aGlzLCB7XG4gICAgICBzcGR4OiBvcHRpb25zLmxpY2Vuc2UgPz8gJ01JVCcsXG4gICAgICBjb3B5cmlnaHRPd25lcjogJ3hwZXJ0c3MnLFxuICAgIH0pO1xuXG4gICAgLy8gV2lyZXMgdGhlIGRlZmF1bHQgdGFzayB0byBydW4gYC5wcm9qZW5yYy50c2AgdmlhIHRzLW5vZGUgLSBhIGJhcmVcbiAgICAvLyBHaXRIdWJQcm9qZWN0IGhhcyBubyBkZWZhdWx0IHRhc2sgdGhhdCBkb2VzIHRoaXMgb24gaXRzIG93bi4gUnVuc1xuICAgIC8vIGBucHggLXkgLXAgdHMtbm9kZSAtYyAuLi5gIHVuZGVyIHRoZSBob29kOyBwaW5uaW5nIGB0cy1ub2RlYC9cbiAgICAvLyBgdHlwZXNjcmlwdGAgYmVsb3cgYXMgZXhhY3QgZGV2RGVwcyBtZWFucyB0aGF0LCBhZnRlciBgbnBtIGNpYCwgdGhpc1xuICAgIC8vIHJlc29sdmVzIGZyb20gdGhlIGNvbW1pdHRlZCBsb2NhbCBpbnN0YWxsIGluc3RlYWQgb2YgdGhlIHJlZ2lzdHJ5LlxuICAgIG5ldyB0eXBlc2NyaXB0LlByb2plbnJjVHModGhpcywgeyB0c2NvbmZpZ0ZpbGVOYW1lOiAndHNjb25maWcuanNvbicgfSk7XG5cbiAgICBuZXcgSnNvbkZpbGUodGhpcywgJ3BhY2thZ2UuanNvbicsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgICAgIHByaXZhdGU6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICAncHJvamVuJzogUFJPSkVOX1ZFUlNJT04sXG4gICAgICAgICAgJ0B4cGVydHNzL3Byb2plbi10eXBlcyc6IFBST0pFTl9UWVBFU19WRVJTSU9OLFxuICAgICAgICAgICdjb21taXQtYW5kLXRhZy12ZXJzaW9uJzogQ09NTUlUX0FORF9UQUdfVkVSU0lPTixcbiAgICAgICAgICAndHMtbm9kZSc6IFRTX05PREVfVkVSU0lPTixcbiAgICAgICAgICAndHlwZXNjcmlwdCc6IFRZUEVTQ1JJUFRfVkVSU0lPTixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy55YW1sbGludCcsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiAnZGVmYXVsdCcsXG4gICAgICAgIHJ1bGVzOiB7ICdsaW5lLWxlbmd0aCc6IHsgbWF4OiAxMjAgfSB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdyA9IG5ldyBBY3Rpb25CdWlsZFdvcmtmbG93KHRoaXMpO1xuXG4gICAgdGhpcy5kb2dmb29kV29ya2Zsb3cgPSBuZXcgQWN0aW9uRG9nZm9vZFdvcmtmbG93KHRoaXMsIG9wdGlvbnMuZG9nZm9vZCk7XG5cbiAgICB0aGlzLnNvbmFyV29ya2Zsb3cgPSBuZXcgQWN0aW9uU29uYXJXb3JrZmxvdyh0aGlzLCB7XG4gICAgICBzb25hckhvc3RVcmw6IG9wdGlvbnMuc29uYXJIb3N0VXJsLFxuICAgICAgc29uYXJUb2tlblNlY3JldDogb3B0aW9ucy5zb25hclRva2VuU2VjcmV0LFxuICAgICAgc29uYXJQdWxsUmVxdWVzdEdhdGU6IG9wdGlvbnMuc29uYXJQdWxsUmVxdWVzdEdhdGUsXG4gICAgfSk7XG5cbiAgICAvLyBgZ2l0aHViUmVsZWFzZWAgZGVmYXVsdHMgdG8gdHJ1ZSwgd2hpY2ggYXV0by13aXJlc1xuICAgIC8vIGBwdWJsaXNoVG9HaXRIdWJSZWxlYXNlc2AgLSBpdHMgYGdoIHJlbGVhc2UgY3JlYXRlIC4uLiAtLXRhcmdldFxuICAgIC8vICRHSVRIVUJfU0hBYCBjcmVhdGVzIHRoZSB0YWcgKmFuZCogdGhlIHJlbGVhc2UgdG9nZXRoZXIgZm9yIG91clxuICAgIC8vIGNvbnRpbnVvdXMgKHB1c2gtdG8tbWFpbikgdHJpZ2dlci4gTm8gc2VwYXJhdGUgYHB1Ymxpc2hUb0dpdGAgY2FsbFxuICAgIC8vIG5lZWRlZCAodGhhdCBwYXRoIG9ubHkgZmlyZXMgZm9yIGEgbWFudWFsIHJlbGVhc2UgdHJpZ2dlcikuXG4gICAgdGhpcy5yZWxlYXNlID0gbmV3IHJlbGVhc2UuUmVsZWFzZSh0aGlzLCB7XG4gICAgICBicmFuY2g6ICdtYWluJyxcbiAgICAgIC8vIE5vIGJ1aWxkIGFydGlmYWN0IGZvciBhIGNvbXBvc2l0ZSBhY3Rpb24gKEFELTAwMSkgLSB0aGlzIGlzIG9ubHlcbiAgICAgIC8vIHdoZXJlIFJlbGVhc2Ugc3RhZ2VzIGl0cyBvd24gdmVyc2lvbi9jaGFuZ2Vsb2cgZmlsZXMuXG4gICAgICBhcnRpZmFjdHNEaXJlY3Rvcnk6ICdkaXN0JyxcbiAgICAgIHRhc2tzOiBbdGhpcy5idWlsZFdvcmtmbG93LnRhc2tdLFxuICAgICAgdmVyc2lvbkZpbGU6ICdwYWNrYWdlLmpzb24nLFxuICAgICAgcmVsZWFzYWJsZUNvbW1pdHM6IFJlbGVhc2FibGVDb21taXRzLmZlYXR1cmVzQW5kRml4ZXMoKSxcbiAgICAgIHJlbGVhc2VUcmlnZ2VyOiByZWxlYXNlLlJlbGVhc2VUcmlnZ2VyLmNvbnRpbnVvdXMoKSxcbiAgICAgIGJ1bXBQYWNrYWdlOiBgY29tbWl0LWFuZC10YWctdmVyc2lvbkAke0NPTU1JVF9BTkRfVEFHX1ZFUlNJT059YCxcbiAgICAgIHJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHM6IFtcbiAgICAgICAgeyBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLCBydW46ICducG0gY2knIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -8,7 +8,7 @@ const projen_1 = require("projen");
|
|
|
8
8
|
* layered on top of `CdkTypescriptProject`'s pure-infra scaffold.
|
|
9
9
|
*/
|
|
10
10
|
class AppRuntimeScaffold extends projen_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.2" };
|
|
12
12
|
constructor(project, appEntryPoint = 'src/app.ts') {
|
|
13
13
|
super(project, 'AppRuntimeScaffold');
|
|
14
14
|
const app = new projen_1.SourceCode(project, appEntryPoint);
|
|
@@ -6,14 +6,13 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const app_runtime_scaffold_1 = require("./app-runtime-scaffold");
|
|
7
7
|
const cdk_infra_project_1 = require("./cdk-infra-project");
|
|
8
8
|
const database_component_1 = require("./database-component");
|
|
9
|
-
const drift_check_1 = require("../common/drift-check");
|
|
10
9
|
/**
|
|
11
10
|
* Full TypeScript service application running behind API Gateway (or
|
|
12
11
|
* similar), with the infra to support it - `CdkInfraProject` plus
|
|
13
12
|
* application source, a database, and an app-level build/test workflow.
|
|
14
13
|
*/
|
|
15
14
|
class CdkAppProject extends cdk_infra_project_1.CdkInfraProject {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.2" };
|
|
17
16
|
constructor(options) {
|
|
18
17
|
super(options);
|
|
19
18
|
new app_runtime_scaffold_1.AppRuntimeScaffold(this, options.appEntryPoint ?? 'src/app.ts');
|
|
@@ -26,10 +25,9 @@ class CdkAppProject extends cdk_infra_project_1.CdkInfraProject {
|
|
|
26
25
|
task: this.testTask,
|
|
27
26
|
triggers: { pullRequest: {}, workflowDispatch: {} },
|
|
28
27
|
permissions: { contents: projen_1.github.workflows.JobPermission.READ },
|
|
29
|
-
postBuildSteps: (0, drift_check_1.driftCheckSteps)(),
|
|
30
28
|
});
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
}
|
|
34
32
|
exports.CdkAppProject = CdkAppProject;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFwcC1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9jZGstYXBwLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFnQztBQUNoQyxpRUFBNEQ7QUFDNUQsMkRBQXNEO0FBQ3RELDZEQUF5RDtBQUd6RDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsbUNBQWU7O0lBQ2hELFlBQVksT0FBNkI7UUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSx5Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLHNDQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsSUFBSSxlQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEtBQUssRUFBRSxXQUFXO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFO2dCQUNuRCxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO2FBQy9ELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWpCSCxzQ0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXBwUnVudGltZVNjYWZmb2xkIH0gZnJvbSAnLi9hcHAtcnVudGltZS1zY2FmZm9sZCc7XG5pbXBvcnQgeyBDZGtJbmZyYVByb2plY3QgfSBmcm9tICcuL2Nkay1pbmZyYS1wcm9qZWN0JztcbmltcG9ydCB7IERhdGFiYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2RrQXBwUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG4vKipcbiAqIEZ1bGwgVHlwZVNjcmlwdCBzZXJ2aWNlIGFwcGxpY2F0aW9uIHJ1bm5pbmcgYmVoaW5kIEFQSSBHYXRld2F5IChvclxuICogc2ltaWxhciksIHdpdGggdGhlIGluZnJhIHRvIHN1cHBvcnQgaXQgLSBgQ2RrSW5mcmFQcm9qZWN0YCBwbHVzXG4gKiBhcHBsaWNhdGlvbiBzb3VyY2UsIGEgZGF0YWJhc2UsIGFuZCBhbiBhcHAtbGV2ZWwgYnVpbGQvdGVzdCB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0FwcFByb2plY3QgZXh0ZW5kcyBDZGtJbmZyYVByb2plY3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtBcHBQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgbmV3IEFwcFJ1bnRpbWVTY2FmZm9sZCh0aGlzLCBvcHRpb25zLmFwcEVudHJ5UG9pbnQgPz8gJ3NyYy9hcHAudHMnKTtcbiAgICBuZXcgRGF0YWJhc2VDb21wb25lbnQodGhpcywgb3B0aW9ucy5kYXRhYmFzZSk7XG5cbiAgICBjb25zdCBnaCA9IHRoaXMuZ2l0aHViO1xuICAgIGlmIChnaCkge1xuICAgICAgbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3coZ2gsIHtcbiAgICAgICAgbmFtZTogJ2FwcC1idWlsZCcsXG4gICAgICAgIGpvYklkOiAnYXBwLWJ1aWxkJyxcbiAgICAgICAgdGFzazogdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdHJpZ2dlcnM6IHsgcHVsbFJlcXVlc3Q6IHt9LCB3b3JrZmxvd0Rpc3BhdGNoOiB7fSB9LFxuICAgICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -11,7 +11,7 @@ const edge_networking_constructs_1 = require("./components/edge-networking-const
|
|
|
11
11
|
* externally-built images). Reference example: SimulcastAVDelivery.
|
|
12
12
|
*/
|
|
13
13
|
class CdkInfraProject extends cdk_typescript_base_1.CdkTypescriptProject {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.2" };
|
|
15
15
|
constructor(options) {
|
|
16
16
|
super(options);
|
|
17
17
|
if (options.ecrEcs?.enabled) {
|
|
@@ -3,8 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CdkTypescriptProject = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
|
+
const actions_allowlist_guard_1 = require("../common/actions-allowlist-guard");
|
|
6
7
|
const constants_1 = require("../common/constants");
|
|
8
|
+
const internal_actions_1 = require("../common/internal-actions");
|
|
7
9
|
const manual_deploy_workflow_1 = require("../common/manual-deploy-workflow");
|
|
10
|
+
const projen_drift_check_workflow_1 = require("../common/projen-drift-check-workflow");
|
|
11
|
+
const workflow_change_notice_workflow_1 = require("../common/workflow-change-notice-workflow");
|
|
8
12
|
/**
|
|
9
13
|
* Shared CDK + TypeScript foundation for `CdkInfraProject` and
|
|
10
14
|
* `CdkAppProject`: standard app structure (via `AwsCdkTypeScriptApp`,
|
|
@@ -13,7 +17,7 @@ const manual_deploy_workflow_1 = require("../common/manual-deploy-workflow");
|
|
|
13
17
|
* `ManualDeployWorkflow` when `environments` is provided.
|
|
14
18
|
*/
|
|
15
19
|
class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.2" };
|
|
17
21
|
constructor(options) {
|
|
18
22
|
super({
|
|
19
23
|
name: options.name,
|
|
@@ -27,10 +31,19 @@ class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
|
27
31
|
}),
|
|
28
32
|
});
|
|
29
33
|
this.addDevDeps('esbuild');
|
|
34
|
+
const gh = this.github;
|
|
35
|
+
if (!gh) {
|
|
36
|
+
throw new Error('CdkTypescriptProject requires GitHub integration to be enabled');
|
|
37
|
+
}
|
|
38
|
+
(0, internal_actions_1.applyInternalActionOverrides)(gh);
|
|
39
|
+
new projen_drift_check_workflow_1.ProjenDriftCheckWorkflow(this, {
|
|
40
|
+
gheTokenSecret: options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET,
|
|
41
|
+
});
|
|
42
|
+
new workflow_change_notice_workflow_1.WorkflowChangeNoticeWorkflow(this);
|
|
43
|
+
new actions_allowlist_guard_1.ActionsAllowlistGuard(this);
|
|
30
44
|
if (options.environments && options.environments.length > 0) {
|
|
31
45
|
new manual_deploy_workflow_1.ManualDeployWorkflow(this, {
|
|
32
46
|
environments: options.environments,
|
|
33
|
-
slackWebhookSecret: options.slackWebhookSecret,
|
|
34
47
|
deploySteps: (env) => [
|
|
35
48
|
{
|
|
36
49
|
name: 'Install',
|
|
@@ -50,4 +63,4 @@ class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
|
50
63
|
}
|
|
51
64
|
}
|
|
52
65
|
exports.CdkTypescriptProject = CdkTypescriptProject;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXR5cGVzY3JpcHQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGsvY2RrLXR5cGVzY3JpcHQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQXdDO0FBRXhDLCtFQUEwRTtBQUMxRSxtREFBK0Q7QUFFL0QsaUVBQTBFO0FBQzFFLDZFQUF3RTtBQUN4RSx1RkFBaUY7QUFDakYsK0ZBQXlGO0FBTXpGOzs7Ozs7R0FNRztBQUNILE1BQWEsb0JBQXFCLFNBQVEsZUFBTSxDQUFDLG1CQUFtQjs7SUFDbEUsWUFBWSxPQUFvQztRQUM5QyxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUztZQUMzQyxvQkFBb0IsRUFBRSxNQUFNO1lBQzVCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLHNFQUFzRTtZQUN0RSxvQkFBb0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7WUFDN0MsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDO2dCQUNsRSxNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxvQ0FBd0I7YUFDM0QsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLGdFQUFnRSxDQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUEsK0NBQTRCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUU7WUFDakMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksb0NBQXdCO1NBQ25FLENBQUMsQ0FBQztRQUNILElBQUksOERBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSwrQ0FBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSw2Q0FBb0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDcEI7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsR0FBRyxFQUFFLFFBQVE7cUJBQ2Q7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRzt3QkFDaEMsR0FBRyxFQUFFLHVFQUF1RSxHQUFHLENBQUMsSUFBSSxFQUFFO3dCQUN0RixHQUFHLEVBQUU7NEJBQ0gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2hFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUMxRDtxQkFDRjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWpESCxvREFrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDb21tb25DZGtPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IEFjdGlvbnNBbGxvd2xpc3RHdWFyZCB9IGZyb20gJy4uL2NvbW1vbi9hY3Rpb25zLWFsbG93bGlzdC1ndWFyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbW1vbi9lbnZpcm9ubWVudC1vcHRpb25zJztcbmltcG9ydCB7IGFwcGx5SW50ZXJuYWxBY3Rpb25PdmVycmlkZXMgfSBmcm9tICcuLi9jb21tb24vaW50ZXJuYWwtYWN0aW9ucyc7XG5pbXBvcnQgeyBNYW51YWxEZXBsb3lXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi9tYW51YWwtZGVwbG95LXdvcmtmbG93JztcbmltcG9ydCB7IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW4tZHJpZnQtY2hlY2std29ya2Zsb3cnO1xuaW1wb3J0IHsgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1jaGFuZ2Utbm90aWNlLXdvcmtmbG93JztcblxuZXhwb3J0IGludGVyZmFjZSBDZGtUeXBlc2NyaXB0UHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBDb21tb25DZGtPcHRpb25zIHtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRzPzogKHN0cmluZyB8IEVudmlyb25tZW50T3B0aW9ucylbXTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgQ0RLICsgVHlwZVNjcmlwdCBmb3VuZGF0aW9uIGZvciBgQ2RrSW5mcmFQcm9qZWN0YCBhbmRcbiAqIGBDZGtBcHBQcm9qZWN0YDogc3RhbmRhcmQgYXBwIHN0cnVjdHVyZSAodmlhIGBBd3NDZGtUeXBlU2NyaXB0QXBwYCxcbiAqIGBjZGsuanNvbmAsIGBjZGsgc3ludGhgL2BjZGsgZGlmZmAgdGFza3MpLCBhIFBSLWNoZWNrIGJ1aWxkIHRoYXQgaGFyZC1mYWlsc1xuICogb24gcHJvamVuIGRyaWZ0IChyYXRoZXIgdGhhbiBzZWxmLW11dGF0aW5nKSwgYW5kIGFuIG9wdGlvbmFsXG4gKiBgTWFudWFsRGVwbG95V29ya2Zsb3dgIHdoZW4gYGVudmlyb25tZW50c2AgaXMgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtUeXBlc2NyaXB0UHJvamVjdCBleHRlbmRzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2RrVHlwZXNjcmlwdFByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgY2RrVmVyc2lvbjogb3B0aW9ucy5jZGtWZXJzaW9uID8/ICcyLjE4OS4xJyxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgICBzYW1wbGVDb2RlOiB0cnVlLFxuICAgICAgLy8gRmFpbCBQUiBjaGVja3Mgb24gZHJpZnQgaW5zdGVhZCBvZiBhdXRvLWNvbW1pdHRpbmcgcHJvamVuJ3Mgb3V0cHV0LlxuICAgICAgYnVpbGRXb3JrZmxvd09wdGlvbnM6IHsgbXV0YWJsZUJ1aWxkOiBmYWxzZSB9LFxuICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgIHNlY3JldDogb3B0aW9ucy5naGVUb2tlblNlY3JldCA/PyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkRGV2RGVwcygnZXNidWlsZCcpO1xuXG4gICAgY29uc3QgZ2ggPSB0aGlzLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDZGtUeXBlc2NyaXB0UHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzKGdoKTtcblxuICAgIG5ldyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3codGhpcywge1xuICAgICAgZ2hlVG9rZW5TZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgIH0pO1xuICAgIG5ldyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93KHRoaXMpO1xuICAgIG5ldyBBY3Rpb25zQWxsb3dsaXN0R3VhcmQodGhpcyk7XG5cbiAgICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudHMgJiYgb3B0aW9ucy5lbnZpcm9ubWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgbmV3IE1hbnVhbERlcGxveVdvcmtmbG93KHRoaXMsIHtcbiAgICAgICAgZW52aXJvbm1lbnRzOiBvcHRpb25zLmVudmlyb25tZW50cyxcbiAgICAgICAgZGVwbG95U3RlcHM6IChlbnYpID0+IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSW5zdGFsbCcsXG4gICAgICAgICAgICBydW46ICducG0gY2knLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogYGNkayBkZXBsb3kgKCR7ZW52Lm5hbWV9KWAsXG4gICAgICAgICAgICBydW46IGBucHggY2RrIGRlcGxveSAtLWFsbCAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgLS1jb250ZXh0IGVudmlyb25tZW50PSR7ZW52Lm5hbWV9YCxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICAuLi4oZW52LmFjY291bnRJZCA/IHsgQ0RLX0RFRkFVTFRfQUNDT1VOVDogZW52LmFjY291bnRJZCB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4oZW52LnJlZ2lvbiA/IHsgQ0RLX0RFRkFVTFRfUkVHSU9OOiBlbnYucmVnaW9uIH0gOiB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
|
|
|
10
10
|
* built from this project's own source (app projects).
|
|
11
11
|
*/
|
|
12
12
|
class EcrEcsConstructs extends projen_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.2" };
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project, 'EcrEcsConstructs');
|
|
16
16
|
const externalImageSource = options.externalImageSource ?? true;
|
|
@@ -42,7 +42,7 @@ const HELPERS = {
|
|
|
42
42
|
* to whichever `edgeResources` the consuming project type opts into.
|
|
43
43
|
*/
|
|
44
44
|
class EdgeNetworkingConstructs extends projen_1.Component {
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.2" };
|
|
46
46
|
constructor(project, resources) {
|
|
47
47
|
super(project, 'EdgeNetworkingConstructs');
|
|
48
48
|
if (resources.length === 0) {
|
|
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
|
|
|
10
10
|
* the consuming team to wire up; no opinionated default is imposed.
|
|
11
11
|
*/
|
|
12
12
|
class DatabaseComponent extends projen_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.2" };
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project, 'DatabaseComponent');
|
|
16
16
|
const engine = options.engine ?? 'postgres';
|
package/lib/cdk/options.d.ts
CHANGED
|
@@ -17,8 +17,6 @@ export interface CommonCdkOptions {
|
|
|
17
17
|
readonly cdkVersion?: string;
|
|
18
18
|
/** @default "PROJEN_GITHUB_TOKEN" */
|
|
19
19
|
readonly gheTokenSecret?: string;
|
|
20
|
-
/** GitHub secret holding a Slack webhook URL for deploy notifications. */
|
|
21
|
-
readonly slackWebhookSecret?: string;
|
|
22
20
|
}
|
|
23
21
|
export interface CdkInfraProjectOptions extends CommonCdkOptions {
|
|
24
22
|
/** Deploy targets for the manual-dispatch deploy workflow, e.g. ["dev", "stage", "prod"]. */
|
package/lib/cdk/options.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGsvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi4vY29tbW9uL2Vudmlyb25tZW50LW9wdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBFZGdlUmVzb3VyY2UgPVxuICB8ICdjbG91ZGZyb250J1xuICB8ICdyb3V0ZTUzJ1xuICB8ICdhcGlnYXRld2F5J1xuICB8ICdjb2duaXRvJ1xuICB8ICdzcXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVjckVjc09wdGlvbnMge1xuICAvKiogQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIEVDUyBzZXJ2aWNlIHN0YW5kcyB1cCBhbiBleHRlcm5hbGx5LWJ1aWx0IGltYWdlIChpbmZyYS1vbmx5KVxuICAgKiByYXRoZXIgdGhhbiBvbmUgYnVpbHQgZnJvbSB0aGlzIHByb2plY3QncyBvd24gc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbEltYWdlU291cmNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25DZGtPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIjIuMTg5LjFcIiAqL1xuICByZWFkb25seSBjZGtWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIiAqL1xuICByZWFkb25seSBnaGVUb2tlblNlY3JldD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtJbmZyYVByb2plY3RPcHRpb25zIGV4dGVuZHMgQ29tbW9uQ2RrT3B0aW9ucyB7XG4gIC8qKiBEZXBsb3kgdGFyZ2V0cyBmb3IgdGhlIG1hbnVhbC1kaXNwYXRjaCBkZXBsb3kgd29ya2Zsb3csIGUuZy4gW1wiZGV2XCIsIFwic3RhZ2VcIiwgXCJwcm9kXCJdLiAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudHM6IChzdHJpbmcgfCBFbnZpcm9ubWVudE9wdGlvbnMpW107XG5cbiAgcmVhZG9ubHkgZWNyRWNzPzogRWNyRWNzT3B0aW9ucztcblxuICByZWFkb25seSBlZGdlUmVzb3VyY2VzPzogRWRnZVJlc291cmNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VPcHRpb25zIHtcbiAgLyoqIEBkZWZhdWx0IFwicG9zdGdyZXNcIiAqL1xuICByZWFkb25seSBlbmdpbmU/OiAncG9zdGdyZXMnIHwgJ215c3FsJyB8ICdkeW5hbW9kYic7XG5cbiAgLyoqIE1pZ3JhdGlvbiB0b29sIHRvIHdpcmUgdXAsIGUuZy4gXCJmbHl3YXlcIiwgXCJsaXF1aWJhc2VcIiwgXCJwcmlzbWFcIi4gTGVmdCBwbHVnZ2FibGUgLSBubyBkZWZhdWx0LiAqL1xuICByZWFkb25seSBtaWdyYXRpb25Ub29sPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka0FwcFByb2plY3RPcHRpb25zIGV4dGVuZHMgQ2RrSW5mcmFQcm9qZWN0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogRGF0YWJhc2VPcHRpb25zO1xuXG4gIC8qKiBAZGVmYXVsdCBcInNyYy9hcHAudHNcIiAqL1xuICByZWFkb25seSBhcHBFbnRyeVBvaW50Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Component, github } from 'projen';
|
|
2
|
+
/**
|
|
3
|
+
* Blocking, tamper-proof PR check that stops a disallowed GitHub Action
|
|
4
|
+
* reference from ever (re)appearing in a repo's workflow or composite-action
|
|
5
|
+
* files.
|
|
6
|
+
*
|
|
7
|
+
* Runs on `pull_request_target` so it always executes the copy of this
|
|
8
|
+
* workflow committed on the base branch - a PR cannot edit this file to
|
|
9
|
+
* disable or weaken the check. It checks out and executes nothing from the
|
|
10
|
+
* PR; it only reads the PR head's file content via the GitHub API. Because
|
|
11
|
+
* `pull_request_target` runs with the base repo's token even for
|
|
12
|
+
* fork-originated PRs, the failure comment posts reliably.
|
|
13
|
+
*
|
|
14
|
+
* It performs a flat, unconditional scan of the PR's head ref (no
|
|
15
|
+
* base-vs-head comparison): fetch the content of every GitHub workflow and
|
|
16
|
+
* composite-action file, extract every `uses:` value, and fail if any does
|
|
17
|
+
* not start with one of the three trusted namespaces from AD-001
|
|
18
|
+
* (`actions/`, `docker/`, `xpertss/`). The single
|
|
19
|
+
* exemption is a local same-repo reference (`uses: .` or
|
|
20
|
+
* `uses: ./.github/actions/<name>`) - the repo's own hand-committed action,
|
|
21
|
+
* to which the org policy's "allow select actions" setting does not apply.
|
|
22
|
+
*/
|
|
23
|
+
export interface ActionsAllowlistGuardOptions {
|
|
24
|
+
/**
|
|
25
|
+
* GitHub secret holding a token with permission to comment on PRs, used
|
|
26
|
+
* for the failure comment. The check still fails without it, so fork PRs -
|
|
27
|
+
* which get no secrets - are only missing the extra comment.
|
|
28
|
+
* @default "PROJEN_GITHUB_TOKEN"
|
|
29
|
+
*/
|
|
30
|
+
readonly gheTokenSecret?: string;
|
|
31
|
+
/** @default "actions-allowlist-guard" */
|
|
32
|
+
readonly workflowName?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class ActionsAllowlistGuard extends Component {
|
|
35
|
+
readonly workflow: github.GithubWorkflow;
|
|
36
|
+
constructor(scope: github.GitHubProject, options?: ActionsAllowlistGuardOptions);
|
|
37
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActionsAllowlistGuard = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const projen_1 = require("projen");
|
|
6
|
+
const constants_1 = require("./constants");
|
|
7
|
+
class ActionsAllowlistGuard extends projen_1.Component {
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionsAllowlistGuard", version: "0.0.2" };
|
|
9
|
+
workflow;
|
|
10
|
+
constructor(scope, options = {}) {
|
|
11
|
+
super(scope, 'ActionsAllowlistGuard');
|
|
12
|
+
const gh = scope.github;
|
|
13
|
+
if (!gh) {
|
|
14
|
+
throw new Error('ActionsAllowlistGuard requires GitHub integration to be enabled');
|
|
15
|
+
}
|
|
16
|
+
const gheTokenSecret = options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET;
|
|
17
|
+
this.workflow = new projen_1.github.GithubWorkflow(gh, options.workflowName ?? 'actions-allowlist-guard');
|
|
18
|
+
this.workflow.on({ pullRequestTarget: {} });
|
|
19
|
+
this.workflow.addJob('check', {
|
|
20
|
+
runsOn: ['ubuntu-latest'],
|
|
21
|
+
permissions: {
|
|
22
|
+
contents: projen_1.github.workflows.JobPermission.READ,
|
|
23
|
+
pullRequests: projen_1.github.workflows.JobPermission.WRITE,
|
|
24
|
+
},
|
|
25
|
+
env: { GH_TOKEN: `\${{ secrets.${gheTokenSecret} }}` },
|
|
26
|
+
steps: [
|
|
27
|
+
{
|
|
28
|
+
name: 'Enforce action allow-list',
|
|
29
|
+
run: `set -uo pipefail
|
|
30
|
+
head_sha="\${{ github.event.pull_request.head.sha }}"
|
|
31
|
+
pr_number="\${{ github.event.number }}"
|
|
32
|
+
repo="\${GITHUB_REPOSITORY}"
|
|
33
|
+
# All files at the PR head (recursive tree), narrowed to workflow and
|
|
34
|
+
# composite-action files.
|
|
35
|
+
files="$(gh api "repos/$repo/git/trees/$head_sha?recursive=1" --jq '.tree[] | select(.type=="blob") | .path' | grep -E '^\\.github/(workflows/[^/]+\\.(yml|yaml)|actions/[^/]+/action\\.(yml|yaml))$' || true)"
|
|
36
|
+
violations=()
|
|
37
|
+
while IFS= read -r path; do
|
|
38
|
+
[ -z "$path" ] && continue
|
|
39
|
+
content="$(gh api "repos/$repo/contents/$path?ref=$head_sha" --jq -r '.content' 2>/dev/null | base64 -d 2>/dev/null || true)"
|
|
40
|
+
lineno=0
|
|
41
|
+
while IFS= read -r line; do
|
|
42
|
+
lineno=$((lineno + 1))
|
|
43
|
+
value="$(printf '%s\\n' "$line" | sed -n 's/^[[:space:]]*uses:[[:space:]]*//p' | tr -d '\\\"')"
|
|
44
|
+
[ -z "$value" ] && continue
|
|
45
|
+
case "$value" in
|
|
46
|
+
actions/*|docker/*|xpertss/*|.|./*) ;;
|
|
47
|
+
*) violations+=(" - $path:$lineno — uses: $value") ;;
|
|
48
|
+
esac
|
|
49
|
+
done <<< "$content"
|
|
50
|
+
done <<< "$files"
|
|
51
|
+
if [ "\${#violations[@]}" -gt 0 ]; then
|
|
52
|
+
{
|
|
53
|
+
echo "❌ Disallowed GitHub Action reference"
|
|
54
|
+
echo ""
|
|
55
|
+
echo "This PR references an action outside the allow-list:"
|
|
56
|
+
echo ""
|
|
57
|
+
printf '%s\\n' "\${violations[@]}"
|
|
58
|
+
echo ""
|
|
59
|
+
echo "Org policy trusts only actions/*, docker/*, and xpertss/*. Use an equivalent internal action, or ask its maintainers to add one."
|
|
60
|
+
} | gh pr comment "$pr_number" --body-file - || echo "::warning::could not post PR comment (fork PR or missing token)"
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ActionsAllowlistGuard = ActionsAllowlistGuard;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1hbGxvd2xpc3QtZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL2FjdGlvbnMtYWxsb3dsaXN0LWd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FBMkM7QUFDM0MsMkNBQXVEO0FBb0N2RCxNQUFhLHFCQUFzQixTQUFRLGtCQUFTOztJQUNsQyxRQUFRLENBQXdCO0lBRWhELFlBQ0UsS0FBMkIsRUFDM0IsVUFBd0MsRUFBRTtRQUUxQyxLQUFLLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFdEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxDQUNsRSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUNsQixPQUFPLENBQUMsY0FBYyxJQUFJLG9DQUF3QixDQUFDO1FBRXJELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFNLENBQUMsY0FBYyxDQUN2QyxFQUFFLEVBQ0YsT0FBTyxDQUFDLFlBQVksSUFBSSx5QkFBeUIsQ0FDbEQsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDNUIsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsZUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSTtnQkFDN0MsWUFBWSxFQUFFLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUs7YUFDbkQ7WUFDRCxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLGNBQWMsS0FBSyxFQUFFO1lBQ3RELEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsMkJBQTJCO29CQUNqQyxHQUFHLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQ2Q7aUJBQ1E7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEVILHNEQXlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBCbG9ja2luZywgdGFtcGVyLXByb29mIFBSIGNoZWNrIHRoYXQgc3RvcHMgYSBkaXNhbGxvd2VkIEdpdEh1YiBBY3Rpb25cbiAqIHJlZmVyZW5jZSBmcm9tIGV2ZXIgKHJlKWFwcGVhcmluZyBpbiBhIHJlcG8ncyB3b3JrZmxvdyBvciBjb21wb3NpdGUtYWN0aW9uXG4gKiBmaWxlcy5cbiAqXG4gKiBSdW5zIG9uIGBwdWxsX3JlcXVlc3RfdGFyZ2V0YCBzbyBpdCBhbHdheXMgZXhlY3V0ZXMgdGhlIGNvcHkgb2YgdGhpc1xuICogd29ya2Zsb3cgY29tbWl0dGVkIG9uIHRoZSBiYXNlIGJyYW5jaCAtIGEgUFIgY2Fubm90IGVkaXQgdGhpcyBmaWxlIHRvXG4gKiBkaXNhYmxlIG9yIHdlYWtlbiB0aGUgY2hlY2suIEl0IGNoZWNrcyBvdXQgYW5kIGV4ZWN1dGVzIG5vdGhpbmcgZnJvbSB0aGVcbiAqIFBSOyBpdCBvbmx5IHJlYWRzIHRoZSBQUiBoZWFkJ3MgZmlsZSBjb250ZW50IHZpYSB0aGUgR2l0SHViIEFQSS4gQmVjYXVzZVxuICogYHB1bGxfcmVxdWVzdF90YXJnZXRgIHJ1bnMgd2l0aCB0aGUgYmFzZSByZXBvJ3MgdG9rZW4gZXZlbiBmb3JcbiAqIGZvcmstb3JpZ2luYXRlZCBQUnMsIHRoZSBmYWlsdXJlIGNvbW1lbnQgcG9zdHMgcmVsaWFibHkuXG4gKlxuICAqIEl0IHBlcmZvcm1zIGEgZmxhdCwgdW5jb25kaXRpb25hbCBzY2FuIG9mIHRoZSBQUidzIGhlYWQgcmVmIChub1xuICAqIGJhc2UtdnMtaGVhZCBjb21wYXJpc29uKTogZmV0Y2ggdGhlIGNvbnRlbnQgb2YgZXZlcnkgR2l0SHViIHdvcmtmbG93IGFuZFxuICAqIGNvbXBvc2l0ZS1hY3Rpb24gZmlsZSwgZXh0cmFjdCBldmVyeSBgdXNlczpgIHZhbHVlLCBhbmQgZmFpbCBpZiBhbnkgZG9lc1xuICAqIG5vdCBzdGFydCB3aXRoIG9uZSBvZiB0aGUgdGhyZWUgdHJ1c3RlZCBuYW1lc3BhY2VzIGZyb20gQUQtMDAxXG4gICogKGBhY3Rpb25zL2AsIGBkb2NrZXIvYCwgYHhwZXJ0c3MvYCkuIFRoZSBzaW5nbGVcbiAqIGV4ZW1wdGlvbiBpcyBhIGxvY2FsIHNhbWUtcmVwbyByZWZlcmVuY2UgKGB1c2VzOiAuYCBvclxuICogYHVzZXM6IC4vLmdpdGh1Yi9hY3Rpb25zLzxuYW1lPmApIC0gdGhlIHJlcG8ncyBvd24gaGFuZC1jb21taXR0ZWQgYWN0aW9uLFxuICogdG8gd2hpY2ggdGhlIG9yZyBwb2xpY3kncyBcImFsbG93IHNlbGVjdCBhY3Rpb25zXCIgc2V0dGluZyBkb2VzIG5vdCBhcHBseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zQWxsb3dsaXN0R3VhcmRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgaG9sZGluZyBhIHRva2VuIHdpdGggcGVybWlzc2lvbiB0byBjb21tZW50IG9uIFBScywgdXNlZFxuICAgKiBmb3IgdGhlIGZhaWx1cmUgY29tbWVudC4gVGhlIGNoZWNrIHN0aWxsIGZhaWxzIHdpdGhvdXQgaXQsIHNvIGZvcmsgUFJzIC1cbiAgICogd2hpY2ggZ2V0IG5vIHNlY3JldHMgLSBhcmUgb25seSBtaXNzaW5nIHRoZSBleHRyYSBjb21tZW50LlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2hlVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IFwiYWN0aW9ucy1hbGxvd2xpc3QtZ3VhcmRcIiAqL1xuICByZWFkb25seSB3b3JrZmxvd05hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25zQWxsb3dsaXN0R3VhcmQgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2Zsb3c6IGdpdGh1Yi5HaXRodWJXb3JrZmxvdztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogZ2l0aHViLkdpdEh1YlByb2plY3QsXG4gICAgb3B0aW9uczogQWN0aW9uc0FsbG93bGlzdEd1YXJkT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgJ0FjdGlvbnNBbGxvd2xpc3RHdWFyZCcpO1xuXG4gICAgY29uc3QgZ2ggPSBzY29wZS5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQWN0aW9uc0FsbG93bGlzdEd1YXJkIHJlcXVpcmVzIEdpdEh1YiBpbnRlZ3JhdGlvbiB0byBiZSBlbmFibGVkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2hlVG9rZW5TZWNyZXQgPVxuICAgICAgb3B0aW9ucy5naGVUb2tlblNlY3JldCA/PyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQ7XG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IGdpdGh1Yi5HaXRodWJXb3JrZmxvdyhcbiAgICAgIGdoLFxuICAgICAgb3B0aW9ucy53b3JrZmxvd05hbWUgPz8gJ2FjdGlvbnMtYWxsb3dsaXN0LWd1YXJkJyxcbiAgICApO1xuICAgIHRoaXMud29ya2Zsb3cub24oeyBwdWxsUmVxdWVzdFRhcmdldDoge30gfSk7XG4gICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoJ2NoZWNrJywge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgcHVsbFJlcXVlc3RzOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgZW52OiB7IEdIX1RPS0VOOiBgXFwke3sgc2VjcmV0cy4ke2doZVRva2VuU2VjcmV0fSB9fWAgfSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRW5mb3JjZSBhY3Rpb24gYWxsb3ctbGlzdCcsXG4gICAgICAgICAgcnVuOiBgc2V0IC11byBwaXBlZmFpbFxuaGVhZF9zaGE9XCJcXCR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmhlYWQuc2hhIH19XCJcbnByX251bWJlcj1cIlxcJHt7IGdpdGh1Yi5ldmVudC5udW1iZXIgfX1cIlxucmVwbz1cIlxcJHtHSVRIVUJfUkVQT1NJVE9SWX1cIlxuIyBBbGwgZmlsZXMgYXQgdGhlIFBSIGhlYWQgKHJlY3Vyc2l2ZSB0cmVlKSwgbmFycm93ZWQgdG8gd29ya2Zsb3cgYW5kXG4jIGNvbXBvc2l0ZS1hY3Rpb24gZmlsZXMuXG5maWxlcz1cIiQoZ2ggYXBpIFwicmVwb3MvJHJlcG8vZ2l0L3RyZWVzLyRoZWFkX3NoYT9yZWN1cnNpdmU9MVwiIC0tanEgJy50cmVlW10gfCBzZWxlY3QoLnR5cGU9PVwiYmxvYlwiKSB8IC5wYXRoJyB8IGdyZXAgLUUgJ15cXFxcLmdpdGh1Yi8od29ya2Zsb3dzL1teL10rXFxcXC4oeW1sfHlhbWwpfGFjdGlvbnMvW14vXSsvYWN0aW9uXFxcXC4oeW1sfHlhbWwpKSQnIHx8IHRydWUpXCJcbnZpb2xhdGlvbnM9KClcbndoaWxlIElGUz0gcmVhZCAtciBwYXRoOyBkb1xuICBbIC16IFwiJHBhdGhcIiBdICYmIGNvbnRpbnVlXG4gIGNvbnRlbnQ9XCIkKGdoIGFwaSBcInJlcG9zLyRyZXBvL2NvbnRlbnRzLyRwYXRoP3JlZj0kaGVhZF9zaGFcIiAtLWpxIC1yICcuY29udGVudCcgMj4vZGV2L251bGwgfCBiYXNlNjQgLWQgMj4vZGV2L251bGwgfHwgdHJ1ZSlcIlxuICBsaW5lbm89MFxuICB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cbiAgICBsaW5lbm89JCgobGluZW5vICsgMSkpXG4gICAgdmFsdWU9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkbGluZVwiIHwgc2VkIC1uICdzL15bWzpzcGFjZTpdXSp1c2VzOltbOnNwYWNlOl1dKi8vcCcgfCB0ciAtZCAnXFxcXFxcXCInKVwiXG4gICAgWyAteiBcIiR2YWx1ZVwiIF0gJiYgY29udGludWVcbiAgICBjYXNlIFwiJHZhbHVlXCIgaW5cbiAgICAgIGFjdGlvbnMvKnxkb2NrZXIvKnx4cGVydHNzLyp8LnwuLyopIDs7XG4gICAgICAqKSB2aW9sYXRpb25zKz0oXCIgIC0gJHBhdGg6JGxpbmVubyDigJQgdXNlczogJHZhbHVlXCIpIDs7XG4gICAgZXNhY1xuICBkb25lIDw8PCBcIiRjb250ZW50XCJcbmRvbmUgPDw8IFwiJGZpbGVzXCJcbmlmIFsgXCJcXCR7I3Zpb2xhdGlvbnNbQF19XCIgLWd0IDAgXTsgdGhlblxuICB7XG4gICAgZWNobyBcIuKdjCBEaXNhbGxvd2VkIEdpdEh1YiBBY3Rpb24gcmVmZXJlbmNlXCJcbiAgICBlY2hvIFwiXCJcbiAgICBlY2hvIFwiVGhpcyBQUiByZWZlcmVuY2VzIGFuIGFjdGlvbiBvdXRzaWRlIHRoZSBhbGxvdy1saXN0OlwiXG4gICAgZWNobyBcIlwiXG4gICAgcHJpbnRmICclc1xcXFxuJyBcIlxcJHt2aW9sYXRpb25zW0BdfVwiXG4gICAgZWNobyBcIlwiXG4gICAgZWNobyBcIk9yZyBwb2xpY3kgdHJ1c3RzIG9ubHkgYWN0aW9ucy8qLCBkb2NrZXIvKiwgYW5kIHhwZXJ0c3MvKi4gVXNlIGFuIGVxdWl2YWxlbnQgaW50ZXJuYWwgYWN0aW9uLCBvciBhc2sgaXRzIG1haW50YWluZXJzIHRvIGFkZCBvbmUuXCJcbiAgfSB8IGdoIHByIGNvbW1lbnQgXCIkcHJfbnVtYmVyXCIgLS1ib2R5LWZpbGUgLSB8fCBlY2hvIFwiOjp3YXJuaW5nOjpjb3VsZCBub3QgcG9zdCBQUiBjb21tZW50IChmb3JrIFBSIG9yIG1pc3NpbmcgdG9rZW4pXCJcbiAgZXhpdCAxXG5maVxuYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { github } from 'projen';
|
|
2
|
+
/**
|
|
3
|
+
* Redirects every out-of-policy third-party action reference to the
|
|
4
|
+
* first-party `xpertss/*` internal actions across the whole project, using
|
|
5
|
+
* projen's `GitHubActionsProvider`. Call once per `GitHubProject`. Because
|
|
6
|
+
* every generated `uses:` is resolved through this map at synth time -
|
|
7
|
+
* including projen's built-in `upgrade-main` / `pull-request-lint` workflows
|
|
8
|
+
* - this single call covers all current out-of-policy call sites.
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyInternalActionOverrides(gh: github.GitHub): void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyInternalActionOverrides = applyInternalActionOverrides;
|
|
4
|
+
// Placeholder until the internal action repos are built and released (AD-002
|
|
5
|
+
// Phase 1, step 8) - a real 40-char SHA replaces this in each entry at that
|
|
6
|
+
// point. Landed with placeholders so the override mechanism is in place while
|
|
7
|
+
// the untrusted workflows it retargets are non-gating (AD-002 Phase 0).
|
|
8
|
+
const PLACEHOLDER_SHA = 'PLACEHOLDER_SHA';
|
|
9
|
+
// Name (without ref) -> SHA-pinned internal-action override. Per projen's
|
|
10
|
+
// GitHubActionsProvider.get() a name-keyed override redirects every ref
|
|
11
|
+
// variant at once, so a single entry covers both this package's literals
|
|
12
|
+
// (@v7/@v5) and projen's built-in workflows (@v8.1.1/SHA) for the same
|
|
13
|
+
// action. Only actions outside the trusted namespaces (actions/*, docker/*,
|
|
14
|
+
// xpertss/*) ever need an entry.
|
|
15
|
+
const ACTION_OVERRIDES = {
|
|
16
|
+
'peter-evans/create-pull-request': `xpertss/create-pull-request@${PLACEHOLDER_SHA}`,
|
|
17
|
+
'stefanzweifel/git-auto-commit-action': `xpertss/auto-commit@${PLACEHOLDER_SHA}`,
|
|
18
|
+
'amannn/action-semantic-pull-request': `xpertss/semantic-pull-request@${PLACEHOLDER_SHA}`,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Redirects every out-of-policy third-party action reference to the
|
|
22
|
+
* first-party `xpertss/*` internal actions across the whole project, using
|
|
23
|
+
* projen's `GitHubActionsProvider`. Call once per `GitHubProject`. Because
|
|
24
|
+
* every generated `uses:` is resolved through this map at synth time -
|
|
25
|
+
* including projen's built-in `upgrade-main` / `pull-request-lint` workflows
|
|
26
|
+
* - this single call covers all current out-of-policy call sites.
|
|
27
|
+
*/
|
|
28
|
+
function applyInternalActionOverrides(gh) {
|
|
29
|
+
for (const [action, override] of Object.entries(ACTION_OVERRIDES)) {
|
|
30
|
+
gh.actions.set(action, override);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vaW50ZXJuYWwtYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSxvRUFJQztBQTlCRCw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSx3RUFBd0U7QUFDeEUsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFFMUMsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSx5RUFBeUU7QUFDekUsdUVBQXVFO0FBQ3ZFLDRFQUE0RTtBQUM1RSxpQ0FBaUM7QUFDakMsTUFBTSxnQkFBZ0IsR0FBMkI7SUFDL0MsaUNBQWlDLEVBQUUsK0JBQStCLGVBQWUsRUFBRTtJQUNuRixzQ0FBc0MsRUFBRSx1QkFBdUIsZUFBZSxFQUFFO0lBQ2hGLHFDQUFxQyxFQUFFLGlDQUFpQyxlQUFlLEVBQUU7Q0FDMUYsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxFQUFpQjtJQUM1RCxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDbEUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcblxuLy8gUGxhY2Vob2xkZXIgdW50aWwgdGhlIGludGVybmFsIGFjdGlvbiByZXBvcyBhcmUgYnVpbHQgYW5kIHJlbGVhc2VkIChBRC0wMDJcbi8vIFBoYXNlIDEsIHN0ZXAgOCkgLSBhIHJlYWwgNDAtY2hhciBTSEEgcmVwbGFjZXMgdGhpcyBpbiBlYWNoIGVudHJ5IGF0IHRoYXRcbi8vIHBvaW50LiBMYW5kZWQgd2l0aCBwbGFjZWhvbGRlcnMgc28gdGhlIG92ZXJyaWRlIG1lY2hhbmlzbSBpcyBpbiBwbGFjZSB3aGlsZVxuLy8gdGhlIHVudHJ1c3RlZCB3b3JrZmxvd3MgaXQgcmV0YXJnZXRzIGFyZSBub24tZ2F0aW5nIChBRC0wMDIgUGhhc2UgMCkuXG5jb25zdCBQTEFDRUhPTERFUl9TSEEgPSAnUExBQ0VIT0xERVJfU0hBJztcblxuLy8gTmFtZSAod2l0aG91dCByZWYpIC0+IFNIQS1waW5uZWQgaW50ZXJuYWwtYWN0aW9uIG92ZXJyaWRlLiBQZXIgcHJvamVuJ3Ncbi8vIEdpdEh1YkFjdGlvbnNQcm92aWRlci5nZXQoKSBhIG5hbWUta2V5ZWQgb3ZlcnJpZGUgcmVkaXJlY3RzIGV2ZXJ5IHJlZlxuLy8gdmFyaWFudCBhdCBvbmNlLCBzbyBhIHNpbmdsZSBlbnRyeSBjb3ZlcnMgYm90aCB0aGlzIHBhY2thZ2UncyBsaXRlcmFsc1xuLy8gKEB2Ny9AdjUpIGFuZCBwcm9qZW4ncyBidWlsdC1pbiB3b3JrZmxvd3MgKEB2OC4xLjEvU0hBKSBmb3IgdGhlIHNhbWVcbi8vIGFjdGlvbi4gT25seSBhY3Rpb25zIG91dHNpZGUgdGhlIHRydXN0ZWQgbmFtZXNwYWNlcyAoYWN0aW9ucy8qLCBkb2NrZXIvKixcbi8vIHhwZXJ0c3MvKikgZXZlciBuZWVkIGFuIGVudHJ5LlxuY29uc3QgQUNUSU9OX09WRVJSSURFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ3BldGVyLWV2YW5zL2NyZWF0ZS1wdWxsLXJlcXVlc3QnOiBgeHBlcnRzcy9jcmVhdGUtcHVsbC1yZXF1ZXN0QCR7UExBQ0VIT0xERVJfU0hBfWAsXG4gICdzdGVmYW56d2VpZmVsL2dpdC1hdXRvLWNvbW1pdC1hY3Rpb24nOiBgeHBlcnRzcy9hdXRvLWNvbW1pdEAke1BMQUNFSE9MREVSX1NIQX1gLFxuICAnYW1hbm5uL2FjdGlvbi1zZW1hbnRpYy1wdWxsLXJlcXVlc3QnOiBgeHBlcnRzcy9zZW1hbnRpYy1wdWxsLXJlcXVlc3RAJHtQTEFDRUhPTERFUl9TSEF9YCxcbn07XG5cbi8qKlxuICogUmVkaXJlY3RzIGV2ZXJ5IG91dC1vZi1wb2xpY3kgdGhpcmQtcGFydHkgYWN0aW9uIHJlZmVyZW5jZSB0byB0aGVcbiAqIGZpcnN0LXBhcnR5IGB4cGVydHNzLypgIGludGVybmFsIGFjdGlvbnMgYWNyb3NzIHRoZSB3aG9sZSBwcm9qZWN0LCB1c2luZ1xuICogcHJvamVuJ3MgYEdpdEh1YkFjdGlvbnNQcm92aWRlcmAuIENhbGwgb25jZSBwZXIgYEdpdEh1YlByb2plY3RgLiBCZWNhdXNlXG4gKiBldmVyeSBnZW5lcmF0ZWQgYHVzZXM6YCBpcyByZXNvbHZlZCB0aHJvdWdoIHRoaXMgbWFwIGF0IHN5bnRoIHRpbWUgLVxuICogaW5jbHVkaW5nIHByb2plbidzIGJ1aWx0LWluIGB1cGdyYWRlLW1haW5gIC8gYHB1bGwtcmVxdWVzdC1saW50YCB3b3JrZmxvd3NcbiAqIC0gdGhpcyBzaW5nbGUgY2FsbCBjb3ZlcnMgYWxsIGN1cnJlbnQgb3V0LW9mLXBvbGljeSBjYWxsIHNpdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyhnaDogZ2l0aHViLkdpdEh1Yik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFthY3Rpb24sIG92ZXJyaWRlXSBvZiBPYmplY3QuZW50cmllcyhBQ1RJT05fT1ZFUlJJREVTKSkge1xuICAgIGdoLmFjdGlvbnMuc2V0KGFjdGlvbiwgb3ZlcnJpZGUpO1xuICB9XG59XG4iXX0=
|
|
@@ -24,8 +24,6 @@ export interface ManualDeployWorkflowOptions {
|
|
|
24
24
|
* `repository_dispatch` to a companion infra repo).
|
|
25
25
|
*/
|
|
26
26
|
readonly deploySteps?: (env: EnvironmentOptions) => github.workflows.JobStep[];
|
|
27
|
-
/** GitHub secret holding a Slack webhook URL used to notify on deploy. */
|
|
28
|
-
readonly slackWebhookSecret?: string;
|
|
29
27
|
}
|
|
30
28
|
/** @internal */
|
|
31
29
|
export declare class ManualDeployWorkflow extends Component {
|
|
@@ -49,17 +49,6 @@ class ManualDeployWorkflow extends projen_1.Component {
|
|
|
49
49
|
},
|
|
50
50
|
...deploySteps(env),
|
|
51
51
|
];
|
|
52
|
-
if (options.slackWebhookSecret) {
|
|
53
|
-
steps.push({
|
|
54
|
-
name: 'Notify Slack',
|
|
55
|
-
if: 'always()',
|
|
56
|
-
uses: 'slackapi/slack-github-action@v2',
|
|
57
|
-
with: { 'webhook-type': 'incoming-webhook' },
|
|
58
|
-
env: {
|
|
59
|
-
SLACK_WEBHOOK_URL: `\${{ secrets.${options.slackWebhookSecret} }}`,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
52
|
this.workflow.addJob(`deploy-${env.name}`, {
|
|
64
53
|
name: `Deploy (${env.name})`,
|
|
65
54
|
if: `github.event.inputs.environment == '${env.name}'`,
|
|
@@ -75,4 +64,4 @@ class ManualDeployWorkflow extends projen_1.Component {
|
|
|
75
64
|
}
|
|
76
65
|
}
|
|
77
66
|
exports.ManualDeployWorkflow = ManualDeployWorkflow;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFudWFsLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vbWFudWFsLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBMkM7QUFDM0MsK0RBRytCO0FBZ0MvQixnQkFBZ0I7QUFDaEIsTUFBYSxvQkFBcUIsU0FBUSxrQkFBUztJQUNqQyxRQUFRLENBQXdCO0lBRWhELFlBQ0UsS0FBMkIsRUFDM0IsT0FBb0M7UUFFcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sWUFBWSxHQUFHLElBQUEsMkNBQXFCLEVBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYixnRUFBZ0UsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FDZixPQUFPLENBQUMsV0FBVztZQUNuQixDQUFDLENBQUMsR0FBdUIsRUFBOEIsRUFBRSxDQUFDO2dCQUN4RDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUMxQixHQUFHLEVBQUUsdURBQXVELEdBQUcsQ0FBQyxJQUFJLElBQUk7aUJBQ3pFO2FBQ0YsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRTtvQkFDTixXQUFXLEVBQUU7d0JBQ1gsV0FBVyxFQUFFLHVCQUF1Qjt3QkFDcEMsUUFBUSxFQUFFLElBQUk7d0JBQ2QsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQ3pDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxXQUFXLEVBQ1QsZ0VBQWdFO3dCQUNsRSxRQUFRLEVBQUUsS0FBSztxQkFDaEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQStCO2dCQUN4QztvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLHFCQUFxQjtvQkFDM0IsSUFBSSxFQUFFO3dCQUNKLEdBQUcsRUFBRSxrREFBa0Q7cUJBQ3hEO2lCQUNGO2dCQUNELEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUNwQixDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksRUFBRSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEdBQUc7Z0JBQzVCLEVBQUUsRUFBRSx1Q0FBdUMsR0FBRyxDQUFDLElBQUksR0FBRztnQkFDdEQsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUN6QixXQUFXLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUN4RCxXQUFXLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUs7b0JBQzdDLFFBQVEsRUFBRSxlQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2lCQUM5QztnQkFDRCxLQUFLO2FBQ04sQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZFRCxvREF1RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQge1xuICBFbnZpcm9ubWVudE9wdGlvbnMsXG4gIG5vcm1hbGl6ZUVudmlyb25tZW50cyxcbn0gZnJvbSAnLi9lbnZpcm9ubWVudC1vcHRpb25zJztcblxuLyoqXG4gKiBTaGFyZWQsIGVudmlyb25tZW50LXBhcmFtZXRlcml6ZWQgbWFudWFsLWRpc3BhdGNoIGRlcGxveSB3b3JrZmxvdy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBvbmUgXCJ0cmlnZ2VyIGEgZGVwbG95XCIgY29udHJhY3QgdXNlZCBieSBib3RoIHRoZSBDREsgcHJvamVjdFxuICogdHlwZXMgKGRlcGxveWluZyB0aGVpciBvd24gc3RhY2tzKSBhbmQgdGhlIEphdmEgYENka0RlcGxveUhvb2tgIGNvbXBvbmVudFxuICogKGRpc3BhdGNoaW5nIGEgZGVwbG95IGluIGEgY29tcGFuaW9uIENESyByZXBvKSAtIHNlZSB0aGUgXCJPcGVuIFF1ZXN0aW9uc1wiXG4gKiBzZWN0aW9ucyBvZiB0aGUgdHdvIHNwZWNzLlxuICpcbiAqIEBpbnRlcm5hbCAtIG5vdCBwYXJ0IG9mIHRoZSBqc2lpLWV4cG9ydGVkIEFQSSAoaXRzIGBkZXBsb3lTdGVwc2AgY2FsbGJhY2tcbiAqIGlzbid0IHJlcHJlc2VudGFibGUgYWNyb3NzIGpzaWkgbGFuZ3VhZ2VzKTsgY29uc3VtZWQgZGlyZWN0bHkgYnkgb3RoZXJcbiAqIFR5cGVTY3JpcHQgc291cmNlIGluIHRoaXMgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW51YWxEZXBsb3lXb3JrZmxvd09wdGlvbnMge1xuICAvKiogRGVwbG95IHRhcmdldHMgZXhwb3NlZCBhcyB0aGUgYGVudmlyb25tZW50YCB3b3JrZmxvd19kaXNwYXRjaCBjaG9pY2UuICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50czogKHN0cmluZyB8IEVudmlyb25tZW50T3B0aW9ucylbXTtcblxuICAvKiogQGRlZmF1bHQgXCJkZXBsb3lcIiAqL1xuICByZWFkb25seSB3b3JrZmxvd05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwcyB0aGF0IGFjdHVhbGx5IHBlcmZvcm0gdGhlIGRlcGxveSBmb3IgYSBnaXZlbiBlbnZpcm9ubWVudC5cbiAgICogRGVmYXVsdHMgdG8gYSBwbGFjZWhvbGRlciBgZWNob2Agc3RlcCAtIHByb2plY3QgdHlwZXMgYXJlIGV4cGVjdGVkIHRvXG4gICAqIG92ZXJyaWRlIHRoaXMgd2l0aCBzb21ldGhpbmcgcmVhbCAoZS5nLiBgY2RrIGRlcGxveWAsIG9yIGFcbiAgICogYHJlcG9zaXRvcnlfZGlzcGF0Y2hgIHRvIGEgY29tcGFuaW9uIGluZnJhIHJlcG8pLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95U3RlcHM/OiAoXG4gICAgZW52OiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICkgPT4gZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW107XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBNYW51YWxEZXBsb3lXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdzogZ2l0aHViLkdpdGh1YldvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBnaXRodWIuR2l0SHViUHJvamVjdCxcbiAgICBvcHRpb25zOiBNYW51YWxEZXBsb3lXb3JrZmxvd09wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCAnTWFudWFsRGVwbG95V29ya2Zsb3cnKTtcblxuICAgIGNvbnN0IGVudmlyb25tZW50cyA9IG5vcm1hbGl6ZUVudmlyb25tZW50cyhvcHRpb25zLmVudmlyb25tZW50cyk7XG4gICAgY29uc3QgZ2ggPSBzY29wZS5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTWFudWFsRGVwbG95V29ya2Zsb3cgcmVxdWlyZXMgR2l0SHViIGludGVncmF0aW9uIHRvIGJlIGVuYWJsZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLndvcmtmbG93TmFtZSA/PyAnZGVwbG95JztcbiAgICBjb25zdCBkZXBsb3lTdGVwcyA9XG4gICAgICBvcHRpb25zLmRlcGxveVN0ZXBzID8/XG4gICAgICAoKGVudjogRW52aXJvbm1lbnRPcHRpb25zKTogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPT4gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYERlcGxveSAke2Vudi5uYW1lfWAsXG4gICAgICAgICAgcnVuOiBgZWNobyBcIlRPRE86IGltcGxlbWVudCBkZXBsb3kgc3RlcHMgZm9yIGVudmlyb25tZW50ICcke2Vudi5uYW1lfSdcImAsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgIHRoaXMud29ya2Zsb3cgPSBuZXcgZ2l0aHViLkdpdGh1YldvcmtmbG93KGdoLCB3b3JrZmxvd05hbWUpO1xuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge1xuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbnZpcm9ubWVudCB0byBkZXBsb3knLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGVudmlyb25tZW50cy5tYXAoKGUpID0+IGUubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnaXRfc2hhOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgJ09wdGlvbmFsIGNvbW1pdCBTSEEgdG8gZGVwbG95IChkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBicmFuY2gpJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW52IG9mIGVudmlyb25tZW50cykge1xuICAgICAgY29uc3Qgc3RlcHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iU3RlcFtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NCcsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5ldmVudC5pbnB1dHMuZ2l0X3NoYSB8fCBnaXRodWIuc2hhIH19JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXBsb3lTdGVwcyhlbnYpLFxuICAgICAgXTtcblxuICAgICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke2Vudi5uYW1lfWAsIHtcbiAgICAgICAgbmFtZTogYERlcGxveSAoJHtlbnYubmFtZX0pYCxcbiAgICAgICAgaWY6IGBnaXRodWIuZXZlbnQuaW5wdXRzLmVudmlyb25tZW50ID09ICcke2Vudi5uYW1lfSdgLFxuICAgICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgICBlbnZpcm9ubWVudDogZW52LnJlcXVpcmVzQXBwcm92YWwgPyBlbnYubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBpZFRva2VuOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|