UNPKG

deployable-awscdk-app-ts

Version:
160 lines • 19.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkoutStep = checkoutStep; exports.setNodeVersionStep = setNodeVersionStep; exports.installDependenciesStep = installDependenciesStep; exports.deploymentStep = deploymentStep; exports.setAwsCredentialsSteps = setAwsCredentialsSteps; exports.setNpmConfig = setNpmConfig; exports.checkActiveDeploymentStep = checkActiveDeploymentStep; exports.postDeploymentStep = postDeploymentStep; exports.preDeploymentStep = preDeploymentStep; exports.preInstallDependenciesStep = preInstallDependenciesStep; const projen_1 = require("projen"); const javascript_1 = require("projen/lib/javascript"); function checkoutStep() { return { name: 'Checkout', uses: 'actions/checkout@v4', with: { 'ref': '${{ github.sha }}', 'fetch-depth': 0, }, }; } function setNodeVersionStep(nodeVersion, checkActiveDeployment) { return { ...getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment), name: 'Setup Node.js', uses: 'actions/setup-node@v4', with: { 'node-version': nodeVersion, }, }; } function installDependenciesStep(command, checkActiveDeployment) { return { ...getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment), name: 'Install dependencies', run: command, }; } function getPackageManagerCommandPrefix(packageManager) { if (packageManager === projen_1.javascript.NodePackageManager.NPM) return 'npm run'; if (packageManager === projen_1.javascript.NodePackageManager.YARN) return 'yarn'; if (packageManager === projen_1.javascript.NodePackageManager.PNPM) return 'pnpm'; throw new Error(`Invalid package manager selected (${packageManager})`); } function deploymentStep(checkActiveDeployment, packageManager) { return { ...getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment), name: 'Deployment', run: `${getPackageManagerCommandPrefix(packageManager)} deploy:workflow`, }; } function setAwsCredentialsInEnvironment(checkActiveDeployment) { const commands = [ 'echo "AWS_ACCESS_KEY_ID=$accessKeyId" >> $GITHUB_ENV', 'echo "AWS_SECRET_ACCESS_KEY=$secretAccessKey" >> $GITHUB_ENV', 'echo "AWS_REGION=$region" >> $GITHUB_ENV', ]; const condition = checkActiveDeployment ? `\${{ matrix.assumeRole == 'false' && ${skipIfAlreadyActiveDeploymentCondition} }}` : '${{ matrix.assumeRole == \'false\' }}'; return { if: condition, name: 'Configure AWS Credentials', run: `${commands.join('\n')}`, env: { accessKeyId: '${{ secrets[matrix.accessKeyIdSecretName] }}', secretAccessKey: '${{ secrets[matrix.secretAccessKeySecretName] }}', region: '${{ matrix.region }}', }, }; } function assumeAwsRoleStep(checkActiveDeployment, authProvider) { const condition = checkActiveDeployment ? `\${{ matrix.assumeRole == 'true' && ${skipIfAlreadyActiveDeploymentCondition} }}` : '${{ matrix.assumeRole == \'true\' }}'; const secretsParams = authProvider === javascript_1.CodeArtifactAuthProvider.ACCESS_AND_SECRET_KEY_PAIR ? { 'aws-access-key-id': '${{ secrets[matrix.accessKeyIdSecretName] }}', 'aws-secret-access-key': '${{ secrets[matrix.secretAccessKeySecretName] }}', } : undefined; return { if: condition, name: 'Assume AWS Role', uses: 'aws-actions/configure-aws-credentials@v4', with: { ...secretsParams, 'role-to-assume': '${{ matrix.roleToAssume }}', 'aws-region': '${{ matrix.region }}', 'role-duration-seconds': '${{ matrix.assumeRoleDurationSeconds }}', }, }; } function setAwsCredentialsSteps(checkActiveDeployment, authProvider = javascript_1.CodeArtifactAuthProvider.ACCESS_AND_SECRET_KEY_PAIR) { return [ setAwsCredentialsInEnvironment(checkActiveDeployment), assumeAwsRoleStep(checkActiveDeployment, authProvider), ]; } function setNpmConfig(configName, configValue, checkActiveDeployment) { const environmentVariableName = 'CONFIG_VALUE'; return { ...getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment), name: 'Setting NPM Config', env: { [environmentVariableName]: configValue, }, run: `npm config set ${configName} $${environmentVariableName}`, }; } const checkActiveDeploymentStepId = 'deployment-check'; function checkActiveDeploymentStep() { return { id: checkActiveDeploymentStepId, uses: 'AminFazlMondo/check-deployed-environment@v1', with: { environment: '${{ matrix.environment }}', }, env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}', }, }; } const skipIfAlreadyActiveDeploymentCondition = `steps.${checkActiveDeploymentStepId}.outputs.has_active_deployment != 'true'`; function getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment) { return checkActiveDeployment ? { if: `\${{ ${skipIfAlreadyActiveDeploymentCondition} }}` } : undefined; } function postDeploymentStep(checkActiveDeployment, packageManager) { const condition = checkActiveDeployment ? `\${{ matrix.hasPostDeployTask == 'true' && ${skipIfAlreadyActiveDeploymentCondition} }}` : '${{ matrix.hasPostDeployTask == \'true\' }}'; return { if: condition, name: 'Post Deployment', run: `${getPackageManagerCommandPrefix(packageManager)} \${{ matrix.postDeploymentScript }}`, }; } function preDeploymentStep(checkActiveDeployment, packageManager) { const condition = checkActiveDeployment ? `\${{ matrix.hasPreDeployTask == 'true' && ${skipIfAlreadyActiveDeploymentCondition} }}` : '${{ matrix.hasPreDeployTask == \'true\' }}'; return { if: condition, name: 'Pre Deployment', run: `${getPackageManagerCommandPrefix(packageManager)} \${{ matrix.preDeploymentScript }}`, }; } function preInstallDependenciesStep(taskName, checkActiveDeployment) { return { ...getSkipIfAlreadyActiveDeploymentCondition(checkActiveDeployment), name: taskName, run: `npx projen ${taskName}`, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxvQ0FTQztBQUVELGdEQVNDO0FBRUQsMERBTUM7QUFlRCx3Q0FPQztBQW1ERCx3REFRQztBQUVELG9DQVVDO0FBR0QsOERBV0M7QUFRRCxnREFVQztBQUVELDhDQVVDO0FBRUQsZ0VBTUM7QUFqTEQsbUNBQWlDO0FBRWpDLHNEQUE4RDtBQUU5RCxTQUFnQixZQUFZO0lBQzFCLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUscUJBQXFCO1FBQzNCLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsYUFBYSxFQUFFLENBQUM7U0FDakI7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLFdBQW1CLEVBQUUscUJBQThCO0lBQ3BGLE9BQU87UUFDTCxHQUFHLHlDQUF5QyxDQUFDLHFCQUFxQixDQUFDO1FBQ25FLElBQUksRUFBRSxlQUFlO1FBQ3JCLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsSUFBSSxFQUFFO1lBQ0osY0FBYyxFQUFFLFdBQVc7U0FDNUI7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE9BQWUsRUFBRSxxQkFBOEI7SUFDckYsT0FBTztRQUNMLEdBQUcseUNBQXlDLENBQUMscUJBQXFCLENBQUM7UUFDbkUsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixHQUFHLEVBQUUsT0FBTztLQUNiLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxjQUE2QztJQUNuRixJQUFJLGNBQWMsS0FBSyxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUc7UUFDdEQsT0FBTyxTQUFTLENBQUE7SUFFbEIsSUFBSSxjQUFjLEtBQUssbUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO1FBQ3ZELE9BQU8sTUFBTSxD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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7amF2YXNjcmlwdH0gZnJvbSAncHJvamVuJ1xuaW1wb3J0IHtKb2JTdGVwfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnXG5pbXBvcnQge0NvZGVBcnRpZmFjdEF1dGhQcm92aWRlcn0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0J1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnLFxuICAgIHdpdGg6IHtcbiAgICAgICdyZWYnOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgJ2ZldGNoLWRlcHRoJzogMCxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlVmVyc2lvblN0ZXAobm9kZVZlcnNpb246IHN0cmluZywgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuKTogSm9iU3RlcCB7XG4gIHJldHVybiB7XG4gICAgLi4uZ2V0U2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oY2hlY2tBY3RpdmVEZXBsb3ltZW50KSxcbiAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtbm9kZUB2NCcsXG4gICAgd2l0aDoge1xuICAgICAgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKGNvbW1hbmQ6IHN0cmluZywgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuKTogSm9iU3RlcCB7XG4gIHJldHVybiB7XG4gICAgLi4uZ2V0U2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oY2hlY2tBY3RpdmVEZXBsb3ltZW50KSxcbiAgICBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLFxuICAgIHJ1bjogY29tbWFuZCxcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlckNvbW1hbmRQcmVmaXgocGFja2FnZU1hbmFnZXI6IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyKTogc3RyaW5nIHtcbiAgaWYgKHBhY2thZ2VNYW5hZ2VyID09PSBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5OUE0pXG4gICAgcmV0dXJuICducG0gcnVuJ1xuXG4gIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuWUFSTilcbiAgICByZXR1cm4gJ3lhcm4nXG5cbiAgaWYgKHBhY2thZ2VNYW5hZ2VyID09PSBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKVxuICAgIHJldHVybiAncG5wbSdcblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFja2FnZSBtYW5hZ2VyIHNlbGVjdGVkICgke3BhY2thZ2VNYW5hZ2VyfSlgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95bWVudFN0ZXAoY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuLCBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIpOiBKb2JTdGVwIHtcblxuICByZXR1cm4ge1xuICAgIC4uLmdldFNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKGNoZWNrQWN0aXZlRGVwbG95bWVudCksXG4gICAgbmFtZTogJ0RlcGxveW1lbnQnLFxuICAgIHJ1bjogYCR7Z2V0UGFja2FnZU1hbmFnZXJDb21tYW5kUHJlZml4KHBhY2thZ2VNYW5hZ2VyKX0gZGVwbG95OndvcmtmbG93YCxcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnQoY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuKTogSm9iU3RlcCB7XG4gIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICdlY2hvIFwiQVdTX0FDQ0VTU19LRVlfSUQ9JGFjY2Vzc0tleUlkXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgJ2VjaG8gXCJBV1NfUkVHSU9OPSRyZWdpb25cIiA+PiAkR0lUSFVCX0VOVicsXG4gIF1cblxuICBjb25zdCBjb25kaXRpb24gPVxuICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICBgXFwke3sgbWF0cml4LmFzc3VtZVJvbGUgPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZSA9PSBcXCdmYWxzZVxcJyB9fSdcblxuICByZXR1cm4ge1xuICAgIGlmOiBjb25kaXRpb24sXG4gICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgIHJ1bjogYCR7Y29tbWFuZHMuam9pbignXFxuJyl9YCxcbiAgICBlbnY6IHtcbiAgICAgIGFjY2Vzc0tleUlkOiAnJHt7IHNlY3JldHNbbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZV0gfX0nLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiAnJHt7IHNlY3JldHNbbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWVdIH19JyxcbiAgICAgIHJlZ2lvbjogJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICB9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc3VtZUF3c1JvbGVTdGVwKGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbiwgYXV0aFByb3ZpZGVyOiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIpOiBKb2JTdGVwIHtcbiAgY29uc3QgY29uZGl0aW9uID1cbiAgICBjaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgYFxcJHt7IG1hdHJpeC5hc3N1bWVSb2xlID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZSA9PSBcXCd0cnVlXFwnIH19J1xuXG4gIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgIGF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSID9cbiAgICAgIHtcbiAgICAgICAgJ2F3cy1hY2Nlc3Mta2V5LWlkJzogJyR7eyBzZWNyZXRzW21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWVdIH19JyxcbiAgICAgICAgJ2F3cy1zZWNyZXQtYWNjZXNzLWtleSc6ICcke3sgc2VjcmV0c1ttYXRyaXguc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZV0gfX0nLFxuICAgICAgfSA6IHVuZGVmaW5lZFxuICByZXR1cm4ge1xuICAgIGlmOiBjb25kaXRpb24sXG4gICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgdXNlczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjQnLFxuICAgIHdpdGg6IHtcbiAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAncm9sZS10by1hc3N1bWUnOiAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJ2F3cy1yZWdpb24nOiAnJHt7IG1hdHJpeC5yZWdpb24gfX0nLFxuICAgICAgJ3JvbGUtZHVyYXRpb24tc2Vjb25kcyc6ICcke3sgbWF0cml4LmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfX0nLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF3c0NyZWRlbnRpYWxzU3RlcHMoXG4gIGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbixcbiAgYXV0aFByb3ZpZGVyOiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIgPSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVIpXG4gIDogSm9iU3RlcFtdIHtcbiAgcmV0dXJuIFtcbiAgICBzZXRBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnQoY2hlY2tBY3RpdmVEZXBsb3ltZW50KSxcbiAgICBhc3N1bWVBd3NSb2xlU3RlcChjaGVja0FjdGl2ZURlcGxveW1lbnQsIGF1dGhQcm92aWRlciksXG4gIF1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE5wbUNvbmZpZyhjb25maWdOYW1lOiBzdHJpbmcsIGNvbmZpZ1ZhbHVlOiBzdHJpbmcsIGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbik6IEpvYlN0ZXAge1xuICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnXG4gIHJldHVybiB7XG4gICAgLi4uZ2V0U2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oY2hlY2tBY3RpdmVEZXBsb3ltZW50KSxcbiAgICBuYW1lOiAnU2V0dGluZyBOUE0gQ29uZmlnJyxcbiAgICBlbnY6IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IGNvbmZpZ1ZhbHVlLFxuICAgIH0sXG4gICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtjb25maWdOYW1lfSAkJHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gLFxuICB9XG59XG5cbmNvbnN0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCA9ICdkZXBsb3ltZW50LWNoZWNrJ1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICB1c2VzOiAnQW1pbkZhemxNb25kby9jaGVjay1kZXBsb3llZC1lbnZpcm9ubWVudEB2MScsXG4gICAgd2l0aDoge1xuICAgICAgZW52aXJvbm1lbnQ6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICB9LFxuICAgIGVudjoge1xuICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uPSBgc3RlcHMuJHtjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWR9Lm91dHB1dHMuaGFzX2FjdGl2ZV9kZXBsb3ltZW50ICE9ICd0cnVlJ2BcblxuZnVuY3Rpb24gZ2V0U2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjaGVja0FjdGl2ZURlcGxveW1lbnQgPyB7aWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWB9IDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0RGVwbG95bWVudFN0ZXAoY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuLCBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIpOiBKb2JTdGVwIHtcbiAgY29uc3QgY29uZGl0aW9uID1cbiAgY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICBgXFwke3sgbWF0cml4Lmhhc1Bvc3REZXBsb3lUYXNrID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICcke3sgbWF0cml4Lmhhc1Bvc3REZXBsb3lUYXNrID09IFxcJ3RydWVcXCcgfX0nXG4gIHJldHVybiB7XG4gICAgaWY6IGNvbmRpdGlvbixcbiAgICBuYW1lOiAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICBydW46IGAke2dldFBhY2thZ2VNYW5hZ2VyQ29tbWFuZFByZWZpeChwYWNrYWdlTWFuYWdlcil9IFxcJHt7IG1hdHJpeC5wb3N0RGVwbG95bWVudFNjcmlwdCB9fWAsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZURlcGxveW1lbnRTdGVwKGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbiwgcGFja2FnZU1hbmFnZXI6IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyKTogSm9iU3RlcCB7XG4gIGNvbnN0IGNvbmRpdGlvbiA9XG4gIGNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgYFxcJHt7IG1hdHJpeC5oYXNQcmVEZXBsb3lUYXNrID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICcke3sgbWF0cml4Lmhhc1ByZURlcGxveVRhc2sgPT0gXFwndHJ1ZVxcJyB9fSdcbiAgcmV0dXJuIHtcbiAgICBpZjogY29uZGl0aW9uLFxuICAgIG5hbWU6ICdQcmUgRGVwbG95bWVudCcsXG4gICAgcnVuOiBgJHtnZXRQYWNrYWdlTWFuYWdlckNvbW1hbmRQcmVmaXgocGFja2FnZU1hbmFnZXIpfSBcXCR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fWAsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKHRhc2tOYW1lOiBzdHJpbmcsIGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbik6IEpvYlN0ZXAge1xuICByZXR1cm4ge1xuICAgIC4uLmdldFNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKGNoZWNrQWN0aXZlRGVwbG95bWVudCksXG4gICAgbmFtZTogdGFza05hbWUsXG4gICAgcnVuOiBgbnB4IHByb2plbiAke3Rhc2tOYW1lfWAsXG4gIH1cbn0iXX0=