UNPKG

projen

Version:

CDK for software projects

87 lines 10.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoMerge = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const component_1 = require("../component"); /** * Automatically merge Pull Requests using Mergify * * > [!NOTE] * > GitHub now natively provides the same features, so you don't need Mergify * > anymore. See `GitHubOptions.mergeQueue` and `MergeQueueOptions.autoQueue`. * * If `buildJob` is specified, the specified GitHub workflow job ID is required * to succeed in order for the PR to be merged. * * `approvedReviews` specified the number of code review approvals required for * the PR to be merged. * * @see https://mergify.com/ */ class AutoMerge extends component_1.Component { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoMerge", version: "0.103.12" }; lazyConditions = new Array(); constructor(github, options = {}) { super(github.project); const mergify = github.mergify; if (!mergify) { throw new Error("auto merging requires mergify to be enabled"); } const blockingLabels = options.blockingLabels ?? ["do-not-merge"]; const blockingCondition = blockingLabels?.length ? [`-label~=(${blockingLabels.join("|")})`] : []; const mergeAction = { queue: { name: "default", }, }; const approvedReviews = options.approvedReviews ?? 1; // add initial conditions (additional conditions can be added later) this.addConditions(`#approved-reviews-by>=${approvedReviews}`); this.addConditions(...blockingCondition); const ruleName = options.ruleName ?? "Automatic merge on approval and successful build"; const queueName = options.queueName ?? "default"; mergify.addRule({ name: ruleName, actions: mergeAction, conditions: (() => this.renderConditions()), }); mergify.addQueue({ name: queueName, updateMethod: "merge", queueConditions: (() => this.renderConditions()), // squash all commits into a single commit when merging mergeMethod: "squash", // use PR title+body as the commit message commitMessageFormat: { title: "pr-title", body: "pr-body", }, }); this.project.addPackageIgnore("/.mergify.yml"); } /** * Adds conditions to the auto merge rule. * @param conditions The conditions to add (mergify syntax) */ addConditions(...conditions) { this.addConditionsLater({ render: () => conditions }); } /** * Adds conditions that will be rendered only during synthesis. * @param later The later */ addConditionsLater(later) { this.lazyConditions.push(later); } renderConditions() { const output = new Array(); for (const later of this.lazyConditions) { output.push(...later.render()); } return output; } } exports.AutoMerge = AutoMerge; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1tZXJnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRodWIvYXV0by1tZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNENBQXlDO0FBNEJ6Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsU0FBVSxTQUFRLHFCQUFTOztJQUNyQixjQUFjLEdBQUcsSUFBSSxLQUFLLEVBQXVCLENBQUM7SUFFbkUsWUFBWSxNQUFjLEVBQUUsVUFBNEIsRUFBRTtRQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEUsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLEVBQUUsTUFBTTtZQUM5QyxDQUFDLENBQUMsQ0FBQyxZQUFZLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxXQUFXLEdBQUc7WUFDbEIsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO1FBRXJELG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sUUFBUSxHQUNaLE9BQU8sQ0FBQyxRQUFRLElBQUksa0RBQWtELENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUM7UUFFakQsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsT0FBTyxFQUFFLFdBQVc7WUFDcEIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQVE7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsWUFBWSxFQUFFLE9BQU87WUFDckIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQVE7WUFDdkQsdURBQXVEO1lBQ3ZELFdBQVcsRUFBRSxRQUFRO1lBQ3JCLDBDQUEwQztZQUMxQyxtQkFBbUIsRUFBRTtnQkFDbkIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLEdBQUcsVUFBb0I7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLEtBQTBCO1FBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUVuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBOUVILDhCQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2l0SHViIH0gZnJvbSBcIi4vZ2l0aHViXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b01lcmdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgYXBwcm92ZWQgY29kZSByZXZpZXdzLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlZFJldmlld3M/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgbGFiZWxzIHRoYXQgd2lsbCBwcmV2ZW50IGF1dG8tbWVyZ2luZy5cbiAgICogQGRlZmF1bHQgWydkby1ub3QtbWVyZ2UnXVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tpbmdMYWJlbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbWVyZ2lmeSBydWxlXG4gICAqIEBkZWZhdWx0ICdBdXRvbWF0aWMgbWVyZ2Ugb24gYXBwcm92YWwgYW5kIHN1Y2Nlc3NmdWwgYnVpbGQnXG4gICAqL1xuICByZWFkb25seSBydWxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbWVyZ2lmeSBxdWV1ZVxuICAgKiBAZGVmYXVsdCAnZGVmYXVsdCdcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IG1lcmdlIFB1bGwgUmVxdWVzdHMgdXNpbmcgTWVyZ2lmeVxuICpcbiAqID4gWyFOT1RFXVxuICogPiBHaXRIdWIgbm93IG5hdGl2ZWx5IHByb3ZpZGVzIHRoZSBzYW1lIGZlYXR1cmVzLCBzbyB5b3UgZG9uJ3QgbmVlZCBNZXJnaWZ5XG4gKiA+IGFueW1vcmUuIFNlZSBgR2l0SHViT3B0aW9ucy5tZXJnZVF1ZXVlYCBhbmQgYE1lcmdlUXVldWVPcHRpb25zLmF1dG9RdWV1ZWAuXG4gKlxuICogSWYgYGJ1aWxkSm9iYCBpcyBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgR2l0SHViIHdvcmtmbG93IGpvYiBJRCBpcyByZXF1aXJlZFxuICogdG8gc3VjY2VlZCBpbiBvcmRlciBmb3IgdGhlIFBSIHRvIGJlIG1lcmdlZC5cbiAqXG4gKiBgYXBwcm92ZWRSZXZpZXdzYCBzcGVjaWZpZWQgdGhlIG51bWJlciBvZiBjb2RlIHJldmlldyBhcHByb3ZhbHMgcmVxdWlyZWQgZm9yXG4gKiB0aGUgUFIgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9tZXJnaWZ5LmNvbS9cbiAqL1xuZXhwb3J0IGNsYXNzIEF1dG9NZXJnZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF6eUNvbmRpdGlvbnMgPSBuZXcgQXJyYXk8SUFkZENvbmRpdGlvbnNMYXRlcj4oKTtcblxuICBjb25zdHJ1Y3RvcihnaXRodWI6IEdpdEh1Yiwgb3B0aW9uczogQXV0b01lcmdlT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoZ2l0aHViLnByb2plY3QpO1xuXG4gICAgY29uc3QgbWVyZ2lmeSA9IGdpdGh1Yi5tZXJnaWZ5O1xuICAgIGlmICghbWVyZ2lmeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0byBtZXJnaW5nIHJlcXVpcmVzIG1lcmdpZnkgdG8gYmUgZW5hYmxlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja2luZ0xhYmVscyA9IG9wdGlvbnMuYmxvY2tpbmdMYWJlbHMgPz8gW1wiZG8tbm90LW1lcmdlXCJdO1xuICAgIGNvbnN0IGJsb2NraW5nQ29uZGl0aW9uID0gYmxvY2tpbmdMYWJlbHM/Lmxlbmd0aFxuICAgICAgPyBbYC1sYWJlbH49KCR7YmxvY2tpbmdMYWJlbHMuam9pbihcInxcIil9KWBdXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgbWVyZ2VBY3Rpb24gPSB7XG4gICAgICBxdWV1ZToge1xuICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGFwcHJvdmVkUmV2aWV3cyA9IG9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzID8/IDE7XG5cbiAgICAvLyBhZGQgaW5pdGlhbCBjb25kaXRpb25zIChhZGRpdGlvbmFsIGNvbmRpdGlvbnMgY2FuIGJlIGFkZGVkIGxhdGVyKVxuICAgIHRoaXMuYWRkQ29uZGl0aW9ucyhgI2FwcHJvdmVkLXJldmlld3MtYnk+PSR7YXBwcm92ZWRSZXZpZXdzfWApO1xuICAgIHRoaXMuYWRkQ29uZGl0aW9ucyguLi5ibG9ja2luZ0NvbmRpdGlvbik7XG5cbiAgICBjb25zdCBydWxlTmFtZSA9XG4gICAgICBvcHRpb25zLnJ1bGVOYW1lID8/IFwiQXV0b21hdGljIG1lcmdlIG9uIGFwcHJvdmFsIGFuZCBzdWNjZXNzZnVsIGJ1aWxkXCI7XG4gICAgY29uc3QgcXVldWVOYW1lID0gb3B0aW9ucy5xdWV1ZU5hbWUgPz8gXCJkZWZhdWx0XCI7XG5cbiAgICBtZXJnaWZ5LmFkZFJ1bGUoe1xuICAgICAgbmFtZTogcnVsZU5hbWUsXG4gICAgICBhY3Rpb25zOiBtZXJnZUFjdGlvbixcbiAgICAgIGNvbmRpdGlvbnM6ICgoKSA9PiB0aGlzLnJlbmRlckNvbmRpdGlvbnMoKSkgYXMgYW55LFxuICAgIH0pO1xuXG4gICAgbWVyZ2lmeS5hZGRRdWV1ZSh7XG4gICAgICBuYW1lOiBxdWV1ZU5hbWUsXG4gICAgICB1cGRhdGVNZXRob2Q6IFwibWVyZ2VcIixcbiAgICAgIHF1ZXVlQ29uZGl0aW9uczogKCgpID0+IHRoaXMucmVuZGVyQ29uZGl0aW9ucygpKSBhcyBhbnksXG4gICAgICAvLyBzcXVhc2ggYWxsIGNvbW1pdHMgaW50byBhIHNpbmdsZSBjb21taXQgd2hlbiBtZXJnaW5nXG4gICAgICBtZXJnZU1ldGhvZDogXCJzcXVhc2hcIixcbiAgICAgIC8vIHVzZSBQUiB0aXRsZStib2R5IGFzIHRoZSBjb21taXQgbWVzc2FnZVxuICAgICAgY29tbWl0TWVzc2FnZUZvcm1hdDoge1xuICAgICAgICB0aXRsZTogXCJwci10aXRsZVwiLFxuICAgICAgICBib2R5OiBcInByLWJvZHlcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShcIi8ubWVyZ2lmeS55bWxcIik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjb25kaXRpb25zIHRvIHRoZSBhdXRvIG1lcmdlIHJ1bGUuXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIFRoZSBjb25kaXRpb25zIHRvIGFkZCAobWVyZ2lmeSBzeW50YXgpXG4gICAqL1xuICBwdWJsaWMgYWRkQ29uZGl0aW9ucyguLi5jb25kaXRpb25zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuYWRkQ29uZGl0aW9uc0xhdGVyKHsgcmVuZGVyOiAoKSA9PiBjb25kaXRpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgb25seSBkdXJpbmcgc3ludGhlc2lzLlxuICAgKiBAcGFyYW0gbGF0ZXIgVGhlIGxhdGVyXG4gICAqL1xuICBwdWJsaWMgYWRkQ29uZGl0aW9uc0xhdGVyKGxhdGVyOiBJQWRkQ29uZGl0aW9uc0xhdGVyKSB7XG4gICAgdGhpcy5sYXp5Q29uZGl0aW9ucy5wdXNoKGxhdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29uZGl0aW9ucygpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBsYXRlciBvZiB0aGlzLmxhenlDb25kaXRpb25zKSB7XG4gICAgICBvdXRwdXQucHVzaCguLi5sYXRlci5yZW5kZXIoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBZGRDb25kaXRpb25zTGF0ZXIge1xuICByZW5kZXIoKTogc3RyaW5nW107XG59XG4iXX0=