UNPKG

aws-ddk-core

Version:

The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and modern data architecture on AWS.

93 lines 16.7 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CICDActions = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const codecommit = require("aws-cdk-lib/aws-codecommit"); const pipelines = require("aws-cdk-lib/pipelines"); const utils_1 = require("./utils"); class CICDActions { static getCodeCommitSourceAction(scope, props) { return pipelines.CodePipelineSource.codeCommit(codecommit.Repository.fromRepositoryName(scope, props.repositoryName, props.repositoryName), props.branch, props.props); } static getSynthAction(props) { var installCommands; installCommands = [`npm install -g aws-cdk@${props.cdkVersion ? props.cdkVersion : "latest"}`]; // if (all([codeArtifactRepository, codeArtifactDomain, codeArtifactDomainOwner])) { // if (!rolePolicyStatements) { // rolePolicyStatements = _get_codeartifact_read_policy_statements(partition, region, account, codeArtifactDomain, codeArtifactRepository); // } // install_commands.psuh(`aws codeartifact login --tool pip --repository ${codeArtifactRepository} --domain ${codeArtifactDomain} --domain-owner ${codeArtifactDomainOwner}`); // } if (props.additionalInstallCommands != undefined && props.additionalInstallCommands.length > 0) { installCommands = installCommands.concat(props.additionalInstallCommands); // will need to be replaced with `npm install aws-ddk-core@${version}` when available } return new pipelines.CodeBuildStep("Synth", { input: props.codePipelineSource, installCommands: installCommands, commands: ["cdk synth"], rolePolicyStatements: props.rolePolicyStatements, }); } static getCfnNagAction(fileSetProducer, stageName = "CFNNag", failBuild) { return new pipelines.ShellStep(stageName, { input: fileSetProducer, installCommands: ["gem install cfn-nag"], env: { FAIL_BUILD: failBuild ? "true" : "false", }, commands: [ 'cfn_nag_scan --input-path ./ --template-pattern ".*.template.json" && scan_result="SUCCESS" || echo scan_result="FAILED"', 'if [[ "$FAIL_BUILD" = "true" && "$scan_result" = "FAILED" ]]; then printf "\n\nFailing pipeline as possible insecure configurations were detected\n\n" && exit 1; fi', ], }); } static getBanditAction(codePipelineSource, stageName = "Bandit") { return new pipelines.ShellStep(stageName, { input: codePipelineSource, installCommands: ["pip install bandit"], commands: ["bandit -r -ll -ii ."], }); } static getTestsAction(fileSetProducer, commands = ["./test.sh"], installCommands = ["pip install -r requirements-dev.txt", "pip install -r requirements.txt"], stageName = "Tests") { return new pipelines.ShellStep(stageName, { input: fileSetProducer, installCommands: installCommands, commands: commands, }); } static getCodeArtifactPublishAction(partition, region, account, codeartifactRepository, codeartifactDomain, codeartifactDomainOwner, codePipelineSource, rolePolicyStatements = utils_1.getCodeArtifactPublishPolicyStatements(partition, region, account, codeartifactDomain, codeartifactRepository)) { var rolePolicyStatements = rolePolicyStatements ?? utils_1.getCodeArtifactPublishPolicyStatements(partition, region, account, codeartifactDomain, codeartifactRepository); return new pipelines.CodeBuildStep("BuildAndUploadArtifact", { input: codePipelineSource, buildEnvironment: { environmentVariables: { DOMAIN: { value: codeartifactDomain, }, OWNER: { value: codeartifactDomainOwner, }, REPOSITORY: { value: codeartifactRepository, }, }, }, installCommands: [ "pip install wheel twine", "pip install -U -r requirements.txt", "python setup.py bdist_wheel", "export VERSION=$(python setup.py --version)", "export PACKAGE=$(python setup.py --name)", "aws codeartifact login --tool twine --domain ${DOMAIN} --domain-owner ${OWNER} --repository ${REPOSITORY}", ], commands: ["twine upload --repository codeartifact dist/${PACKAGE}-${VERSION}-py3-none-any.whl"], rolePolicyStatements: rolePolicyStatements, }); } } exports.CICDActions = CICDActions; _a = JSII_RTTI_SYMBOL_1; CICDActions[_a] = { fqn: "aws-ddk-core.CICDActions", version: "1.4.1" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaWNkL2FjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBeUQ7QUFFekQsbURBQW1EO0FBRW5ELG1DQUFpRTtBQWlDakUsTUFBYSxXQUFXO0lBQ2YsTUFBTSxDQUFDLHlCQUF5QixDQUNyQyxLQUFnQixFQUNoQixLQUFrQztRQUVsQyxPQUFPLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQzVDLFVBQVUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUMzRixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxLQUFLLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQTBCO1FBQ3JELElBQUksZUFBZSxDQUFDO1FBQ3BCLGVBQWUsR0FBRyxDQUFDLDBCQUEwQixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRS9GLG9GQUFvRjtRQUNwRixpQ0FBaUM7UUFDakMsK0lBQStJO1FBQy9JLE1BQU07UUFFTixnTEFBZ0w7UUFDaEwsSUFBSTtRQUNKLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5RixlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLHFGQUFxRjtTQUNqSztRQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUMxQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtZQUMvQixlQUFlLEVBQUUsZUFBZTtZQUNoQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDdkIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtTQUNqRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FDM0IsZUFBMkMsRUFDM0MsWUFBb0IsUUFBUSxFQUM1QixTQUFtQjtRQUVuQixPQUFPLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDeEMsS0FBSyxFQUFFLGVBQWU7WUFDdEIsZUFBZSxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDeEMsR0FBRyxFQUFFO2dCQUNILFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzthQUN6QztZQUNELFFBQVEsRUFBRTtnQkFDUiwwSEFBMEg7Z0JBQzFILHNLQUFzSzthQUN2SztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUMzQixrQkFBZ0QsRUFDaEQsWUFBb0IsUUFBUTtRQUU1QixPQUFPLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDeEMsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixlQUFlLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUN2QyxRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FDMUIsZUFBMkMsRUFDM0MsV0FBcUIsQ0FBQyxXQUFXLENBQUMsRUFDbEMsa0JBQTRCLENBQUMscUNBQXFDLEVBQUUsaUNBQWlDLENBQUMsRUFDdEcsWUFBb0IsT0FBTztRQUUzQixPQUFPLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDeEMsS0FBSyxFQUFFLGVBQWU7WUFDdEIsZUFBZSxFQUFFLGVBQWU7WUFDaEMsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsU0FBaUIsRUFDakIsTUFBYyxFQUNkLE9BQWUsRUFDZixzQkFBOEIsRUFDOUIsa0JBQTBCLEVBQzFCLHVCQUErQixFQUMvQixrQkFBaUQsRUFDakQsdUJBQThDLDhDQUFzQyxDQUNsRixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsc0JBQXNCLENBQ3ZCO1FBRUQsSUFBSSxvQkFBb0IsR0FDdEIsb0JBQW9CO1lBQ3BCLDhDQUFzQyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFakgsT0FBTyxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixnQkFBZ0IsRUFBRTtnQkFDaEIsb0JBQW9CLEVBQUU7b0JBQ3BCLE1BQU0sRUFBRTt3QkFDTixLQUFLLEVBQUUsa0JBQWtCO3FCQUMxQjtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLHVCQUF1QjtxQkFDL0I7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLEtBQUssRUFBRSxzQkFBc0I7cUJBQzlCO2lCQUNGO2FBQ0Y7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YseUJBQXlCO2dCQUN6QixvQ0FBb0M7Z0JBQ3BDLDZCQUE2QjtnQkFDN0IsNkNBQTZDO2dCQUM3QywwQ0FBMEM7Z0JBQzFDLDJHQUEyRzthQUM1RztZQUNELFFBQVEsRUFBRSxDQUFDLG9GQUFvRixDQUFDO1lBQ2hHLG9CQUFvQixFQUFFLG9CQUFvQjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTFISCxrQ0EySEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb2RlY29tbWl0IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWNvbW1pdFwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGdldENvZGVBcnRpZmFjdFB1Ymxpc2hQb2xpY3lTdGF0ZW1lbnRzIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRTeW50aEFjdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgY29kZVBpcGVsaW5lU291cmNlPzogcGlwZWxpbmVzLklGaWxlU2V0UHJvZHVjZXI7XG4gIHJlYWRvbmx5IGNka1ZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnRpdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuICByZWFkb25seSByb2xlUG9saWN5U3RhdGVtZW50cz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXTtcbiAgcmVhZG9ubHkgY29kZWFydGlmYWN0UmVwb3NpdG9yeT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZWFydGlmYWN0RG9tYWluPzogc3RyaW5nO1xuICByZWFkb25seSBjb2RlYXJ0aWZhY3REb21haW5Pd25lcj86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkaXRpb25hbEluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBlbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVDb21taXRTb3VyY2VBY3Rpb25Qcm9wcyB7XG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICByZWFkb25seSBwcm9wcz86IHBpcGVsaW5lcy5Db25uZWN0aW9uU291cmNlT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXJ0aWZhY3RQdWJsaXNoQWN0aW9uUHJvcHMge1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZWFydGlmYWN0UmVwb3NpdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBjb2RlYXJ0aWZhY3REb21haW46IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZWFydGlmYWN0RG9tYWluT3duZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZVBpcGVsaW5lU291cmNlPzogcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZTtcbiAgcmVhZG9ubHkgcm9sZVBvbGljeVN0YXRlbWVudHM/OiBpYW0uUG9saWN5U3RhdGVtZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBDSUNEQWN0aW9ucyB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29kZUNvbW1pdFNvdXJjZUFjdGlvbihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHByb3BzOiBDb2RlQ29tbWl0U291cmNlQWN0aW9uUHJvcHMsXG4gICk6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2Uge1xuICAgIHJldHVybiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLmNvZGVDb21taXQoXG4gICAgICBjb2RlY29tbWl0LlJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlOYW1lKHNjb3BlLCBwcm9wcy5yZXBvc2l0b3J5TmFtZSwgcHJvcHMucmVwb3NpdG9yeU5hbWUpLFxuICAgICAgcHJvcHMuYnJhbmNoLFxuICAgICAgcHJvcHMucHJvcHMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3ludGhBY3Rpb24ocHJvcHM6IEdldFN5bnRoQWN0aW9uUHJvcHMpOiBwaXBlbGluZXMuQ29kZUJ1aWxkU3RlcCB7XG4gICAgdmFyIGluc3RhbGxDb21tYW5kcztcbiAgICBpbnN0YWxsQ29tbWFuZHMgPSBbYG5wbSBpbnN0YWxsIC1nIGF3cy1jZGtAJHtwcm9wcy5jZGtWZXJzaW9uID8gcHJvcHMuY2RrVmVyc2lvbiA6IFwibGF0ZXN0XCJ9YF07XG5cbiAgICAvLyBpZiAoYWxsKFtjb2RlQXJ0aWZhY3RSZXBvc2l0b3J5LCBjb2RlQXJ0aWZhY3REb21haW4sIGNvZGVBcnRpZmFjdERvbWFpbk93bmVyXSkpIHtcbiAgICAvLyAgIGlmICghcm9sZVBvbGljeVN0YXRlbWVudHMpIHtcbiAgICAvLyAgICAgcm9sZVBvbGljeVN0YXRlbWVudHMgPSBfZ2V0X2NvZGVhcnRpZmFjdF9yZWFkX3BvbGljeV9zdGF0ZW1lbnRzKHBhcnRpdGlvbiwgcmVnaW9uLCBhY2NvdW50LCBjb2RlQXJ0aWZhY3REb21haW4sIGNvZGVBcnRpZmFjdFJlcG9zaXRvcnkpO1xuICAgIC8vICAgfVxuXG4gICAgLy8gICBpbnN0YWxsX2NvbW1hbmRzLnBzdWgoYGF3cyBjb2RlYXJ0aWZhY3QgbG9naW4gLS10b29sIHBpcCAtLXJlcG9zaXRvcnkgJHtjb2RlQXJ0aWZhY3RSZXBvc2l0b3J5fSAtLWRvbWFpbiAke2NvZGVBcnRpZmFjdERvbWFpbn0gLS1kb21haW4tb3duZXIgJHtjb2RlQXJ0aWZhY3REb21haW5Pd25lcn1gKTtcbiAgICAvLyB9XG4gICAgaWYgKHByb3BzLmFkZGl0aW9uYWxJbnN0YWxsQ29tbWFuZHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLmFkZGl0aW9uYWxJbnN0YWxsQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgaW5zdGFsbENvbW1hbmRzID0gaW5zdGFsbENvbW1hbmRzLmNvbmNhdChwcm9wcy5hZGRpdGlvbmFsSW5zdGFsbENvbW1hbmRzKTsgLy8gd2lsbCBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGggYG5wbSBpbnN0YWxsIGF3cy1kZGstY29yZUAke3ZlcnNpb259YCB3aGVuIGF2YWlsYWJsZVxuICAgIH1cbiAgICByZXR1cm4gbmV3IHBpcGVsaW5lcy5Db2RlQnVpbGRTdGVwKFwiU3ludGhcIiwge1xuICAgICAgaW5wdXQ6IHByb3BzLmNvZGVQaXBlbGluZVNvdXJjZSxcbiAgICAgIGluc3RhbGxDb21tYW5kczogaW5zdGFsbENvbW1hbmRzLFxuICAgICAgY29tbWFuZHM6IFtcImNkayBzeW50aFwiXSxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBwcm9wcy5yb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q2ZuTmFnQWN0aW9uKFxuICAgIGZpbGVTZXRQcm9kdWNlcjogcGlwZWxpbmVzLklGaWxlU2V0UHJvZHVjZXIsXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcgPSBcIkNGTk5hZ1wiLFxuICAgIGZhaWxCdWlsZD86IGJvb2xlYW4sXG4gICk6IHBpcGVsaW5lcy5TaGVsbFN0ZXAge1xuICAgIHJldHVybiBuZXcgcGlwZWxpbmVzLlNoZWxsU3RlcChzdGFnZU5hbWUsIHtcbiAgICAgIGlucHV0OiBmaWxlU2V0UHJvZHVjZXIsXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcImdlbSBpbnN0YWxsIGNmbi1uYWdcIl0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgRkFJTF9CVUlMRDogZmFpbEJ1aWxkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICB9LFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2Nmbl9uYWdfc2NhbiAtLWlucHV0LXBhdGggLi8gLS10ZW1wbGF0ZS1wYXR0ZXJuIFwiLioudGVtcGxhdGUuanNvblwiICYmIHNjYW5fcmVzdWx0PVwiU1VDQ0VTU1wiIHx8IGVjaG8gc2Nhbl9yZXN1bHQ9XCJGQUlMRURcIicsXG4gICAgICAgICdpZiBbWyBcIiRGQUlMX0JVSUxEXCIgPSBcInRydWVcIiAmJiBcIiRzY2FuX3Jlc3VsdFwiID0gXCJGQUlMRURcIiBdXTsgdGhlbiBwcmludGYgXCJcXG5cXG5GYWlsaW5nIHBpcGVsaW5lIGFzIHBvc3NpYmxlIGluc2VjdXJlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZGV0ZWN0ZWRcXG5cXG5cIiAmJiBleGl0IDE7IGZpJyxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJhbmRpdEFjdGlvbihcbiAgICBjb2RlUGlwZWxpbmVTb3VyY2U6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UsXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcgPSBcIkJhbmRpdFwiLFxuICApOiBwaXBlbGluZXMuU2hlbGxTdGVwIHtcbiAgICByZXR1cm4gbmV3IHBpcGVsaW5lcy5TaGVsbFN0ZXAoc3RhZ2VOYW1lLCB7XG4gICAgICBpbnB1dDogY29kZVBpcGVsaW5lU291cmNlLFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXCJwaXAgaW5zdGFsbCBiYW5kaXRcIl0sXG4gICAgICBjb21tYW5kczogW1wiYmFuZGl0IC1yIC1sbCAtaWkgLlwiXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGVzdHNBY3Rpb24oXG4gICAgZmlsZVNldFByb2R1Y2VyOiBwaXBlbGluZXMuSUZpbGVTZXRQcm9kdWNlcixcbiAgICBjb21tYW5kczogc3RyaW5nW10gPSBbXCIuL3Rlc3Quc2hcIl0sXG4gICAgaW5zdGFsbENvbW1hbmRzOiBzdHJpbmdbXSA9IFtcInBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy1kZXYudHh0XCIsIFwicGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dFwiXSxcbiAgICBzdGFnZU5hbWU6IHN0cmluZyA9IFwiVGVzdHNcIixcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBwaXBlbGluZXMuU2hlbGxTdGVwKHN0YWdlTmFtZSwge1xuICAgICAgaW5wdXQ6IGZpbGVTZXRQcm9kdWNlcixcbiAgICAgIGluc3RhbGxDb21tYW5kczogaW5zdGFsbENvbW1hbmRzLFxuICAgICAgY29tbWFuZHM6IGNvbW1hbmRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRDb2RlQXJ0aWZhY3RQdWJsaXNoQWN0aW9uKFxuICAgIHBhcnRpdGlvbjogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIGFjY291bnQ6IHN0cmluZyxcbiAgICBjb2RlYXJ0aWZhY3RSZXBvc2l0b3J5OiBzdHJpbmcsXG4gICAgY29kZWFydGlmYWN0RG9tYWluOiBzdHJpbmcsXG4gICAgY29kZWFydGlmYWN0RG9tYWluT3duZXI6IHN0cmluZyxcbiAgICBjb2RlUGlwZWxpbmVTb3VyY2U/OiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLFxuICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBpYW0uUG9saWN5U3RhdGVtZW50W10gPSBnZXRDb2RlQXJ0aWZhY3RQdWJsaXNoUG9saWN5U3RhdGVtZW50cyhcbiAgICAgIHBhcnRpdGlvbixcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFjY291bnQsXG4gICAgICBjb2RlYXJ0aWZhY3REb21haW4sXG4gICAgICBjb2RlYXJ0aWZhY3RSZXBvc2l0b3J5LFxuICAgICksXG4gICk6IHBpcGVsaW5lcy5Db2RlQnVpbGRTdGVwIHtcbiAgICB2YXIgcm9sZVBvbGljeVN0YXRlbWVudHMgPVxuICAgICAgcm9sZVBvbGljeVN0YXRlbWVudHMgPz9cbiAgICAgIGdldENvZGVBcnRpZmFjdFB1Ymxpc2hQb2xpY3lTdGF0ZW1lbnRzKHBhcnRpdGlvbiwgcmVnaW9uLCBhY2NvdW50LCBjb2RlYXJ0aWZhY3REb21haW4sIGNvZGVhcnRpZmFjdFJlcG9zaXRvcnkpO1xuXG4gICAgcmV0dXJuIG5ldyBwaXBlbGluZXMuQ29kZUJ1aWxkU3RlcChcIkJ1aWxkQW5kVXBsb2FkQXJ0aWZhY3RcIiwge1xuICAgICAgaW5wdXQ6IGNvZGVQaXBlbGluZVNvdXJjZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBET01BSU46IHtcbiAgICAgICAgICAgIHZhbHVlOiBjb2RlYXJ0aWZhY3REb21haW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBPV05FUjoge1xuICAgICAgICAgICAgdmFsdWU6IGNvZGVhcnRpZmFjdERvbWFpbk93bmVyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUkVQT1NJVE9SWToge1xuICAgICAgICAgICAgdmFsdWU6IGNvZGVhcnRpZmFjdFJlcG9zaXRvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgXCJwaXAgaW5zdGFsbCB3aGVlbCB0d2luZVwiLFxuICAgICAgICBcInBpcCBpbnN0YWxsIC1VIC1yIHJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgICAgXCJweXRob24gc2V0dXAucHkgYmRpc3Rfd2hlZWxcIixcbiAgICAgICAgXCJleHBvcnQgVkVSU0lPTj0kKHB5dGhvbiBzZXR1cC5weSAtLXZlcnNpb24pXCIsXG4gICAgICAgIFwiZXhwb3J0IFBBQ0tBR0U9JChweXRob24gc2V0dXAucHkgLS1uYW1lKVwiLFxuICAgICAgICBcImF3cyBjb2RlYXJ0aWZhY3QgbG9naW4gLS10b29sIHR3aW5lIC0tZG9tYWluICR7RE9NQUlOfSAtLWRvbWFpbi1vd25lciAke09XTkVSfSAtLXJlcG9zaXRvcnkgJHtSRVBPU0lUT1JZfVwiLFxuICAgICAgXSxcbiAgICAgIGNvbW1hbmRzOiBbXCJ0d2luZSB1cGxvYWQgLS1yZXBvc2l0b3J5IGNvZGVhcnRpZmFjdCBkaXN0LyR7UEFDS0FHRX0tJHtWRVJTSU9OfS1weTMtbm9uZS1hbnkud2hsXCJdLFxuICAgICAgcm9sZVBvbGljeVN0YXRlbWVudHM6IHJvbGVQb2xpY3lTdGF0ZW1lbnRzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=