diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index fd5af19fe2..40a0ec11a0 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -207,6 +207,7 @@ export function createGithubRepoCreateAction(options: { | undefined; requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; + requiredConversationResolution?: boolean | undefined; repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( @@ -253,6 +254,7 @@ export function createGithubRepoPushAction(options: { | undefined; requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; + requiredConversationResolution?: boolean | undefined; sourcePath?: string | undefined; token?: string | undefined; }>; @@ -392,6 +394,7 @@ export function createPublishGithubAction(options: { dismissStaleReviews?: boolean | undefined; requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; + requiredConversationResolution?: boolean | undefined; repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts index 760f42eade..4f2cf4a71e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoCreate.ts @@ -59,6 +59,7 @@ export function createGithubRepoCreateAction(options: { }; requiredStatusCheckContexts?: string[]; requireBranchesToBeUpToDate?: boolean; + requiredConversationResolution?: boolean; repoVisibility?: 'private' | 'internal' | 'public'; collaborators?: Array< | { @@ -93,6 +94,8 @@ export function createGithubRepoCreateAction(options: { bypassPullRequestAllowances: inputProps.bypassPullRequestAllowances, requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, requireBranchesToBeUpToDate: inputProps.requireBranchesToBeUpToDate, + requiredConversationResolution: + inputProps.requiredConversationResolution, repoVisibility: inputProps.repoVisibility, deleteBranchOnMerge: inputProps.deleteBranchOnMerge, allowMergeCommit: inputProps.allowMergeCommit, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.test.ts index 46f33a823d..e7afc26fb8 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.test.ts @@ -284,6 +284,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -305,6 +306,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: true, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -326,6 +328,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -350,6 +353,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -371,6 +375,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -392,6 +397,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: false, dismissStaleReviews: false, }); @@ -416,6 +422,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -426,6 +433,7 @@ describe('github:repo:push', () => { ...mockContext.input, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, }, }); @@ -438,6 +446,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -460,6 +469,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: false, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -470,6 +480,7 @@ describe('github:repo:push', () => { ...mockContext.input, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, }, }); @@ -482,6 +493,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -525,6 +537,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -546,6 +559,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: true, }); @@ -567,6 +581,7 @@ describe('github:repo:push', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.ts index 4c931e029c..9d470790fa 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubRepoPush.ts @@ -59,6 +59,7 @@ export function createGithubRepoPushAction(options: { | undefined; requiredStatusCheckContexts?: string[]; requireBranchesToBeUpToDate?: boolean; + requiredConversationResolution?: boolean; sourcePath?: string; token?: string; }>({ @@ -76,6 +77,8 @@ export function createGithubRepoPushAction(options: { requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, bypassPullRequestAllowances: inputProps.bypassPullRequestAllowances, requireBranchesToBeUpToDate: inputProps.requireBranchesToBeUpToDate, + requiredConversationResolution: + inputProps.requiredConversationResolution, defaultBranch: inputProps.defaultBranch, protectDefaultBranch: inputProps.protectDefaultBranch, protectEnforceAdmins: inputProps.protectEnforceAdmins, @@ -108,6 +111,7 @@ export function createGithubRepoPushAction(options: { bypassPullRequestAllowances, requiredStatusCheckContexts = [], requireBranchesToBeUpToDate = true, + requiredConversationResolution = false, token: providedToken, } = ctx.input; @@ -146,6 +150,7 @@ export function createGithubRepoPushAction(options: { bypassPullRequestAllowances, requiredStatusCheckContexts, requireBranchesToBeUpToDate, + requiredConversationResolution, config, ctx.logger, gitCommitMessage, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index 4dc7034f18..216a94ac57 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -258,6 +258,7 @@ export async function initRepoPushAndProtect( | undefined, requiredStatusCheckContexts: string[], requireBranchesToBeUpToDate: boolean, + requiredConversationResolution: boolean, config: Config, logger: any, gitCommitMessage?: string, @@ -303,6 +304,7 @@ export async function initRepoPushAndProtect( requireCodeOwnerReviews, requiredStatusCheckContexts, requireBranchesToBeUpToDate, + requiredConversationResolution, enforceAdmins: protectEnforceAdmins, dismissStaleReviews: dismissStaleReviews, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts index 6c3bebf47e..a99a3030ac 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/inputProperties.ts @@ -58,6 +58,12 @@ const requireBranchesToBeUpToDate = { description: `Require branches to be up to date before merging. The default value is 'true'`, type: 'boolean', }; +const requiredConversationResolution = { + title: 'Required Conversation Resolution', + description: + 'Requires all conversations on code to be resolved before a pull request can be merged into this branch', + type: 'boolean', +}; const repoVisibility = { title: 'Repository Visibility', type: 'string', @@ -216,6 +222,7 @@ export { requireCodeOwnerReviews }; export { dismissStaleReviews }; export { requiredStatusCheckContexts }; export { requireBranchesToBeUpToDate }; +export { requiredConversationResolution }; export { sourcePath }; export { token }; export { topics }; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts index a7d29ec756..74e5d4580b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts @@ -191,6 +191,7 @@ type BranchProtectionOptions = { apps?: string[]; }; requireBranchesToBeUpToDate?: boolean; + requiredConversationResolution?: boolean; defaultBranch?: string; enforceAdmins?: boolean; dismissStaleReviews?: boolean; @@ -205,6 +206,7 @@ export const enableBranchProtectionOnDefaultRepoBranch = async ({ bypassPullRequestAllowances, requiredStatusCheckContexts = [], requireBranchesToBeUpToDate = true, + requiredConversationResolution = false, defaultBranch = 'master', enforceAdmins = true, dismissStaleReviews = false, @@ -237,6 +239,7 @@ export const enableBranchProtectionOnDefaultRepoBranch = async ({ bypass_pull_request_allowances: bypassPullRequestAllowances, dismiss_stale_reviews: dismissStaleReviews, }, + required_conversation_resolution: requiredConversationResolution, }); } catch (e) { assertError(e); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts index b5bda4c5d0..99a8753452 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts @@ -670,6 +670,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -691,6 +692,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: true, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -712,6 +714,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -739,6 +742,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -760,6 +764,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: false, dismissStaleReviews: false, }); @@ -781,6 +786,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -808,6 +814,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -818,6 +825,7 @@ describe('publish:github', () => { ...mockContext.input, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, }, }); @@ -830,6 +838,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -852,6 +861,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: ['statusCheck'], requireBranchesToBeUpToDate: false, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -873,6 +883,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -955,6 +966,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); @@ -976,6 +988,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: true, }); @@ -997,6 +1010,7 @@ describe('publish:github', () => { requireCodeOwnerReviews: false, requiredStatusCheckContexts: [], requireBranchesToBeUpToDate: true, + requiredConversationResolution: false, enforceAdmins: true, dismissStaleReviews: false, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts index 1d3cce8067..e246234d2c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts @@ -71,6 +71,7 @@ export function createPublishGithubAction(options: { dismissStaleReviews?: boolean; requiredStatusCheckContexts?: string[]; requireBranchesToBeUpToDate?: boolean; + requiredConversationResolution?: boolean; repoVisibility?: 'private' | 'internal' | 'public'; collaborators?: Array< | { @@ -107,6 +108,8 @@ export function createPublishGithubAction(options: { dismissStaleReviews: inputProps.dismissStaleReviews, requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, requireBranchesToBeUpToDate: inputProps.requireBranchesToBeUpToDate, + requiredConversationResolution: + inputProps.requiredConversationResolution, repoVisibility: inputProps.repoVisibility, defaultBranch: inputProps.defaultBranch, protectDefaultBranch: inputProps.protectDefaultBranch, @@ -144,6 +147,7 @@ export function createPublishGithubAction(options: { bypassPullRequestAllowances, requiredStatusCheckContexts = [], requireBranchesToBeUpToDate = true, + requiredConversationResolution = false, repoVisibility = 'private', defaultBranch = 'master', protectDefaultBranch = true, @@ -211,6 +215,7 @@ export function createPublishGithubAction(options: { bypassPullRequestAllowances, requiredStatusCheckContexts, requireBranchesToBeUpToDate, + requiredConversationResolution, config, ctx.logger, gitCommitMessage,