@xpertss/projen-types 0.0.0

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.
Files changed (58) hide show
  1. package/.jsii +1742 -0
  2. package/API.md +11718 -0
  3. package/LICENSE +202 -0
  4. package/README.md +263 -0
  5. package/lib/cdk/app-runtime-scaffold.d.ts +8 -0
  6. package/lib/cdk/app-runtime-scaffold.js +31 -0
  7. package/lib/cdk/cdk-app-project.d.ts +10 -0
  8. package/lib/cdk/cdk-app-project.js +35 -0
  9. package/lib/cdk/cdk-infra-project.d.ts +10 -0
  10. package/lib/cdk/cdk-infra-project.js +26 -0
  11. package/lib/cdk/cdk-typescript-base.d.ts +16 -0
  12. package/lib/cdk/cdk-typescript-base.js +53 -0
  13. package/lib/cdk/components/ecr-ecs-constructs.d.ts +12 -0
  14. package/lib/cdk/components/ecr-ecs-constructs.js +46 -0
  15. package/lib/cdk/components/edge-networking-constructs.d.ts +10 -0
  16. package/lib/cdk/components/edge-networking-constructs.js +66 -0
  17. package/lib/cdk/database-component.d.ts +11 -0
  18. package/lib/cdk/database-component.js +44 -0
  19. package/lib/cdk/options.d.ts +39 -0
  20. package/lib/cdk/options.js +3 -0
  21. package/lib/common/constants.d.ts +7 -0
  22. package/lib/common/constants.js +11 -0
  23. package/lib/common/drift-check.d.ts +8 -0
  24. package/lib/common/drift-check.js +18 -0
  25. package/lib/common/environment-options.d.ts +19 -0
  26. package/lib/common/environment-options.js +7 -0
  27. package/lib/common/manual-deploy-workflow.d.ts +34 -0
  28. package/lib/common/manual-deploy-workflow.js +78 -0
  29. package/lib/common/upgrade-workflow.d.ts +18 -0
  30. package/lib/common/upgrade-workflow.js +39 -0
  31. package/lib/index.d.ts +20 -0
  32. package/lib/index.js +37 -0
  33. package/lib/java/components/cdk-deploy-hook.d.ts +13 -0
  34. package/lib/java/components/cdk-deploy-hook.js +45 -0
  35. package/lib/java/components/code-index-workflow.d.ts +6 -0
  36. package/lib/java/components/code-index-workflow.js +35 -0
  37. package/lib/java/components/docker-publish.d.ts +10 -0
  38. package/lib/java/components/docker-publish.js +41 -0
  39. package/lib/java/components/flyway-migration.d.ts +6 -0
  40. package/lib/java/components/flyway-migration.js +19 -0
  41. package/lib/java/components/github-packages-publish.d.ts +10 -0
  42. package/lib/java/components/github-packages-publish.js +34 -0
  43. package/lib/java/components/maven-central-publish.d.ts +13 -0
  44. package/lib/java/components/maven-central-publish.js +44 -0
  45. package/lib/java/java-app-project.d.ts +9 -0
  46. package/lib/java/java-app-project.js +21 -0
  47. package/lib/java/java-library-project.d.ts +6 -0
  48. package/lib/java/java-library-project.js +20 -0
  49. package/lib/java/java-maven-base.d.ts +15 -0
  50. package/lib/java/java-maven-base.js +56 -0
  51. package/lib/java/java-service-project.d.ts +9 -0
  52. package/lib/java/java-service-project.js +29 -0
  53. package/lib/java/options.d.ts +43 -0
  54. package/lib/java/options.js +3 -0
  55. package/package.json +139 -0
  56. package/spec/npm-publishing-setup.md +150 -0
  57. package/spec/projen-cdk-spec.md +80 -0
  58. package/spec/projen-java-spec.md +96 -0
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CdkTypescriptProject = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ const constants_1 = require("../common/constants");
7
+ const manual_deploy_workflow_1 = require("../common/manual-deploy-workflow");
8
+ /**
9
+ * Shared CDK + TypeScript foundation for `CdkInfraProject` and
10
+ * `CdkAppProject`: standard app structure (via `AwsCdkTypeScriptApp`,
11
+ * `cdk.json`, `cdk synth`/`cdk diff` tasks), a PR-check build that hard-fails
12
+ * on projen drift (rather than self-mutating), and an optional
13
+ * `ManualDeployWorkflow` when `environments` is provided.
14
+ */
15
+ class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.0" };
17
+ constructor(options) {
18
+ super({
19
+ name: options.name,
20
+ cdkVersion: options.cdkVersion ?? '2.189.1',
21
+ defaultReleaseBranch: 'main',
22
+ sampleCode: true,
23
+ // Fail PR checks on drift instead of auto-committing projen's output.
24
+ buildWorkflowOptions: { mutableBuild: false },
25
+ projenCredentials: projen_1.github.GithubCredentials.fromPersonalAccessToken({
26
+ secret: options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET,
27
+ }),
28
+ });
29
+ this.addDevDeps('esbuild');
30
+ if (options.environments && options.environments.length > 0) {
31
+ new manual_deploy_workflow_1.ManualDeployWorkflow(this, {
32
+ environments: options.environments,
33
+ slackWebhookSecret: options.slackWebhookSecret,
34
+ deploySteps: (env) => [
35
+ {
36
+ name: 'Install',
37
+ run: 'npm ci',
38
+ },
39
+ {
40
+ name: `cdk deploy (${env.name})`,
41
+ run: `npx cdk deploy --all --require-approval never --context environment=${env.name}`,
42
+ env: {
43
+ ...(env.accountId ? { CDK_DEFAULT_ACCOUNT: env.accountId } : {}),
44
+ ...(env.region ? { CDK_DEFAULT_REGION: env.region } : {}),
45
+ },
46
+ },
47
+ ],
48
+ });
49
+ }
50
+ }
51
+ }
52
+ exports.CdkTypescriptProject = CdkTypescriptProject;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXR5cGVzY3JpcHQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGsvY2RrLXR5cGVzY3JpcHQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQXdDO0FBRXhDLG1EQUErRDtBQUUvRCw2RUFBd0U7QUFNeEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxlQUFNLENBQUMsbUJBQW1COztJQUNsRSxZQUFZLE9BQW9DO1FBQzlDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTO1lBQzNDLG9CQUFvQixFQUFFLE1BQU07WUFDNUIsVUFBVSxFQUFFLElBQUk7WUFDaEIsc0VBQXNFO1lBQ3RFLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtZQUM3QyxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xFLE1BQU0sRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLG9DQUF3QjthQUMzRCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQixJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSw2Q0FBb0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtnQkFDOUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDcEI7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsR0FBRyxFQUFFLFFBQVE7cUJBQ2Q7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRzt3QkFDaEMsR0FBRyxFQUFFLHVFQUF1RSxHQUFHLENBQUMsSUFBSSxFQUFFO3dCQUN0RixHQUFHLEVBQUU7NEJBQ0gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2hFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUMxRDtxQkFDRjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXBDSCxvREFxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDb21tb25DZGtPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi4vY29tbW9uL2Vudmlyb25tZW50LW9wdGlvbnMnO1xuaW1wb3J0IHsgTWFudWFsRGVwbG95V29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vbWFudWFsLWRlcGxveS13b3JrZmxvdyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrVHlwZXNjcmlwdFByb2plY3RPcHRpb25zIGV4dGVuZHMgQ29tbW9uQ2RrT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IChzdHJpbmcgfCBFbnZpcm9ubWVudE9wdGlvbnMpW107XG59XG5cbi8qKlxuICogU2hhcmVkIENESyArIFR5cGVTY3JpcHQgZm91bmRhdGlvbiBmb3IgYENka0luZnJhUHJvamVjdGAgYW5kXG4gKiBgQ2RrQXBwUHJvamVjdGA6IHN0YW5kYXJkIGFwcCBzdHJ1Y3R1cmUgKHZpYSBgQXdzQ2RrVHlwZVNjcmlwdEFwcGAsXG4gKiBgY2RrLmpzb25gLCBgY2RrIHN5bnRoYC9gY2RrIGRpZmZgIHRhc2tzKSwgYSBQUi1jaGVjayBidWlsZCB0aGF0IGhhcmQtZmFpbHNcbiAqIG9uIHByb2plbiBkcmlmdCAocmF0aGVyIHRoYW4gc2VsZi1tdXRhdGluZyksIGFuZCBhbiBvcHRpb25hbFxuICogYE1hbnVhbERlcGxveVdvcmtmbG93YCB3aGVuIGBlbnZpcm9ubWVudHNgIGlzIHByb3ZpZGVkLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrVHlwZXNjcmlwdFByb2plY3QgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka1R5cGVzY3JpcHRQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGNka1ZlcnNpb246IG9wdGlvbnMuY2RrVmVyc2lvbiA/PyAnMi4xODkuMScsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgc2FtcGxlQ29kZTogdHJ1ZSxcbiAgICAgIC8vIEZhaWwgUFIgY2hlY2tzIG9uIGRyaWZ0IGluc3RlYWQgb2YgYXV0by1jb21taXR0aW5nIHByb2plbidzIG91dHB1dC5cbiAgICAgIGJ1aWxkV29ya2Zsb3dPcHRpb25zOiB7IG11dGFibGVCdWlsZDogZmFsc2UgfSxcbiAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oe1xuICAgICAgICBzZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2VzYnVpbGQnKTtcblxuICAgIGlmIChvcHRpb25zLmVudmlyb25tZW50cyAmJiBvcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXcgTWFudWFsRGVwbG95V29ya2Zsb3codGhpcywge1xuICAgICAgICBlbnZpcm9ubWVudHM6IG9wdGlvbnMuZW52aXJvbm1lbnRzLFxuICAgICAgICBzbGFja1dlYmhvb2tTZWNyZXQ6IG9wdGlvbnMuc2xhY2tXZWJob29rU2VjcmV0LFxuICAgICAgICBkZXBsb3lTdGVwczogKGVudikgPT4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsJyxcbiAgICAgICAgICAgIHJ1bjogJ25wbSBjaScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBgY2RrIGRlcGxveSAoJHtlbnYubmFtZX0pYCxcbiAgICAgICAgICAgIHJ1bjogYG5weCBjZGsgZGVwbG95IC0tYWxsIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciAtLWNvbnRleHQgZW52aXJvbm1lbnQ9JHtlbnYubmFtZX1gLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIC4uLihlbnYuYWNjb3VudElkID8geyBDREtfREVGQVVMVF9BQ0NPVU5UOiBlbnYuYWNjb3VudElkIH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLihlbnYucmVnaW9uID8geyBDREtfREVGQVVMVF9SRUdJT046IGVudi5yZWdpb24gfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { Component } from 'projen';
2
+ import type { Project } from 'projen';
3
+ import { EcrEcsOptions } from '../options';
4
+ /**
5
+ * Reusable construct helper for an ECR repo + Fargate ECS cluster/service
6
+ * standing up a container image. `externalImageSource` controls whether the
7
+ * service pulls an externally-published image (infra-only projects) or one
8
+ * built from this project's own source (app projects).
9
+ */
10
+ export declare class EcrEcsConstructs extends Component {
11
+ constructor(project: Project, options?: EcrEcsOptions);
12
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EcrEcsConstructs = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ /**
7
+ * Reusable construct helper for an ECR repo + Fargate ECS cluster/service
8
+ * standing up a container image. `externalImageSource` controls whether the
9
+ * service pulls an externally-published image (infra-only projects) or one
10
+ * built from this project's own source (app projects).
11
+ */
12
+ class EcrEcsConstructs extends projen_1.Component {
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.0" };
14
+ constructor(project, options = {}) {
15
+ super(project, 'EcrEcsConstructs');
16
+ const externalImageSource = options.externalImageSource ?? true;
17
+ const src = new projen_1.SourceCode(project, 'src/constructs/ecr-ecs.ts');
18
+ src.line('import { Construct } from "constructs";');
19
+ src.line('import * as ecr from "aws-cdk-lib/aws-ecr";');
20
+ src.line('import * as ecs from "aws-cdk-lib/aws-ecs";');
21
+ src.line();
22
+ src.open('export interface EcrEcsServiceProps {');
23
+ src.line('readonly vpcId?: string;');
24
+ src.line(externalImageSource
25
+ ? 'readonly imageTag?: string; // externally-built image tag to deploy'
26
+ : "readonly imageDirectory: string; // path to a Dockerfile built from this project's source");
27
+ src.close('}');
28
+ src.line();
29
+ src.open('export class EcrEcsService extends Construct {');
30
+ src.line('public readonly repository: ecr.IRepository;');
31
+ src.line('public readonly cluster: ecs.Cluster;');
32
+ src.line();
33
+ src.open('constructor(scope: Construct, id: string, props: EcrEcsServiceProps) {');
34
+ src.line('super(scope, id);');
35
+ src.line();
36
+ src.line(externalImageSource
37
+ ? 'this.repository = ecr.Repository.fromRepositoryName(this, "Repository", id);'
38
+ : 'this.repository = new ecr.Repository(this, "Repository");');
39
+ src.line('this.cluster = new ecs.Cluster(this, "Cluster");');
40
+ src.line('// TODO: wire up a FargateTaskDefinition/FargateService using this.repository');
41
+ src.close('}');
42
+ src.close('}');
43
+ }
44
+ }
45
+ exports.EcrEcsConstructs = EcrEcsConstructs;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyLWVjcy1jb25zdHJ1Y3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nkay9jb21wb25lbnRzL2Vjci1lY3MtY29uc3RydWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQStDO0FBSS9DOzs7OztHQUtHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxrQkFBUzs7SUFDN0MsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQztRQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFFakUsR0FBRyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUN4RCxHQUFHLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDeEQsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNyQyxHQUFHLENBQUMsSUFBSSxDQUNOLG1CQUFtQjtZQUNqQixDQUFDLENBQUMscUVBQXFFO1lBQ3ZFLENBQUMsQ0FBQywyRkFBMkYsQ0FDaEcsQ0FBQztRQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsSUFBSSxDQUNOLGdEQUFnRCxDQUNqRCxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3pELEdBQUcsQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDbkYsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxJQUFJLENBQ04sbUJBQW1CO1lBQ2pCLENBQUMsQ0FBQyw4RUFBOEU7WUFDaEYsQ0FBQyxDQUFDLDJEQUEyRCxDQUNoRSxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQzdELEdBQUcsQ0FBQyxJQUFJLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUMxRixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDOztBQXRDSCw0Q0F1Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNvdXJjZUNvZGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEVjckVjc09wdGlvbnMgfSBmcm9tICcuLi9vcHRpb25zJztcblxuLyoqXG4gKiBSZXVzYWJsZSBjb25zdHJ1Y3QgaGVscGVyIGZvciBhbiBFQ1IgcmVwbyArIEZhcmdhdGUgRUNTIGNsdXN0ZXIvc2VydmljZVxuICogc3RhbmRpbmcgdXAgYSBjb250YWluZXIgaW1hZ2UuIGBleHRlcm5hbEltYWdlU291cmNlYCBjb250cm9scyB3aGV0aGVyIHRoZVxuICogc2VydmljZSBwdWxscyBhbiBleHRlcm5hbGx5LXB1Ymxpc2hlZCBpbWFnZSAoaW5mcmEtb25seSBwcm9qZWN0cykgb3Igb25lXG4gKiBidWlsdCBmcm9tIHRoaXMgcHJvamVjdCdzIG93biBzb3VyY2UgKGFwcCBwcm9qZWN0cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBFY3JFY3NDb25zdHJ1Y3RzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogRWNyRWNzT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ0VjckVjc0NvbnN0cnVjdHMnKTtcblxuICAgIGNvbnN0IGV4dGVybmFsSW1hZ2VTb3VyY2UgPSBvcHRpb25zLmV4dGVybmFsSW1hZ2VTb3VyY2UgPz8gdHJ1ZTtcbiAgICBjb25zdCBzcmMgPSBuZXcgU291cmNlQ29kZShwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvZWNyLWVjcy50cycpO1xuXG4gICAgc3JjLmxpbmUoJ2ltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7Jyk7XG4gICAgc3JjLmxpbmUoJ2ltcG9ydCAqIGFzIGVjciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiOycpO1xuICAgIHNyYy5saW5lKCdpbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjsnKTtcbiAgICBzcmMubGluZSgpO1xuICAgIHNyYy5vcGVuKCdleHBvcnQgaW50ZXJmYWNlIEVjckVjc1NlcnZpY2VQcm9wcyB7Jyk7XG4gICAgc3JjLmxpbmUoJ3JlYWRvbmx5IHZwY0lkPzogc3RyaW5nOycpO1xuICAgIHNyYy5saW5lKFxuICAgICAgZXh0ZXJuYWxJbWFnZVNvdXJjZVxuICAgICAgICA/ICdyZWFkb25seSBpbWFnZVRhZz86IHN0cmluZzsgLy8gZXh0ZXJuYWxseS1idWlsdCBpbWFnZSB0YWcgdG8gZGVwbG95J1xuICAgICAgICA6IFwicmVhZG9ubHkgaW1hZ2VEaXJlY3Rvcnk6IHN0cmluZzsgLy8gcGF0aCB0byBhIERvY2tlcmZpbGUgYnVpbHQgZnJvbSB0aGlzIHByb2plY3QncyBzb3VyY2VcIixcbiAgICApO1xuICAgIHNyYy5jbG9zZSgnfScpO1xuICAgIHNyYy5saW5lKCk7XG4gICAgc3JjLm9wZW4oXG4gICAgICAnZXhwb3J0IGNsYXNzIEVjckVjc1NlcnZpY2UgZXh0ZW5kcyBDb25zdHJ1Y3QgeycsXG4gICAgKTtcbiAgICBzcmMubGluZSgncHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeTsnKTtcbiAgICBzcmMubGluZSgncHVibGljIHJlYWRvbmx5IGNsdXN0ZXI6IGVjcy5DbHVzdGVyOycpO1xuICAgIHNyYy5saW5lKCk7XG4gICAgc3JjLm9wZW4oJ2NvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFY3JFY3NTZXJ2aWNlUHJvcHMpIHsnKTtcbiAgICBzcmMubGluZSgnc3VwZXIoc2NvcGUsIGlkKTsnKTtcbiAgICBzcmMubGluZSgpO1xuICAgIHNyYy5saW5lKFxuICAgICAgZXh0ZXJuYWxJbWFnZVNvdXJjZVxuICAgICAgICA/ICd0aGlzLnJlcG9zaXRvcnkgPSBlY3IuUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgXCJSZXBvc2l0b3J5XCIsIGlkKTsnXG4gICAgICAgIDogJ3RoaXMucmVwb3NpdG9yeSA9IG5ldyBlY3IuUmVwb3NpdG9yeSh0aGlzLCBcIlJlcG9zaXRvcnlcIik7JyxcbiAgICApO1xuICAgIHNyYy5saW5lKCd0aGlzLmNsdXN0ZXIgPSBuZXcgZWNzLkNsdXN0ZXIodGhpcywgXCJDbHVzdGVyXCIpOycpO1xuICAgIHNyYy5saW5lKCcvLyBUT0RPOiB3aXJlIHVwIGEgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uL0ZhcmdhdGVTZXJ2aWNlIHVzaW5nIHRoaXMucmVwb3NpdG9yeScpO1xuICAgIHNyYy5jbG9zZSgnfScpO1xuICAgIHNyYy5jbG9zZSgnfScpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { Component } from 'projen';
2
+ import type { Project } from 'projen';
3
+ import { EdgeResource } from '../options';
4
+ /**
5
+ * Construct helpers for CloudFront/Route53/API Gateway/Cognito/SQS, scoped
6
+ * to whichever `edgeResources` the consuming project type opts into.
7
+ */
8
+ export declare class EdgeNetworkingConstructs extends Component {
9
+ constructor(project: Project, resources: EdgeResource[]);
10
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EdgeNetworkingConstructs = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ const IMPORTS = {
7
+ cloudfront: 'import * as cloudfront from "aws-cdk-lib/aws-cloudfront";',
8
+ route53: 'import * as route53 from "aws-cdk-lib/aws-route53";',
9
+ apigateway: 'import * as apigateway from "aws-cdk-lib/aws-apigateway";',
10
+ cognito: 'import * as cognito from "aws-cdk-lib/aws-cognito";',
11
+ sqs: 'import * as sqs from "aws-cdk-lib/aws-sqs";',
12
+ };
13
+ const HELPERS = {
14
+ cloudfront: [
15
+ 'export function addDistribution(scope: Construct, id: string, props: cloudfront.DistributionProps) {',
16
+ ' return new cloudfront.Distribution(scope, id, props);',
17
+ '}',
18
+ ],
19
+ route53: [
20
+ 'export function importHostedZone(scope: Construct, id: string, zoneName: string) {',
21
+ ' return route53.HostedZone.fromLookup(scope, id, { domainName: zoneName });',
22
+ '}',
23
+ ],
24
+ apigateway: [
25
+ 'export function addRestApi(scope: Construct, id: string, props?: apigateway.RestApiProps) {',
26
+ ' return new apigateway.RestApi(scope, id, props);',
27
+ '}',
28
+ ],
29
+ cognito: [
30
+ 'export function addUserPool(scope: Construct, id: string, props?: cognito.UserPoolProps) {',
31
+ ' return new cognito.UserPool(scope, id, props);',
32
+ '}',
33
+ ],
34
+ sqs: [
35
+ 'export function addQueue(scope: Construct, id: string, props?: sqs.QueueProps) {',
36
+ ' return new sqs.Queue(scope, id, props);',
37
+ '}',
38
+ ],
39
+ };
40
+ /**
41
+ * Construct helpers for CloudFront/Route53/API Gateway/Cognito/SQS, scoped
42
+ * to whichever `edgeResources` the consuming project type opts into.
43
+ */
44
+ class EdgeNetworkingConstructs extends projen_1.Component {
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.0" };
46
+ constructor(project, resources) {
47
+ super(project, 'EdgeNetworkingConstructs');
48
+ if (resources.length === 0) {
49
+ return;
50
+ }
51
+ const src = new projen_1.SourceCode(project, 'src/constructs/edge-networking.ts');
52
+ src.line('import { Construct } from "constructs";');
53
+ for (const resource of resources) {
54
+ src.line(IMPORTS[resource]);
55
+ }
56
+ src.line();
57
+ for (const resource of resources) {
58
+ for (const line of HELPERS[resource]) {
59
+ src.line(line);
60
+ }
61
+ src.line();
62
+ }
63
+ }
64
+ }
65
+ exports.EdgeNetworkingConstructs = EdgeNetworkingConstructs;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1uZXR3b3JraW5nLWNvbnN0cnVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2RrL2NvbXBvbmVudHMvZWRnZS1uZXR3b3JraW5nLWNvbnN0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUErQztBQUkvQyxNQUFNLE9BQU8sR0FBaUM7SUFDNUMsVUFBVSxFQUFFLDJEQUEyRDtJQUN2RSxPQUFPLEVBQUUscURBQXFEO0lBQzlELFVBQVUsRUFBRSwyREFBMkQ7SUFDdkUsT0FBTyxFQUFFLHFEQUFxRDtJQUM5RCxHQUFHLEVBQUUsNkNBQTZDO0NBQ25ELENBQUM7QUFFRixNQUFNLE9BQU8sR0FBbUM7SUFDOUMsVUFBVSxFQUFFO1FBQ1Ysc0dBQXNHO1FBQ3RHLHlEQUF5RDtRQUN6RCxHQUFHO0tBQ0o7SUFDRCxPQUFPLEVBQUU7UUFDUCxvRkFBb0Y7UUFDcEYsOEVBQThFO1FBQzlFLEdBQUc7S0FDSjtJQUNELFVBQVUsRUFBRTtRQUNWLDZGQUE2RjtRQUM3RixvREFBb0Q7UUFDcEQsR0FBRztLQUNKO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsNEZBQTRGO1FBQzVGLGtEQUFrRDtRQUNsRCxHQUFHO0tBQ0o7SUFDRCxHQUFHLEVBQUU7UUFDSCxrRkFBa0Y7UUFDbEYsMkNBQTJDO1FBQzNDLEdBQUc7S0FDSjtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFhLHdCQUF5QixTQUFRLGtCQUFTOztJQUNyRCxZQUFZLE9BQWdCLEVBQUUsU0FBeUI7UUFDckQsS0FBSyxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBRTNDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUN6RSxHQUFHLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDcEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDOztBQXBCSCw0REFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNvdXJjZUNvZGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEVkZ2VSZXNvdXJjZSB9IGZyb20gJy4uL29wdGlvbnMnO1xuXG5jb25zdCBJTVBPUlRTOiBSZWNvcmQ8RWRnZVJlc291cmNlLCBzdHJpbmc+ID0ge1xuICBjbG91ZGZyb250OiAnaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjsnLFxuICByb3V0ZTUzOiAnaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjsnLFxuICBhcGlnYXRld2F5OiAnaW1wb3J0ICogYXMgYXBpZ2F0ZXdheSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjsnLFxuICBjb2duaXRvOiAnaW1wb3J0ICogYXMgY29nbml0byBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIjsnLFxuICBzcXM6ICdpbXBvcnQgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIjsnLFxufTtcblxuY29uc3QgSEVMUEVSUzogUmVjb3JkPEVkZ2VSZXNvdXJjZSwgc3RyaW5nW10+ID0ge1xuICBjbG91ZGZyb250OiBbXG4gICAgJ2V4cG9ydCBmdW5jdGlvbiBhZGREaXN0cmlidXRpb24oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uUHJvcHMpIHsnLFxuICAgICcgIHJldHVybiBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24oc2NvcGUsIGlkLCBwcm9wcyk7JyxcbiAgICAnfScsXG4gIF0sXG4gIHJvdXRlNTM6IFtcbiAgICAnZXhwb3J0IGZ1bmN0aW9uIGltcG9ydEhvc3RlZFpvbmUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgem9uZU5hbWU6IHN0cmluZykgeycsXG4gICAgJyAgcmV0dXJuIHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKHNjb3BlLCBpZCwgeyBkb21haW5OYW1lOiB6b25lTmFtZSB9KTsnLFxuICAgICd9JyxcbiAgXSxcbiAgYXBpZ2F0ZXdheTogW1xuICAgICdleHBvcnQgZnVuY3Rpb24gYWRkUmVzdEFwaShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IGFwaWdhdGV3YXkuUmVzdEFwaVByb3BzKSB7JyxcbiAgICAnICByZXR1cm4gbmV3IGFwaWdhdGV3YXkuUmVzdEFwaShzY29wZSwgaWQsIHByb3BzKTsnLFxuICAgICd9JyxcbiAgXSxcbiAgY29nbml0bzogW1xuICAgICdleHBvcnQgZnVuY3Rpb24gYWRkVXNlclBvb2woc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBjb2duaXRvLlVzZXJQb29sUHJvcHMpIHsnLFxuICAgICcgIHJldHVybiBuZXcgY29nbml0by5Vc2VyUG9vbChzY29wZSwgaWQsIHByb3BzKTsnLFxuICAgICd9JyxcbiAgXSxcbiAgc3FzOiBbXG4gICAgJ2V4cG9ydCBmdW5jdGlvbiBhZGRRdWV1ZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IHNxcy5RdWV1ZVByb3BzKSB7JyxcbiAgICAnICByZXR1cm4gbmV3IHNxcy5RdWV1ZShzY29wZSwgaWQsIHByb3BzKTsnLFxuICAgICd9JyxcbiAgXSxcbn07XG5cbi8qKlxuICogQ29uc3RydWN0IGhlbHBlcnMgZm9yIENsb3VkRnJvbnQvUm91dGU1My9BUEkgR2F0ZXdheS9Db2duaXRvL1NRUywgc2NvcGVkXG4gKiB0byB3aGljaGV2ZXIgYGVkZ2VSZXNvdXJjZXNgIHRoZSBjb25zdW1pbmcgcHJvamVjdCB0eXBlIG9wdHMgaW50by5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkZ2VOZXR3b3JraW5nQ29uc3RydWN0cyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIHJlc291cmNlczogRWRnZVJlc291cmNlW10pIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnRWRnZU5ldHdvcmtpbmdDb25zdHJ1Y3RzJyk7XG5cbiAgICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNyYyA9IG5ldyBTb3VyY2VDb2RlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9lZGdlLW5ldHdvcmtpbmcudHMnKTtcbiAgICBzcmMubGluZSgnaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjsnKTtcbiAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuICAgICAgc3JjLmxpbmUoSU1QT1JUU1tyZXNvdXJjZV0pO1xuICAgIH1cbiAgICBzcmMubGluZSgpO1xuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgSEVMUEVSU1tyZXNvdXJjZV0pIHtcbiAgICAgICAgc3JjLmxpbmUobGluZSk7XG4gICAgICB9XG4gICAgICBzcmMubGluZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Component, javascript } from 'projen';
2
+ import { DatabaseOptions } from './options';
3
+ /**
4
+ * DB provisioning construct + migration tooling wiring. The migration tool
5
+ * itself is left fully pluggable per the spec's open question - if
6
+ * `migrationTool` is provided it's added as a dev dependency and left for
7
+ * the consuming team to wire up; no opinionated default is imposed.
8
+ */
9
+ export declare class DatabaseComponent extends Component {
10
+ constructor(project: javascript.NodeProject, options?: DatabaseOptions);
11
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseComponent = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ /**
7
+ * DB provisioning construct + migration tooling wiring. The migration tool
8
+ * itself is left fully pluggable per the spec's open question - if
9
+ * `migrationTool` is provided it's added as a dev dependency and left for
10
+ * the consuming team to wire up; no opinionated default is imposed.
11
+ */
12
+ class DatabaseComponent extends projen_1.Component {
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.0" };
14
+ constructor(project, options = {}) {
15
+ super(project, 'DatabaseComponent');
16
+ const engine = options.engine ?? 'postgres';
17
+ if (options.migrationTool) {
18
+ project.addDevDeps(options.migrationTool);
19
+ }
20
+ const src = new projen_1.SourceCode(project, 'src/constructs/database.ts');
21
+ src.line('import { Construct } from "constructs";');
22
+ if (engine === 'dynamodb') {
23
+ src.line('import * as dynamodb from "aws-cdk-lib/aws-dynamodb";');
24
+ }
25
+ else {
26
+ src.line('import * as rds from "aws-cdk-lib/aws-rds";');
27
+ }
28
+ src.line();
29
+ src.open('export class Database extends Construct {');
30
+ src.line(engine === 'dynamodb'
31
+ ? 'public readonly table!: dynamodb.Table;'
32
+ : 'public readonly instance!: rds.DatabaseInstance;');
33
+ src.line();
34
+ src.open('constructor(scope: Construct, id: string) {');
35
+ src.line('super(scope, id);');
36
+ src.line(`// TODO: provision a ${engine} ${engine === 'dynamodb' ? 'table' : 'instance'}${options.migrationTool
37
+ ? ` and wire up migrations via ${options.migrationTool}`
38
+ : ''}`);
39
+ src.close('}');
40
+ src.close('}');
41
+ }
42
+ }
43
+ exports.DatabaseComponent = DatabaseComponent;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9kYXRhYmFzZS1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUEyRDtBQUczRDs7Ozs7R0FLRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsa0JBQVM7O0lBQzlDLFlBQVksT0FBK0IsRUFBRSxVQUEyQixFQUFFO1FBQ3hFLEtBQUssQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQztRQUU1QyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNwRCxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUN0RCxHQUFHLENBQUMsSUFBSSxDQUNOLE1BQU0sS0FBSyxVQUFVO1lBQ25CLENBQUMsQ0FBQyx5Q0FBeUM7WUFDM0MsQ0FBQyxDQUFDLGtEQUFrRCxDQUN2RCxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5QixHQUFHLENBQUMsSUFBSSxDQUNOLHdCQUF3QixNQUFNLElBQzVCLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFDcEMsR0FDRSxPQUFPLENBQUMsYUFBYTtZQUNuQixDQUFDLENBQUMsK0JBQStCLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDeEQsQ0FBQyxDQUFDLEVBQ04sRUFBRSxDQUNILENBQUM7UUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDOztBQXRDSCw4Q0F1Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNvdXJjZUNvZGUsIGphdmFzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgRGF0YWJhc2VPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcblxuLyoqXG4gKiBEQiBwcm92aXNpb25pbmcgY29uc3RydWN0ICsgbWlncmF0aW9uIHRvb2xpbmcgd2lyaW5nLiBUaGUgbWlncmF0aW9uIHRvb2xcbiAqIGl0c2VsZiBpcyBsZWZ0IGZ1bGx5IHBsdWdnYWJsZSBwZXIgdGhlIHNwZWMncyBvcGVuIHF1ZXN0aW9uIC0gaWZcbiAqIGBtaWdyYXRpb25Ub29sYCBpcyBwcm92aWRlZCBpdCdzIGFkZGVkIGFzIGEgZGV2IGRlcGVuZGVuY3kgYW5kIGxlZnQgZm9yXG4gKiB0aGUgY29uc3VtaW5nIHRlYW0gdG8gd2lyZSB1cDsgbm8gb3BpbmlvbmF0ZWQgZGVmYXVsdCBpcyBpbXBvc2VkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LCBvcHRpb25zOiBEYXRhYmFzZU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QsICdEYXRhYmFzZUNvbXBvbmVudCcpO1xuXG4gICAgY29uc3QgZW5naW5lID0gb3B0aW9ucy5lbmdpbmUgPz8gJ3Bvc3RncmVzJztcblxuICAgIGlmIChvcHRpb25zLm1pZ3JhdGlvblRvb2wpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhvcHRpb25zLm1pZ3JhdGlvblRvb2wpO1xuICAgIH1cblxuICAgIGNvbnN0IHNyYyA9IG5ldyBTb3VyY2VDb2RlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9kYXRhYmFzZS50cycpO1xuICAgIHNyYy5saW5lKCdpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiOycpO1xuICAgIGlmIChlbmdpbmUgPT09ICdkeW5hbW9kYicpIHtcbiAgICAgIHNyYy5saW5lKCdpbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNyYy5saW5lKCdpbXBvcnQgKiBhcyByZHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjsnKTtcbiAgICB9XG4gICAgc3JjLmxpbmUoKTtcbiAgICBzcmMub3BlbignZXhwb3J0IGNsYXNzIERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IHsnKTtcbiAgICBzcmMubGluZShcbiAgICAgIGVuZ2luZSA9PT0gJ2R5bmFtb2RiJ1xuICAgICAgICA/ICdwdWJsaWMgcmVhZG9ubHkgdGFibGUhOiBkeW5hbW9kYi5UYWJsZTsnXG4gICAgICAgIDogJ3B1YmxpYyByZWFkb25seSBpbnN0YW5jZSE6IHJkcy5EYXRhYmFzZUluc3RhbmNlOycsXG4gICAgKTtcbiAgICBzcmMubGluZSgpO1xuICAgIHNyYy5vcGVuKCdjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7Jyk7XG4gICAgc3JjLmxpbmUoJ3N1cGVyKHNjb3BlLCBpZCk7Jyk7XG4gICAgc3JjLmxpbmUoXG4gICAgICBgLy8gVE9ETzogcHJvdmlzaW9uIGEgJHtlbmdpbmV9ICR7XG4gICAgICAgIGVuZ2luZSA9PT0gJ2R5bmFtb2RiJyA/ICd0YWJsZScgOiAnaW5zdGFuY2UnXG4gICAgICB9JHtcbiAgICAgICAgb3B0aW9ucy5taWdyYXRpb25Ub29sXG4gICAgICAgICAgPyBgIGFuZCB3aXJlIHVwIG1pZ3JhdGlvbnMgdmlhICR7b3B0aW9ucy5taWdyYXRpb25Ub29sfWBcbiAgICAgICAgICA6ICcnXG4gICAgICB9YCxcbiAgICApO1xuICAgIHNyYy5jbG9zZSgnfScpO1xuICAgIHNyYy5jbG9zZSgnfScpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { EnvironmentOptions } from '../common/environment-options';
2
+ export type EdgeResource = 'cloudfront' | 'route53' | 'apigateway' | 'cognito' | 'sqs';
3
+ export interface EcrEcsOptions {
4
+ /** @default false */
5
+ readonly enabled?: boolean;
6
+ /**
7
+ * Whether the ECS service stands up an externally-built image (infra-only)
8
+ * rather than one built from this project's own source.
9
+ *
10
+ * @default true
11
+ */
12
+ readonly externalImageSource?: boolean;
13
+ }
14
+ export interface CommonCdkOptions {
15
+ readonly name: string;
16
+ /** @default "2.189.1" */
17
+ readonly cdkVersion?: string;
18
+ /** @default "PROJEN_GITHUB_TOKEN" */
19
+ readonly gheTokenSecret?: string;
20
+ /** GitHub secret holding a Slack webhook URL for deploy notifications. */
21
+ readonly slackWebhookSecret?: string;
22
+ }
23
+ export interface CdkInfraProjectOptions extends CommonCdkOptions {
24
+ /** Deploy targets for the manual-dispatch deploy workflow, e.g. ["dev", "stage", "prod"]. */
25
+ readonly environments: (string | EnvironmentOptions)[];
26
+ readonly ecrEcs?: EcrEcsOptions;
27
+ readonly edgeResources?: EdgeResource[];
28
+ }
29
+ export interface DatabaseOptions {
30
+ /** @default "postgres" */
31
+ readonly engine?: 'postgres' | 'mysql' | 'dynamodb';
32
+ /** Migration tool to wire up, e.g. "flyway", "liquibase", "prisma". Left pluggable - no default. */
33
+ readonly migrationTool?: string;
34
+ }
35
+ export interface CdkAppProjectOptions extends CdkInfraProjectOptions {
36
+ readonly database?: DatabaseOptions;
37
+ /** @default "src/app.ts" */
38
+ readonly appEntryPoint?: string;
39
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGsvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi4vY29tbW9uL2Vudmlyb25tZW50LW9wdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBFZGdlUmVzb3VyY2UgPVxuICB8ICdjbG91ZGZyb250J1xuICB8ICdyb3V0ZTUzJ1xuICB8ICdhcGlnYXRld2F5J1xuICB8ICdjb2duaXRvJ1xuICB8ICdzcXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVjckVjc09wdGlvbnMge1xuICAvKiogQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIEVDUyBzZXJ2aWNlIHN0YW5kcyB1cCBhbiBleHRlcm5hbGx5LWJ1aWx0IGltYWdlIChpbmZyYS1vbmx5KVxuICAgKiByYXRoZXIgdGhhbiBvbmUgYnVpbHQgZnJvbSB0aGlzIHByb2plY3QncyBvd24gc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbEltYWdlU291cmNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25DZGtPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIjIuMTg5LjFcIiAqL1xuICByZWFkb25seSBjZGtWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIiAqL1xuICByZWFkb25seSBnaGVUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKiogR2l0SHViIHNlY3JldCBob2xkaW5nIGEgU2xhY2sgd2ViaG9vayBVUkwgZm9yIGRlcGxveSBub3RpZmljYXRpb25zLiAqL1xuICByZWFkb25seSBzbGFja1dlYmhvb2tTZWNyZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrSW5mcmFQcm9qZWN0T3B0aW9ucyBleHRlbmRzIENvbW1vbkNka09wdGlvbnMge1xuICAvKiogRGVwbG95IHRhcmdldHMgZm9yIHRoZSBtYW51YWwtZGlzcGF0Y2ggZGVwbG95IHdvcmtmbG93LCBlLmcuIFtcImRldlwiLCBcInN0YWdlXCIsIFwicHJvZFwiXS4gKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRzOiAoc3RyaW5nIHwgRW52aXJvbm1lbnRPcHRpb25zKVtdO1xuXG4gIHJlYWRvbmx5IGVjckVjcz86IEVjckVjc09wdGlvbnM7XG5cbiAgcmVhZG9ubHkgZWRnZVJlc291cmNlcz86IEVkZ2VSZXNvdXJjZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlT3B0aW9ucyB7XG4gIC8qKiBAZGVmYXVsdCBcInBvc3RncmVzXCIgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogJ3Bvc3RncmVzJyB8ICdteXNxbCcgfCAnZHluYW1vZGInO1xuXG4gIC8qKiBNaWdyYXRpb24gdG9vbCB0byB3aXJlIHVwLCBlLmcuIFwiZmx5d2F5XCIsIFwibGlxdWliYXNlXCIsIFwicHJpc21hXCIuIExlZnQgcGx1Z2dhYmxlIC0gbm8gZGVmYXVsdC4gKi9cbiAgcmVhZG9ubHkgbWlncmF0aW9uVG9vbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtBcHBQcm9qZWN0T3B0aW9ucyBleHRlbmRzIENka0luZnJhUHJvamVjdE9wdGlvbnMge1xuICByZWFkb25seSBkYXRhYmFzZT86IERhdGFiYXNlT3B0aW9ucztcblxuICAvKiogQGRlZmF1bHQgXCJzcmMvYXBwLnRzXCIgKi9cbiAgcmVhZG9ubHkgYXBwRW50cnlQb2ludD86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default GitHub secret name used for projen's self-mutation/automation token,
3
+ * unless a project overrides it via `gheTokenSecret`.
4
+ */
5
+ export declare const DEFAULT_GHE_TOKEN_SECRET = "PROJEN_GITHUB_TOKEN";
6
+ /** Cron schedule used by nightly dependency-upgrade workflows (03:00 UTC). */
7
+ export declare const NIGHTLY_UPGRADE_SCHEDULE = "0 3 * * *";
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NIGHTLY_UPGRADE_SCHEDULE = exports.DEFAULT_GHE_TOKEN_SECRET = void 0;
4
+ /**
5
+ * Default GitHub secret name used for projen's self-mutation/automation token,
6
+ * unless a project overrides it via `gheTokenSecret`.
7
+ */
8
+ exports.DEFAULT_GHE_TOKEN_SECRET = 'PROJEN_GITHUB_TOKEN';
9
+ /** Cron schedule used by nightly dependency-upgrade workflows (03:00 UTC). */
10
+ exports.NIGHTLY_UPGRADE_SCHEDULE = '0 3 * * *';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ1UsUUFBQSx3QkFBd0IsR0FBRyxxQkFBcUIsQ0FBQztBQUU5RCw4RUFBOEU7QUFDakUsUUFBQSx3QkFBd0IsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmF1bHQgR2l0SHViIHNlY3JldCBuYW1lIHVzZWQgZm9yIHByb2plbidzIHNlbGYtbXV0YXRpb24vYXV0b21hdGlvbiB0b2tlbixcbiAqIHVubGVzcyBhIHByb2plY3Qgb3ZlcnJpZGVzIGl0IHZpYSBgZ2hlVG9rZW5TZWNyZXRgLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVUID0gJ1BST0pFTl9HSVRIVUJfVE9LRU4nO1xuXG4vKiogQ3JvbiBzY2hlZHVsZSB1c2VkIGJ5IG5pZ2h0bHkgZGVwZW5kZW5jeS11cGdyYWRlIHdvcmtmbG93cyAoMDM6MDAgVVRDKS4gKi9cbmV4cG9ydCBjb25zdCBOSUdIVExZX1VQR1JBREVfU0NIRURVTEUgPSAnMCAzICogKiAqJztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { github } from 'projen';
2
+ /**
3
+ * Steps that re-run projen and fail the job if the generated output no
4
+ * longer matches what's committed - i.e. someone hand-edited a projen
5
+ * managed file (package.json/pom.xml/.github/workflows/*.yml/...) without
6
+ * going through .projenrc.
7
+ */
8
+ export declare function driftCheckSteps(projenCommand?: string): github.workflows.JobStep[];
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.driftCheckSteps = driftCheckSteps;
4
+ /**
5
+ * Steps that re-run projen and fail the job if the generated output no
6
+ * longer matches what's committed - i.e. someone hand-edited a projen
7
+ * managed file (package.json/pom.xml/.github/workflows/*.yml/...) without
8
+ * going through .projenrc.
9
+ */
10
+ function driftCheckSteps(projenCommand = 'npx projen') {
11
+ return [
12
+ {
13
+ name: 'Check for projen drift',
14
+ run: `${projenCommand}\ngit diff --exit-code`,
15
+ },
16
+ ];
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL2RyaWZ0LWNoZWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsMENBU0M7QUFmRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsYUFBYSxHQUFHLFlBQVk7SUFFNUIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixHQUFHLEVBQUUsR0FBRyxhQUFhLHdCQUF3QjtTQUM5QztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcblxuLyoqXG4gKiBTdGVwcyB0aGF0IHJlLXJ1biBwcm9qZW4gYW5kIGZhaWwgdGhlIGpvYiBpZiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBub1xuICogbG9uZ2VyIG1hdGNoZXMgd2hhdCdzIGNvbW1pdHRlZCAtIGkuZS4gc29tZW9uZSBoYW5kLWVkaXRlZCBhIHByb2plblxuICogbWFuYWdlZCBmaWxlIChwYWNrYWdlLmpzb24vcG9tLnhtbC8uZ2l0aHViL3dvcmtmbG93cy8qLnltbC8uLi4pIHdpdGhvdXRcbiAqIGdvaW5nIHRocm91Z2ggLnByb2plbnJjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJpZnRDaGVja1N0ZXBzKFxuICBwcm9qZW5Db21tYW5kID0gJ25weCBwcm9qZW4nLFxuKTogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDaGVjayBmb3IgcHJvamVuIGRyaWZ0JyxcbiAgICAgIHJ1bjogYCR7cHJvamVuQ29tbWFuZH1cXG5naXQgZGlmZiAtLWV4aXQtY29kZWAsXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A single named deployment target used by manual-dispatch deploy workflows.
3
+ */
4
+ export interface EnvironmentOptions {
5
+ /** Environment name, e.g. "dev", "stage", "prod". */
6
+ readonly name: string;
7
+ /** AWS account id to deploy into, if relevant to the deploy steps used. */
8
+ readonly accountId?: string;
9
+ /** AWS region to deploy into, if relevant to the deploy steps used. */
10
+ readonly region?: string;
11
+ /**
12
+ * Whether this environment requires a GitHub Environment approval gate
13
+ * before the deploy job is allowed to run.
14
+ *
15
+ * @default false
16
+ */
17
+ readonly requiresApproval?: boolean;
18
+ }
19
+ export declare function normalizeEnvironments(environments: (string | EnvironmentOptions)[]): EnvironmentOptions[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeEnvironments = normalizeEnvironments;
4
+ function normalizeEnvironments(environments) {
5
+ return environments.map((env) => typeof env === 'string' ? { name: env } : env);
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vZW52aXJvbm1lbnQtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNCQSxzREFNQztBQU5ELFNBQWdCLHFCQUFxQixDQUNuQyxZQUE2QztJQUU3QyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUM5QixPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQzlDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNpbmdsZSBuYW1lZCBkZXBsb3ltZW50IHRhcmdldCB1c2VkIGJ5IG1hbnVhbC1kaXNwYXRjaCBkZXBsb3kgd29ya2Zsb3dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50T3B0aW9ucyB7XG4gIC8qKiBFbnZpcm9ubWVudCBuYW1lLCBlLmcuIFwiZGV2XCIsIFwic3RhZ2VcIiwgXCJwcm9kXCIuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQVdTIGFjY291bnQgaWQgdG8gZGVwbG95IGludG8sIGlmIHJlbGV2YW50IHRvIHRoZSBkZXBsb3kgc3RlcHMgdXNlZC4gKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKiBBV1MgcmVnaW9uIHRvIGRlcGxveSBpbnRvLCBpZiByZWxldmFudCB0byB0aGUgZGVwbG95IHN0ZXBzIHVzZWQuICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGVudmlyb25tZW50IHJlcXVpcmVzIGEgR2l0SHViIEVudmlyb25tZW50IGFwcHJvdmFsIGdhdGVcbiAgICogYmVmb3JlIHRoZSBkZXBsb3kgam9iIGlzIGFsbG93ZWQgdG8gcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNBcHByb3ZhbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFbnZpcm9ubWVudHMoXG4gIGVudmlyb25tZW50czogKHN0cmluZyB8IEVudmlyb25tZW50T3B0aW9ucylbXSxcbik6IEVudmlyb25tZW50T3B0aW9uc1tdIHtcbiAgcmV0dXJuIGVudmlyb25tZW50cy5tYXAoKGVudikgPT5cbiAgICB0eXBlb2YgZW52ID09PSAnc3RyaW5nJyA/IHsgbmFtZTogZW52IH0gOiBlbnYsXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Component, github } from 'projen';
2
+ import { EnvironmentOptions } from './environment-options';
3
+ /**
4
+ * Shared, environment-parameterized manual-dispatch deploy workflow.
5
+ *
6
+ * This is the one "trigger a deploy" contract used by both the CDK project
7
+ * types (deploying their own stacks) and the Java `CdkDeployHook` component
8
+ * (dispatching a deploy in a companion CDK repo) - see the "Open Questions"
9
+ * sections of the two specs.
10
+ *
11
+ * @internal - not part of the jsii-exported API (its `deploySteps` callback
12
+ * isn't representable across jsii languages); consumed directly by other
13
+ * TypeScript source in this package.
14
+ */
15
+ export interface ManualDeployWorkflowOptions {
16
+ /** Deploy targets exposed as the `environment` workflow_dispatch choice. */
17
+ readonly environments: (string | EnvironmentOptions)[];
18
+ /** @default "deploy" */
19
+ readonly workflowName?: string;
20
+ /**
21
+ * The steps that actually perform the deploy for a given environment.
22
+ * Defaults to a placeholder `echo` step - project types are expected to
23
+ * override this with something real (e.g. `cdk deploy`, or a
24
+ * `repository_dispatch` to a companion infra repo).
25
+ */
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
+ }
30
+ /** @internal */
31
+ export declare class ManualDeployWorkflow extends Component {
32
+ readonly workflow: github.GithubWorkflow;
33
+ constructor(scope: github.GitHubProject, options: ManualDeployWorkflowOptions);
34
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManualDeployWorkflow = void 0;
4
+ const projen_1 = require("projen");
5
+ const environment_options_1 = require("./environment-options");
6
+ /** @internal */
7
+ class ManualDeployWorkflow extends projen_1.Component {
8
+ workflow;
9
+ constructor(scope, options) {
10
+ super(scope, 'ManualDeployWorkflow');
11
+ const environments = (0, environment_options_1.normalizeEnvironments)(options.environments);
12
+ const gh = scope.github;
13
+ if (!gh) {
14
+ throw new Error('ManualDeployWorkflow requires GitHub integration to be enabled');
15
+ }
16
+ const workflowName = options.workflowName ?? 'deploy';
17
+ const deploySteps = options.deploySteps ??
18
+ ((env) => [
19
+ {
20
+ name: `Deploy ${env.name}`,
21
+ run: `echo "TODO: implement deploy steps for environment '${env.name}'"`,
22
+ },
23
+ ]);
24
+ this.workflow = new projen_1.github.GithubWorkflow(gh, workflowName);
25
+ this.workflow.on({
26
+ workflowDispatch: {
27
+ inputs: {
28
+ environment: {
29
+ description: 'Environment to deploy',
30
+ required: true,
31
+ type: 'choice',
32
+ options: environments.map((e) => e.name),
33
+ },
34
+ git_sha: {
35
+ description: 'Optional commit SHA to deploy (defaults to the default branch)',
36
+ required: false,
37
+ },
38
+ },
39
+ },
40
+ });
41
+ for (const env of environments) {
42
+ const steps = [
43
+ {
44
+ name: 'Checkout',
45
+ uses: 'actions/checkout@v4',
46
+ with: {
47
+ ref: '${{ github.event.inputs.git_sha || github.sha }}',
48
+ },
49
+ },
50
+ ...deploySteps(env),
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
+ this.workflow.addJob(`deploy-${env.name}`, {
64
+ name: `Deploy (${env.name})`,
65
+ if: `github.event.inputs.environment == '${env.name}'`,
66
+ runsOn: ['ubuntu-latest'],
67
+ environment: env.requiresApproval ? env.name : undefined,
68
+ permissions: {
69
+ idToken: projen_1.github.workflows.JobPermission.WRITE,
70
+ contents: projen_1.github.workflows.JobPermission.READ,
71
+ },
72
+ steps,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ exports.ManualDeployWorkflow = ManualDeployWorkflow;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFudWFsLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vbWFudWFsLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBMkM7QUFDM0MsK0RBRytCO0FBbUMvQixnQkFBZ0I7QUFDaEIsTUFBYSxvQkFBcUIsU0FBUSxrQkFBUztJQUNqQyxRQUFRLENBQXdCO0lBRWhELFlBQ0UsS0FBMkIsRUFDM0IsT0FBb0M7UUFFcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sWUFBWSxHQUFHLElBQUEsMkNBQXFCLEVBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYixnRUFBZ0UsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FDZixPQUFPLENBQUMsV0FBVztZQUNuQixDQUFDLENBQUMsR0FBdUIsRUFBOEIsRUFBRSxDQUFDO2dCQUN4RDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUMxQixHQUFHLEVBQUUsdURBQXVELEdBQUcsQ0FBQyxJQUFJLElBQUk7aUJBQ3pFO2FBQ0YsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRTtvQkFDTixXQUFXLEVBQUU7d0JBQ1gsV0FBVyxFQUFFLHVCQUF1Qjt3QkFDcEMsUUFBUSxFQUFFLElBQUk7d0JBQ2QsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQ3pDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxXQUFXLEVBQ1QsZ0VBQWdFO3dCQUNsRSxRQUFRLEVBQUUsS0FBSztxQkFDaEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQStCO2dCQUN4QztvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLHFCQUFxQjtvQkFDM0IsSUFBSSxFQUFFO3dCQUNKLEdBQUcsRUFBRSxrREFBa0Q7cUJBQ3hEO2lCQUNGO2dCQUNELEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUNwQixDQUFDO1lBRUYsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxJQUFJLEVBQUUsY0FBYztvQkFDcEIsRUFBRSxFQUFFLFVBQVU7b0JBQ2QsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO29CQUM1QyxHQUFHLEVBQUU7d0JBQ0gsaUJBQWlCLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSztxQkFDbkU7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN6QyxJQUFJLEVBQUUsV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHO2dCQUM1QixFQUFFLEVBQUUsdUNBQXVDLEdBQUcsQ0FBQyxJQUFJLEdBQUc7Z0JBQ3RELE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDekIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDeEQsV0FBVyxFQUFFO29CQUNYLE9BQU8sRUFBRSxlQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLO29CQUM3QyxRQUFRLEVBQUUsZUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSTtpQkFDOUM7Z0JBQ0QsS0FBSzthQUNOLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuRkQsb0RBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRPcHRpb25zLFxuICBub3JtYWxpemVFbnZpcm9ubWVudHMsXG59IGZyb20gJy4vZW52aXJvbm1lbnQtb3B0aW9ucyc7XG5cbi8qKlxuICogU2hhcmVkLCBlbnZpcm9ubWVudC1wYXJhbWV0ZXJpemVkIG1hbnVhbC1kaXNwYXRjaCBkZXBsb3kgd29ya2Zsb3cuXG4gKlxuICogVGhpcyBpcyB0aGUgb25lIFwidHJpZ2dlciBhIGRlcGxveVwiIGNvbnRyYWN0IHVzZWQgYnkgYm90aCB0aGUgQ0RLIHByb2plY3RcbiAqIHR5cGVzIChkZXBsb3lpbmcgdGhlaXIgb3duIHN0YWNrcykgYW5kIHRoZSBKYXZhIGBDZGtEZXBsb3lIb29rYCBjb21wb25lbnRcbiAqIChkaXNwYXRjaGluZyBhIGRlcGxveSBpbiBhIGNvbXBhbmlvbiBDREsgcmVwbykgLSBzZWUgdGhlIFwiT3BlbiBRdWVzdGlvbnNcIlxuICogc2VjdGlvbnMgb2YgdGhlIHR3byBzcGVjcy5cbiAqXG4gKiBAaW50ZXJuYWwgLSBub3QgcGFydCBvZiB0aGUganNpaS1leHBvcnRlZCBBUEkgKGl0cyBgZGVwbG95U3RlcHNgIGNhbGxiYWNrXG4gKiBpc24ndCByZXByZXNlbnRhYmxlIGFjcm9zcyBqc2lpIGxhbmd1YWdlcyk7IGNvbnN1bWVkIGRpcmVjdGx5IGJ5IG90aGVyXG4gKiBUeXBlU2NyaXB0IHNvdXJjZSBpbiB0aGlzIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFudWFsRGVwbG95V29ya2Zsb3dPcHRpb25zIHtcbiAgLyoqIERlcGxveSB0YXJnZXRzIGV4cG9zZWQgYXMgdGhlIGBlbnZpcm9ubWVudGAgd29ya2Zsb3dfZGlzcGF0Y2ggY2hvaWNlLiAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudHM6IChzdHJpbmcgfCBFbnZpcm9ubWVudE9wdGlvbnMpW107XG5cbiAgLyoqIEBkZWZhdWx0IFwiZGVwbG95XCIgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcHMgdGhhdCBhY3R1YWxseSBwZXJmb3JtIHRoZSBkZXBsb3kgZm9yIGEgZ2l2ZW4gZW52aXJvbm1lbnQuXG4gICAqIERlZmF1bHRzIHRvIGEgcGxhY2Vob2xkZXIgYGVjaG9gIHN0ZXAgLSBwcm9qZWN0IHR5cGVzIGFyZSBleHBlY3RlZCB0b1xuICAgKiBvdmVycmlkZSB0aGlzIHdpdGggc29tZXRoaW5nIHJlYWwgKGUuZy4gYGNkayBkZXBsb3lgLCBvciBhXG4gICAqIGByZXBvc2l0b3J5X2Rpc3BhdGNoYCB0byBhIGNvbXBhbmlvbiBpbmZyYSByZXBvKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveVN0ZXBzPzogKFxuICAgIGVudjogRW52aXJvbm1lbnRPcHRpb25zLFxuICApID0+IGdpdGh1Yi53b3JrZmxvd3MuSm9iU3RlcFtdO1xuXG4gIC8qKiBHaXRIdWIgc2VjcmV0IGhvbGRpbmcgYSBTbGFjayB3ZWJob29rIFVSTCB1c2VkIHRvIG5vdGlmeSBvbiBkZXBsb3kuICovXG4gIHJlYWRvbmx5IHNsYWNrV2ViaG9va1NlY3JldD86IHN0cmluZztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNsYXNzIE1hbnVhbERlcGxveVdvcmtmbG93IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtmbG93OiBnaXRodWIuR2l0aHViV29ya2Zsb3c7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGdpdGh1Yi5HaXRIdWJQcm9qZWN0LFxuICAgIG9wdGlvbnM6IE1hbnVhbERlcGxveVdvcmtmbG93T3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsICdNYW51YWxEZXBsb3lXb3JrZmxvdycpO1xuXG4gICAgY29uc3QgZW52aXJvbm1lbnRzID0gbm9ybWFsaXplRW52aXJvbm1lbnRzKG9wdGlvbnMuZW52aXJvbm1lbnRzKTtcbiAgICBjb25zdCBnaCA9IHNjb3BlLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdNYW51YWxEZXBsb3lXb3JrZmxvdyByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IG9wdGlvbnMud29ya2Zsb3dOYW1lID8/ICdkZXBsb3knO1xuICAgIGNvbnN0IGRlcGxveVN0ZXBzID1cbiAgICAgIG9wdGlvbnMuZGVwbG95U3RlcHMgPz9cbiAgICAgICgoZW52OiBFbnZpcm9ubWVudE9wdGlvbnMpOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9PiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgRGVwbG95ICR7ZW52Lm5hbWV9YCxcbiAgICAgICAgICBydW46IGBlY2hvIFwiVE9ETzogaW1wbGVtZW50IGRlcGxveSBzdGVwcyBmb3IgZW52aXJvbm1lbnQgJyR7ZW52Lm5hbWV9J1wiYCxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBnaXRodWIuR2l0aHViV29ya2Zsb3coZ2gsIHdvcmtmbG93TmFtZSk7XG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Vudmlyb25tZW50IHRvIGRlcGxveScsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdjaG9pY2UnLFxuICAgICAgICAgICAgb3B0aW9uczogZW52aXJvbm1lbnRzLm1hcCgoZSkgPT4gZS5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdpdF9zaGE6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAnT3B0aW9uYWwgY29tbWl0IFNIQSB0byBkZXBsb3kgKGRlZmF1bHRzIHRvIHRoZSBkZWZhdWx0IGJyYW5jaCknLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnYgb2YgZW52aXJvbm1lbnRzKSB7XG4gICAgICBjb25zdCBzdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICByZWY6ICcke3sgZ2l0aHViLmV2ZW50LmlucHV0cy5naXRfc2hhIHx8IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRlcGxveVN0ZXBzKGVudiksXG4gICAgICBdO1xuXG4gICAgICBpZiAob3B0aW9ucy5zbGFja1dlYmhvb2tTZWNyZXQpIHtcbiAgICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ05vdGlmeSBTbGFjaycsXG4gICAgICAgICAgaWY6ICdhbHdheXMoKScsXG4gICAgICAgICAgdXNlczogJ3NsYWNrYXBpL3NsYWNrLWdpdGh1Yi1hY3Rpb25AdjInLFxuICAgICAgICAgIHdpdGg6IHsgJ3dlYmhvb2stdHlwZSc6ICdpbmNvbWluZy13ZWJob29rJyB9LFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgU0xBQ0tfV0VCSE9PS19VUkw6IGBcXCR7eyBzZWNyZXRzLiR7b3B0aW9ucy5zbGFja1dlYmhvb2tTZWNyZXR9IH19YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke2Vudi5uYW1lfWAsIHtcbiAgICAgICAgbmFtZTogYERlcGxveSAoJHtlbnYubmFtZX0pYCxcbiAgICAgICAgaWY6IGBnaXRodWIuZXZlbnQuaW5wdXRzLmVudmlyb25tZW50ID09ICcke2Vudi5uYW1lfSdgLFxuICAgICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgICBlbnZpcm9ubWVudDogZW52LnJlcXVpcmVzQXBwcm92YWwgPyBlbnYubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBpZFRva2VuOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { Component, Task, github } from 'projen';
2
+ /**
3
+ * Nightly cron workflow that opens a PR with dependency upgrades. Used by
4
+ * non-Node project types (Java); TypeScript/CDK project types instead get
5
+ * this for free from projen's built-in `depsUpgrade`.
6
+ */
7
+ export interface UpgradeWorkflowOptions {
8
+ /** The task that performs the upgrade (e.g. `mvn versions:use-latest-releases`). */
9
+ readonly task: Task;
10
+ /** @default "upgrade" */
11
+ readonly workflowName?: string;
12
+ /** @default NIGHTLY_UPGRADE_SCHEDULE (03:00 UTC) */
13
+ readonly schedule?: string;
14
+ }
15
+ export declare class UpgradeWorkflow extends Component {
16
+ readonly workflow: github.TaskWorkflow;
17
+ constructor(scope: github.GitHubProject, options: UpgradeWorkflowOptions);
18
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpgradeWorkflow = void 0;
4
+ const projen_1 = require("projen");
5
+ const constants_1 = require("./constants");
6
+ class UpgradeWorkflow extends projen_1.Component {
7
+ workflow;
8
+ constructor(scope, options) {
9
+ super(scope, 'UpgradeWorkflow');
10
+ const gh = scope.github;
11
+ if (!gh) {
12
+ throw new Error('UpgradeWorkflow requires GitHub integration to be enabled');
13
+ }
14
+ this.workflow = new projen_1.github.TaskWorkflow(gh, {
15
+ name: options.workflowName ?? 'upgrade',
16
+ jobId: 'upgrade',
17
+ task: options.task,
18
+ triggers: {
19
+ schedule: [{ cron: options.schedule ?? constants_1.NIGHTLY_UPGRADE_SCHEDULE }],
20
+ workflowDispatch: {},
21
+ },
22
+ permissions: { contents: projen_1.github.workflows.JobPermission.READ },
23
+ postBuildSteps: [
24
+ {
25
+ name: 'Create Pull Request',
26
+ uses: 'peter-evans/create-pull-request@v7',
27
+ with: {
28
+ 'commit-message': 'chore: upgrade dependencies',
29
+ 'branch': 'auto/upgrade-dependencies',
30
+ 'title': 'chore: upgrade dependencies',
31
+ 'labels': 'auto-approve,auto-merge',
32
+ },
33
+ },
34
+ ],
35
+ });
36
+ }
37
+ }
38
+ exports.UpgradeWorkflow = UpgradeWorkflow;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vdXBncmFkZS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFDakQsMkNBQXVEO0FBa0J2RCxNQUFhLGVBQWdCLFNBQVEsa0JBQVM7SUFDNUIsUUFBUSxDQUFzQjtJQUU5QyxZQUFZLEtBQTJCLEVBQUUsT0FBK0I7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksU0FBUztZQUN2QyxLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFO2dCQUNSLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksb0NBQXdCLEVBQUUsQ0FBQztnQkFDbEUsZ0JBQWdCLEVBQUUsRUFBRTthQUNyQjtZQUNELFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDOUQsY0FBYyxFQUFFO2dCQUNkO29CQUNFLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxvQ0FBb0M7b0JBQzFDLElBQUksRUFBRTt3QkFDSixnQkFBZ0IsRUFBRSw2QkFBNkI7d0JBQy9DLFFBQVEsRUFBRSwyQkFBMkI7d0JBQ3JDLE9BQU8sRUFBRSw2QkFBNkI7d0JBQ3RDLFFBQVEsRUFBRSx5QkFBeUI7cUJBQ3BDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFwQ0QsMENBb0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBUYXNrLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTklHSFRMWV9VUEdSQURFX1NDSEVEVUxFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIE5pZ2h0bHkgY3JvbiB3b3JrZmxvdyB0aGF0IG9wZW5zIGEgUFIgd2l0aCBkZXBlbmRlbmN5IHVwZ3JhZGVzLiBVc2VkIGJ5XG4gKiBub24tTm9kZSBwcm9qZWN0IHR5cGVzIChKYXZhKTsgVHlwZVNjcmlwdC9DREsgcHJvamVjdCB0eXBlcyBpbnN0ZWFkIGdldFxuICogdGhpcyBmb3IgZnJlZSBmcm9tIHByb2plbidzIGJ1aWx0LWluIGBkZXBzVXBncmFkZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZVdvcmtmbG93T3B0aW9ucyB7XG4gIC8qKiBUaGUgdGFzayB0aGF0IHBlcmZvcm1zIHRoZSB1cGdyYWRlIChlLmcuIGBtdm4gdmVyc2lvbnM6dXNlLWxhdGVzdC1yZWxlYXNlc2ApLiAqL1xuICByZWFkb25seSB0YXNrOiBUYXNrO1xuXG4gIC8qKiBAZGVmYXVsdCBcInVwZ3JhZGVcIiAqL1xuICByZWFkb25seSB3b3JrZmxvd05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IE5JR0hUTFlfVVBHUkFERV9TQ0hFRFVMRSAoMDM6MDAgVVRDKSAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFVwZ3JhZGVXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdzogZ2l0aHViLlRhc2tXb3JrZmxvdztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogZ2l0aHViLkdpdEh1YlByb2plY3QsIG9wdGlvbnM6IFVwZ3JhZGVXb3JrZmxvd09wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgJ1VwZ3JhZGVXb3JrZmxvdycpO1xuXG4gICAgY29uc3QgZ2ggPSBzY29wZS5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVXBncmFkZVdvcmtmbG93IHJlcXVpcmVzIEdpdEh1YiBpbnRlZ3JhdGlvbiB0byBiZSBlbmFibGVkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBnaXRodWIuVGFza1dvcmtmbG93KGdoLCB7XG4gICAgICBuYW1lOiBvcHRpb25zLndvcmtmbG93TmFtZSA/PyAndXBncmFkZScsXG4gICAgICBqb2JJZDogJ3VwZ3JhZGUnLFxuICAgICAgdGFzazogb3B0aW9ucy50YXNrLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgc2NoZWR1bGU6IFt7IGNyb246IG9wdGlvbnMuc2NoZWR1bGUgPz8gTklHSFRMWV9VUEdSQURFX1NDSEVEVUxFIH1dLFxuICAgICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ3JlYXRlIFB1bGwgUmVxdWVzdCcsXG4gICAgICAgICAgdXNlczogJ3BldGVyLWV2YW5zL2NyZWF0ZS1wdWxsLXJlcXVlc3RAdjcnLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdjb21taXQtbWVzc2FnZSc6ICdjaG9yZTogdXBncmFkZSBkZXBlbmRlbmNpZXMnLFxuICAgICAgICAgICAgJ2JyYW5jaCc6ICdhdXRvL3VwZ3JhZGUtZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAgICd0aXRsZSc6ICdjaG9yZTogdXBncmFkZSBkZXBlbmRlbmNpZXMnLFxuICAgICAgICAgICAgJ2xhYmVscyc6ICdhdXRvLWFwcHJvdmUsYXV0by1tZXJnZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==