UNPKG

projen

Version:

CDK for software projects

115 lines • 18.6 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoQueue = exports.MergeMethod = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const component_1 = require("../component"); const gh = require("../github"); /** * The merge method used to add the PR to the merge queue * * Behavior can be further configured in repository settings. */ var MergeMethod; (function (MergeMethod) { MergeMethod["SQUASH"] = "squash"; MergeMethod["MERGE"] = "merge"; MergeMethod["REBASE"] = "rebase"; })(MergeMethod || (exports.MergeMethod = MergeMethod = {})); /** * Automatically add pull requests to the merge queue * PRs will be merged once they pass required checks. */ class AutoQueue extends component_1.Component { constructor(scope, options = {}) { super(scope); const workflowEngine = gh.GitHub.of(this.project); if (!workflowEngine) { throw new Error(`Cannot add ${new.target.name} to project without GitHub enabled. Please enable GitHub for this project.`); } const labels = options.labels ?? []; const usernames = options.allowedUsernames ?? []; const conditions = []; if (labels.length > 0) { conditions.push("(" + labels .map((l) => `contains(github.event.pull_request.labels.*.name, '${l}')`) .join(" || ") + ")"); } if (usernames.length > 0) { conditions.push("(" + usernames .map((u) => `github.event.pull_request.user.login == '${u}'`) .join(" || ") + ")"); } let needsEditedEvent = false; if (options.targetBranches) { // Branch conditions, based off the 'opened' or 'edited' events. // // The current workflow will only run if the target branch is one of the intended // ones, so we only need to check if the event type is correct. needsEditedEvent = true; const isOpened = `github.event.action == 'opened'`; const isBranchChanged = `(github.event.action == 'edited' && github.event.changes.base)`; conditions.push(`(${isOpened} || ${isBranchChanged})`); } const credentials = options.projenCredentials ?? workflowEngine.projenCredentials; const mergeMethod = options.mergeMethod ?? MergeMethod.SQUASH; const autoQueueJob = { name: "Set AutoQueue on PR #${{ github.event.number }}", runsOn: options.runsOn ?? ["ubuntu-latest"], permissions: { pullRequests: gh.workflows.JobPermission.WRITE, contents: gh.workflows.JobPermission.WRITE, }, if: conditions.length ? conditions.join(" && ") : undefined, environment: credentials.environment, steps: [ ...credentials.setupSteps, { uses: "peter-evans/enable-pull-request-automerge@v3", with: { token: credentials.tokenRef, "pull-request-number": "${{ github.event.number }}", "merge-method": mergeMethod, }, }, ], }; const workflow = workflowEngine.addWorkflow("auto-queue"); workflow.on({ // The 'pull request' event gives the workflow 'read-only' permissions on some // pull requests (such as the ones from dependabot) when using the `GITHUB_TOKEN` // security token. This prevents the workflow from approving these pull requests. // Github has placed this guard so as to prevent security attacks by simply opening // a pull request and triggering a workflow on a commit that was not vetted to make // unintended changes to the repository. // // Instead use the 'pull request target' event here that gives the Github workflow // 'read-write' permissions. This is safe because, this event, unlike the 'pull request' // event references the BASE commit of the pull request and not the HEAD commit. // // We only enable auto-queue when a PR is opened, reopened or moving from Draft to Ready, // or retargeted to a different branch. Specifically, if a user disables auto-queue we try very hard to avoid // accidentally re-enabling it. // // The 'edited' trigger is only used to detect base branch changes. pullRequestTarget: { types: [ "opened", "reopened", "ready_for_review", ...(needsEditedEvent ? ["edited"] : []), ], branches: options.targetBranches, }, }); workflow.addJobs({ enableAutoQueue: autoQueueJob }); } } exports.AutoQueue = AutoQueue; _a = JSII_RTTI_SYMBOL_1; AutoQueue[_a] = { fqn: "projen.github.AutoQueue", version: "0.99.16" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRodWIvYXV0by1xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDRDQUF5QztBQUN6QyxnQ0FBZ0M7QUFFaEM7Ozs7R0FJRztBQUNILElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNyQixnQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBZSxDQUFBO0lBQ2YsZ0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLFdBQVcsMkJBQVgsV0FBVyxRQUl0QjtBQTRFRDs7O0dBR0c7QUFDSCxNQUFhLFNBQVUsU0FBUSxxQkFBUztJQUN0QyxZQUFZLEtBQWlCLEVBQUUsVUFBNEIsRUFBRTtRQUMzRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FDRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQ2IsNEVBQTRFLENBQzdFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUVqRCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQ2IsR0FBRztnQkFDRCxNQUFNO3FCQUNILEdBQUcsQ0FDRixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osc0RBQXNELENBQUMsSUFBSSxDQUM5RDtxQkFDQSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNmLEdBQUcs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ImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCAqIGFzIGdoIGZyb20gXCIuLi9naXRodWJcIjtcblxuLyoqXG4gKiBUaGUgbWVyZ2UgbWV0aG9kIHVzZWQgdG8gYWRkIHRoZSBQUiB0byB0aGUgbWVyZ2UgcXVldWVcbiAqXG4gKiBCZWhhdmlvciBjYW4gYmUgZnVydGhlciBjb25maWd1cmVkIGluIHJlcG9zaXRvcnkgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBlbnVtIE1lcmdlTWV0aG9kIHtcbiAgU1FVQVNIID0gXCJzcXVhc2hcIixcbiAgTUVSR0UgPSBcIm1lcmdlXCIsXG4gIFJFQkFTRSA9IFwicmViYXNlXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgJ0F1dG9RdWV1ZSdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvUXVldWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9ubHkgcHVsbCByZXF1ZXN0cyBhdXRob3JlZCBieSB0aGVzZSBHaXRodWIgdXNlcm5hbWVzIHdpbGwgaGF2ZSBhdXRvLXF1ZXVlIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0IC0gcHVsbCByZXF1ZXN0cyBmcm9tIGFsbCB1c2VycyBhcmUgZWxpZ2libGUgZm9yIGF1dG8tcXVldWluZ1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFVzZXJuYW1lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPbmx5IHB1bGwgcmVxdWVzdHMgd2l0aCBvbmUgb2YgdGhpcyBsYWJlbHMgd2lsbCBoYXZlIGF1dG8tcXVldWUgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgLSBhbGwgcHVsbCByZXF1ZXN0cyBhcmUgZWxpZ2libGUgZm9yIGF1dG8tcXVldWVpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDaG9vc2UgYSBtZXRob2QgZm9yIGF1dGhlbnRpY2F0aW5nIHdpdGggR2l0SHViIHRvIGVuYWJsZSBhdXRvLXF1ZXVlIG9uIHB1bGwgcmVxdWVzdHMuXG4gICAqXG4gICAqIFRoZSB3b3JrZmxvdyBjYW5ub3QgdXNlIGEgZGVmYXVsdCBnaXRodWIgdG9rZW4uIFF1ZXVpbmcgYSBQUlxuICAgKiB3aXRoIHRoZSBkZWZhdWx0IHRva2VuIHdpbGwgbm90IHRyaWdnZXIgYW55IG1lcmdlIHF1ZXVlIHdvcmtmbG93cyxcbiAgICogd2hpY2ggcmVzdWx0cyBpbiB0aGUgUFIganVzdCBub3QgZ2V0dGluZyBtZXJnZWQgYXQgYWxsLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcHJvamVuLmlvL2RvY3MvaW50ZWdyYXRpb25zL2dpdGh1Yi9cbiAgICogQGRlZmF1bHQgLSB1c2VzIGNyZWRlbnRpYWxzIGZyb20gdGhlIEdpdEh1YiBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbkNyZWRlbnRpYWxzPzogZ2guR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdXNlZCB0byBhZGQgdGhlIFBSIHRvIHRoZSBtZXJnZSBxdWV1ZVxuICAgKiBBbnkgYnJhbmNoIHByb3RlY3Rpb24gcnVsZXMgbXVzdCBhbGxvdyB0aGlzIG1lcmdlIG1ldGhvZC5cbiAgICogQGRlZmF1bHQgTWVyZ2VNZXRob2QuU1FVQVNIXG4gICAqL1xuICByZWFkb25seSBtZXJnZU1ldGhvZD86IE1lcmdlTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIHNlbGVjdGlvbiBsYWJlbHNcbiAgICogQGRlZmF1bHQgW1widWJ1bnR1LWxhdGVzdFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBicmFuY2ggbmFtZXMgdGhhdCB3ZSBzaG91bGQgYXV0by1xdWV1ZSBmb3JcbiAgICpcbiAgICogVGhpcyBzZXQgb2YgYnJhbmNoZXMgc2hvdWxkIGJlIGEgc3Vic2V0IG9mIGBNZXJnZVF1ZXVlT3B0aW9ucy50YXJnZXRCcmFuY2hlc2AuXG4gICAqXG4gICAqIEJlIHN1cmUgbm90IHRvIGVuYWJsZSBgYXV0b1F1ZXVlYCBmb3IgYnJhbmNoZXMgdGhhdCBkb24ndCBoYXZlIGJyYW5jaCBydWxlc1xuICAgKiB3aXRoIG1lcmdlIHJlcXVpcmVtZW50cyBzZXQgdXAsIG90aGVyd2lzZSBuZXcgUFJzIHdpbGwgYmUgbWVyZ2VkXG4gICAqIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5nIHdpdGhvdXQgYSBjaGFuY2UgZm9yIHJldmlldy5cbiAgICpcbiAgICogIyMgQXV0b21hdGljYWxseSBtZXJnaW5nIGEgc2V0IG9mIFN0YWNrZWQgUFJzXG4gICAqXG4gICAqIElmIHlvdSBzZXQgdGhpcyB0byBgWydtYWluJ11gIHlvdSBjYW4gYXV0b21hdGljYWxseSBtZXJnZSBhIHNldCBvZiBTdGFja2VkIFBSc1xuICAgKiBpbiB0aGUgcmlnaHQgb3JkZXIuIEl0IHdvcmtzIGxpa2UgdGhpczpcbiAgICpcbiAgICogLSBDcmVhdGUgUFIgIzEgZnJvbSBicmFuY2ggYGFgLCB0YXJnZXRpbmcgYG1haW5gLlxuICAgKiAtIENyZWF0ZSBQUiAjMiBmcm9tIGJyYW5jaCBgYmAsIHRhcmdldGluZyBicmFuY2ggYGFgLlxuICAgKiAtIENyZWF0ZSBQUiAjMyBmcm9tIGJyYW5jaCBgY2AsIHRhcmdldGluZyBicmFuY2ggYGJgLlxuICAgKlxuICAgKiBJbml0aWFsbHksIFBSICMxIHdpbGwgYmUgc2V0IHRvIGF1dG8tbWVyZ2UsIFBScyAjMiBhbmQgIzMgd2lsbCBub3QuXG4gICAqXG4gICAqIE9uY2UgUFIgIzEgcGFzc2VzIGFsbCBvZiBpdHMgcmVxdWlyZW1lbnRzIGl0IHdpbGwgbWVyZ2UuIFRoYXQgd2lsbCBkZWxldGVcbiAgICogYnJhbmNoIGBhYCBhbmQgY2hhbmdlICB0aGUgdGFyZ2V0IGJyYW5jaCBvZiBQUiAjMiBjaGFuZ2UgdG8gYG1haW5gLiBBdCB0aGF0XG4gICAqIHBvaW50LCBhdXRvLXF1ZXVlaW5nIHdpbGwgc3dpdGNoIG9uIGZvciBQUiAjMiBhbmQgaXQgZ2V0cyBtZXJnZWQsIGV0Yy5cbiAgICpcbiAgICogPiBbIUlNUE9SVEFOVF1cbiAgICogPiBUaGlzIGNvbXBvbmVudCB3aWxsIG5ldmVyIGRpc2FibGUgQXV0b01lcmdlLCBvbmx5IGVuYWJsZSBpdC4gU28gaWYgYSBQUiBpc1xuICAgKiA+IGluaXRpYWxseSB0YXJnZXRlZCBhdCBvbmUgb2YgdGhlIGJyYW5jaGVzIGluIHRoaXMgbGlzdCwgYW5kIHRoZW5cbiAgICogPiBzdWJzZXF1ZW50bHkgcmV0YXJnZXRlZCB0byBhbm90aGVyIGJyYW5jaCwgKkF1dG9NZXJnZSBpcyBub3RcbiAgICogPiBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYqLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QnJhbmNoZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IGFkZCBwdWxsIHJlcXVlc3RzIHRvIHRoZSBtZXJnZSBxdWV1ZVxuICogUFJzIHdpbGwgYmUgbWVyZ2VkIG9uY2UgdGhleSBwYXNzIHJlcXVpcmVkIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1dG9RdWV1ZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBvcHRpb25zOiBBdXRvUXVldWVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihzY29wZSk7XG5cbiAgICBjb25zdCB3b3JrZmxvd0VuZ2luZSA9IGdoLkdpdEh1Yi5vZih0aGlzLnByb2plY3QpO1xuICAgIGlmICghd29ya2Zsb3dFbmdpbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBhZGQgJHtcbiAgICAgICAgICBuZXcudGFyZ2V0Lm5hbWVcbiAgICAgICAgfSB0byBwcm9qZWN0IHdpdGhvdXQgR2l0SHViIGVuYWJsZWQuIFBsZWFzZSBlbmFibGUgR2l0SHViIGZvciB0aGlzIHByb2plY3QuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxzID0gb3B0aW9ucy5sYWJlbHMgPz8gW107XG4gICAgY29uc3QgdXNlcm5hbWVzID0gb3B0aW9ucy5hbGxvd2VkVXNlcm5hbWVzID8/IFtdO1xuXG4gICAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChcbiAgICAgICAgXCIoXCIgK1xuICAgICAgICAgIGxhYmVsc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGwpID0+XG4gICAgICAgICAgICAgICAgYGNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJyR7bH0nKWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIiB8fCBcIikgK1xuICAgICAgICAgIFwiKVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJuYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goXG4gICAgICAgIFwiKFwiICtcbiAgICAgICAgICB1c2VybmFtZXNcbiAgICAgICAgICAgIC5tYXAoKHUpID0+IGBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LnVzZXIubG9naW4gPT0gJyR7dX0nYClcbiAgICAgICAgICAgIC5qb2luKFwiIHx8IFwiKSArXG4gICAgICAgICAgXCIpXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBuZWVkc0VkaXRlZEV2ZW50ID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMudGFyZ2V0QnJhbmNoZXMpIHtcbiAgICAgIC8vIEJyYW5jaCBjb25kaXRpb25zLCBiYXNlZCBvZmYgdGhlICdvcGVuZWQnIG9yICdlZGl0ZWQnIGV2ZW50cy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgY3VycmVudCB3b3JrZmxvdyB3aWxsIG9ubHkgcnVuIGlmIHRoZSB0YXJnZXQgYnJhbmNoIGlzIG9uZSBvZiB0aGUgaW50ZW5kZWRcbiAgICAgIC8vIG9uZXMsIHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGUgZXZlbnQgdHlwZSBpcyBjb3JyZWN0LlxuICAgICAgbmVlZHNFZGl0ZWRFdmVudCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGlzT3BlbmVkID0gYGdpdGh1Yi5ldmVudC5hY3Rpb24gPT0gJ29wZW5lZCdgO1xuICAgICAgY29uc3QgaXNCcmFuY2hDaGFuZ2VkID0gYChnaXRodWIuZXZlbnQuYWN0aW9uID09ICdlZGl0ZWQnICYmIGdpdGh1Yi5ldmVudC5jaGFuZ2VzLmJhc2UpYDtcblxuICAgICAgY29uZGl0aW9ucy5wdXNoKGAoJHtpc09wZW5lZH0gfHwgJHtpc0JyYW5jaENoYW5nZWR9KWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID1cbiAgICAgIG9wdGlvbnMucHJvamVuQ3JlZGVudGlhbHMgPz8gd29ya2Zsb3dFbmdpbmUucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgY29uc3QgbWVyZ2VNZXRob2QgPSBvcHRpb25zLm1lcmdlTWV0aG9kID8/IE1lcmdlTWV0aG9kLlNRVUFTSDtcblxuICAgIGNvbnN0IGF1dG9RdWV1ZUpvYjogZ2gud29ya2Zsb3dzLkpvYiA9IHtcbiAgICAgIG5hbWU6IFwiU2V0IEF1dG9RdWV1ZSBvbiBQUiAjJHt7IGdpdGh1Yi5ldmVudC5udW1iZXIgfX1cIixcbiAgICAgIHJ1bnNPbjogb3B0aW9ucy5ydW5zT24gPz8gW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIHB1bGxSZXF1ZXN0czogZ2gud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGNvbnRlbnRzOiBnaC53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBpZjogY29uZGl0aW9ucy5sZW5ndGggPyBjb25kaXRpb25zLmpvaW4oXCIgJiYgXCIpIDogdW5kZWZpbmVkLFxuICAgICAgZW52aXJvbm1lbnQ6IGNyZWRlbnRpYWxzLmVudmlyb25tZW50LFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAgLi4uY3JlZGVudGlhbHMuc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXM6IFwicGV0ZXItZXZhbnMvZW5hYmxlLXB1bGwtcmVxdWVzdC1hdXRvbWVyZ2VAdjNcIixcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICB0b2tlbjogY3JlZGVudGlhbHMudG9rZW5SZWYsXG4gICAgICAgICAgICBcInB1bGwtcmVxdWVzdC1udW1iZXJcIjogXCIke3sgZ2l0aHViLmV2ZW50Lm51bWJlciB9fVwiLFxuICAgICAgICAgICAgXCJtZXJnZS1tZXRob2RcIjogbWVyZ2VNZXRob2QsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IHdvcmtmbG93ID0gd29ya2Zsb3dFbmdpbmUuYWRkV29ya2Zsb3coXCJhdXRvLXF1ZXVlXCIpO1xuICAgIHdvcmtmbG93Lm9uKHtcbiAgICAgIC8vIFRoZSAncHVsbCByZXF1ZXN0JyBldmVudCBnaXZlcyB0aGUgd29ya2Zsb3cgJ3JlYWQtb25seScgcGVybWlzc2lvbnMgb24gc29tZVxuICAgICAgLy8gcHVsbCByZXF1ZXN0cyAoc3VjaCBhcyB0aGUgb25lcyBmcm9tIGRlcGVuZGFib3QpIHdoZW4gdXNpbmcgdGhlIGBHSVRIVUJfVE9LRU5gXG4gICAgICAvLyBzZWN1cml0eSB0b2tlbi4gVGhpcyBwcmV2ZW50cyB0aGUgd29ya2Zsb3cgZnJvbSBhcHByb3ZpbmcgdGhlc2UgcHVsbCByZXF1ZXN0cy5cbiAgICAgIC8vIEdpdGh1YiBoYXMgcGxhY2VkIHRoaXMgZ3VhcmQgc28gYXMgdG8gcHJldmVudCBzZWN1cml0eSBhdHRhY2tzIGJ5IHNpbXBseSBvcGVuaW5nXG4gICAgICAvLyBhIHB1bGwgcmVxdWVzdCBhbmQgdHJpZ2dlcmluZyBhIHdvcmtmbG93IG9uIGEgY29tbWl0IHRoYXQgd2FzIG5vdCB2ZXR0ZWQgdG8gbWFrZVxuICAgICAgLy8gdW5pbnRlbmRlZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5LlxuICAgICAgLy9cbiAgICAgIC8vIEluc3RlYWQgdXNlIHRoZSAncHVsbCByZXF1ZXN0IHRhcmdldCcgZXZlbnQgaGVyZSB0aGF0IGdpdmVzIHRoZSBHaXRodWIgd29ya2Zsb3dcbiAgICAgIC8vICdyZWFkLXdyaXRlJyBwZXJtaXNzaW9ucy4gVGhpcyBpcyBzYWZlIGJlY2F1c2UsIHRoaXMgZXZlbnQsIHVubGlrZSB0aGUgJ3B1bGwgcmVxdWVzdCdcbiAgICAgIC8vIGV2ZW50IHJlZmVyZW5jZXMgdGhlIEJBU0UgY29tbWl0IG9mIHRoZSBwdWxsIHJlcXVlc3QgYW5kIG5vdCB0aGUgSEVBRCBjb21taXQuXG4gICAgICAvL1xuICAgICAgLy8gV2Ugb25seSBlbmFibGUgYXV0by1xdWV1ZSB3aGVuIGEgUFIgaXMgb3BlbmVkLCByZW9wZW5lZCBvciBtb3ZpbmcgZnJvbSBEcmFmdCB0byBSZWFkeSxcbiAgICAgIC8vIG9yIHJldGFyZ2V0ZWQgdG8gYSBkaWZmZXJlbnQgYnJhbmNoLiBTcGVjaWZpY2FsbHksIGlmIGEgdXNlciBkaXNhYmxlcyBhdXRvLXF1ZXVlIHdlIHRyeSB2ZXJ5IGhhcmQgdG8gYXZvaWRcbiAgICAgIC8vIGFjY2lkZW50YWxseSByZS1lbmFibGluZyBpdC5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgJ2VkaXRlZCcgdHJpZ2dlciBpcyBvbmx5IHVzZWQgdG8gZGV0ZWN0IGJhc2UgYnJhbmNoIGNoYW5nZXMuXG4gICAgICBwdWxsUmVxdWVzdFRhcmdldDoge1xuICAgICAgICB0eXBlczogW1xuICAgICAgICAgIFwib3BlbmVkXCIsXG4gICAgICAgICAgXCJyZW9wZW5lZFwiLFxuICAgICAgICAgIFwicmVhZHlfZm9yX3Jldmlld1wiLFxuICAgICAgICAgIC4uLihuZWVkc0VkaXRlZEV2ZW50ID8gW1wiZWRpdGVkXCIgYXMgY29uc3RdIDogW10pLFxuICAgICAgICBdLFxuICAgICAgICBicmFuY2hlczogb3B0aW9ucy50YXJnZXRCcmFuY2hlcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgd29ya2Zsb3cuYWRkSm9icyh7IGVuYWJsZUF1dG9RdWV1ZTogYXV0b1F1ZXVlSm9iIH0pO1xuICB9XG59XG4iXX0=