diff --git a/README.md b/README.md index aee103ce..78c2fb61 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,9 @@ Each of the following helpers are defined in a file of the same name in `src/hel - If `login` is provided, it does nothing if that user is already part of the team - You can also pass a `slack_webhook_url` to notify the assignees that they are assigned to the PR! -### [check-merge-safety](.github/workflows/check-merge-safety.yml) +### [~~check-merge-safety~~](.github/workflows/check-merge-safety.yml) (DEPRECATED) + +> **Deprecated:** This helper is deprecated. Please use [GitHub's native merge queue](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue) instead. - Checks if a PR branch needs to update with the default branch prior to merging (great for monorepos!) - If this check succeeds for a PR, the PR is safe to merge right away! @@ -286,7 +288,9 @@ Additionally, the following parameters can be used for additional control over t - Adds a 'due soon' label to issues with a priority label that will become overdue in 7 days - Adds an 'overdue' label to issues with a priority label that are overdue -### [manage-merge-queue](.github/workflows/manage-merge-queue.yml) +### [~~manage-merge-queue~~](.github/workflows/manage-merge-queue.yml) (DEPRECATED) + +> **Deprecated:** This helper is deprecated. Please use [GitHub's native merge queue](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue) instead. - Manages a queue for PRs as follows: - Adding the `READY TO MERGE` label to a PR will add the PR to the "merge queue", represented by a `QUEUED FOR MERGE #X` label. Removing `READY TO MERGE` will remove this label and thus remove the PR from the queue. diff --git a/dist/helpers/check-merge-safety.js b/dist/helpers/check-merge-safety.js index 16bbe59a..0ccae1c6 100644 --- a/dist/helpers/check-merge-safety.js +++ b/dist/helpers/check-merge-safety.js @@ -44,6 +44,7 @@ var COMMENT_PATHS_MARKER = ""; class CheckMergeSafety extends HelperInputs { } var checkMergeSafety = async (inputs) => { + warning("check-merge-safety is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue"); const isPrWorkflow = Boolean(context.issue.number); if (!isPrWorkflow) { return handlePushWorkflow(inputs); @@ -258,4 +259,4 @@ export { CheckMergeSafety }; -//# debugId=8CCB3211353B88AF64756E2164756E21 +//# debugId=F4EC41763AC4ABEC64756E2164756E21 diff --git a/dist/helpers/check-merge-safety.js.map b/dist/helpers/check-merge-safety.js.map index 1435e6b9..9ce0614d 100644 --- a/dist/helpers/check-merge-safety.js.map +++ b/dist/helpers/check-merge-safety.js.map @@ -2,9 +2,9 @@ "version": 3, "sources": ["../src/helpers/check-merge-safety.ts"], "sourcesContent": [ - "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { HelperInputs } from '../types/generated';\nimport { context as githubContext } from '@actions/github';\nimport { simpleGit } from 'simple-git';\nimport { octokit } from '../octokit';\nimport micromatch from 'micromatch';\nimport { GithubError, PullRequest } from '../types/github';\nimport { paginateAllOpenPullRequests } from '../utils/paginate-open-pull-requests';\nimport { map } from 'bluebird';\nimport { setCommitStatus } from './set-commit-status';\nimport * as core from '@actions/core';\n\nconst git = simpleGit();\n\nconst maxBranchNameLength = 50;\nconst COMMENT_PATHS_MARKER = '';\n\nexport class CheckMergeSafety extends HelperInputs {\n declare context?: string;\n declare paths?: string;\n declare ignore_globs?: string;\n declare override_filter_paths?: string;\n declare override_filter_globs?: string;\n declare match_comment_paths?: string;\n}\n\nexport const checkMergeSafety = async (inputs: CheckMergeSafety) => {\n const isPrWorkflow = Boolean(githubContext.issue.number);\n if (!isPrWorkflow) {\n return handlePushWorkflow(inputs);\n }\n const { data: pullRequest } = await octokit.pulls.get({ pull_number: githubContext.issue.number, ...githubContext.repo });\n\n const { state, message } = await setMergeSafetyStatus(pullRequest, inputs);\n if (state === 'failure') {\n core.setFailed(message);\n }\n};\n\nconst setMergeSafetyStatus = async (pullRequest: PullRequest, { context = 'Merge Safety', ...inputs }: CheckMergeSafety) => {\n const { state, message } = await getMergeSafetyStateAndMessage(pullRequest, inputs);\n const hasExistingFailureStatus = await checkForExistingFailureStatus(pullRequest, context);\n if (hasExistingFailureStatus && state === 'failure') {\n const {\n head: {\n ref,\n user: { login: username }\n }\n } = pullRequest;\n const truncatedRef = ref.length > maxBranchNameLength ? `${ref.substring(0, maxBranchNameLength)}...` : ref;\n const truncatedBranchName = `${username}:${truncatedRef}`;\n core.info(`Found existing failure status for ${truncatedBranchName}, skipping setting new status`);\n } else {\n await setCommitStatus({\n sha: pullRequest.head.sha,\n state,\n context,\n description: message,\n ...githubContext.repo\n });\n }\n\n return { state, message };\n};\n\nconst handlePushWorkflow = async (inputs: CheckMergeSafety) => {\n const pullRequests = await paginateAllOpenPullRequests();\n const filteredPullRequests = pullRequests.filter(({ base, draft }) => !draft && base.ref === base.repo.default_branch);\n await map(filteredPullRequests, pullRequest => setMergeSafetyStatus(pullRequest as PullRequest, inputs));\n};\n\nconst checkForExistingFailureStatus = async (pullRequest: PullRequest, context: string) => {\n const { data } = await octokit.repos.getCombinedStatusForRef({\n ...githubContext.repo,\n ref: pullRequest.head.sha\n });\n if (data.state === 'failure') {\n const existingContext = data.statuses.find(status => status.context === context);\n return Boolean(existingContext);\n }\n return false;\n};\n\nconst fetchSha = async (repoUrl: string, sha: string) => {\n try {\n await git.fetch(repoUrl, sha, { '--depth': 1 });\n core.info(`Fetched ${sha} from ${repoUrl}`);\n } catch (err) {\n core.info(`Failed to fetch ${sha} from ${repoUrl}: ${(err as GithubError).message}`);\n throw new Error(`Failed to fetch ${sha} from ${repoUrl}: ${(err as GithubError).message}`);\n }\n};\n\nconst getDiffUsingGitCommand = async (repoUrl: string, baseSha: string, headSha: string): Promise => {\n // update local repo copy\n await fetchSha(repoUrl, baseSha);\n await fetchSha(repoUrl, headSha);\n\n try {\n const diff = await git.diff(['--name-only', baseSha, headSha]);\n return (diff ?? '').split('\\n').filter(Boolean);\n } catch (err) {\n core.error(`Failed to run local git diff for ${repoUrl}: ${(err as GithubError).message}`);\n throw new Error(`Failed to run local git diff for ${repoUrl}: ${(err as GithubError).message}`);\n }\n};\n\ntype DiffRefs = PullRequest['base' | 'head'];\nconst getDiff = async (compareBase: DiffRefs, compareHead: DiffRefs, basehead: string) => {\n let changedFileNames: string[] = [];\n try {\n const { data: { files: changedFiles } = {}, status } = await octokit.repos.compareCommitsWithBasehead({\n ...githubContext.repo,\n basehead\n });\n if (status > 400) {\n throw { status };\n }\n changedFileNames = changedFiles?.map(file => file.filename) ?? [];\n } catch (err) {\n core.info(`Failed to fetch diff: ${(err as GithubError).message} Status: ${(err as GithubError).status}`);\n\n // diff too large error\n if ((err as GithubError)?.status === 406 || (err as GithubError)?.message.includes('diff is taking too long to generate')) {\n core.info(`Attempting to generate diff using local git command`);\n if (compareBase.repo?.html_url) {\n changedFileNames = await getDiffUsingGitCommand(compareBase.repo?.html_url, compareBase.sha, compareHead.sha);\n } else {\n core.error(`Could not fetch repo url to run local git diff`);\n throw err;\n }\n } else {\n throw err;\n }\n }\n return changedFileNames;\n};\n\nconst getMergeSafetyStateAndMessage = async (\n pullRequest: PullRequest,\n { paths, ignore_globs, override_filter_paths, override_filter_globs, match_comment_paths }: CheckMergeSafety\n) => {\n const {\n base: {\n repo: {\n default_branch,\n owner: { login: baseOwner }\n }\n },\n head: {\n ref,\n user: { login: username }\n }\n } = pullRequest;\n\n const branchName = `${username}:${ref}`;\n const diffAgainstUserBranch = `${branchName}...${baseOwner}:${default_branch}`;\n let fileNamesWhichBranchIsBehindOn;\n try {\n fileNamesWhichBranchIsBehindOn = await getDiff(pullRequest.head, pullRequest.base, diffAgainstUserBranch);\n } catch (err) {\n const message = diffErrorMessage(diffAgainstUserBranch, (err as GithubError).message);\n core.error(message);\n return { state: 'failure', message } as const;\n }\n\n const truncatedRef = ref.length > maxBranchNameLength ? `${ref.substring(0, maxBranchNameLength)}...` : ref;\n const truncatedBranchName = `${username}:${truncatedRef}`;\n\n if (match_comment_paths === 'true') {\n const commentPaths = await getPathsFromComment(pullRequest.number);\n\n if (commentPaths.length) {\n core.info(`Found ${commentPaths.length} paths from PR comment`);\n\n const outdatedCommentPaths = commentPaths.filter(commentPath =>\n fileNamesWhichBranchIsBehindOn.some(file => file.startsWith(commentPath + '/') || file === commentPath)\n );\n\n if (outdatedCommentPaths.length) {\n core.error(buildErrorMessage(outdatedCommentPaths, 'comment paths', truncatedBranchName));\n const displayPaths = outdatedCommentPaths.slice(0, 3).join(', ');\n const suffix = outdatedCommentPaths.length > 3 ? '...' : '';\n return {\n state: 'failure',\n message: `Branch is behind on paths from comment: ${displayPaths}${suffix}. Please update with ${default_branch}.`\n } as const;\n }\n } else {\n core.info('No paths found in PR comment, skipping comment path matching check');\n }\n }\n\n const globalFilesOutdatedOnBranch = override_filter_globs\n ? micromatch(fileNamesWhichBranchIsBehindOn, override_filter_globs.split(/[\\n,]/))\n : override_filter_paths\n ? fileNamesWhichBranchIsBehindOn.filter(changedFile => override_filter_paths.split(/[\\n,]/).includes(changedFile))\n : [];\n\n if (globalFilesOutdatedOnBranch.length) {\n core.error(buildErrorMessage(globalFilesOutdatedOnBranch, 'global files', truncatedBranchName));\n return {\n state: 'failure',\n message: `This branch has one or more outdated global files. Please update with ${default_branch}.`\n } as const;\n }\n\n const diffAgainstDefaultBranch = `${baseOwner}:${default_branch}...${branchName}`;\n let changedFileNames;\n try {\n changedFileNames = await getDiff(pullRequest.base, pullRequest.head, diffAgainstDefaultBranch);\n } catch (err) {\n const message = diffErrorMessage(diffAgainstDefaultBranch, (err as GithubError).message);\n core.error(message);\n return { state: 'failure', message } as const;\n }\n\n const changedFilesToIgnore = changedFileNames && ignore_globs ? micromatch(changedFileNames, ignore_globs.split(/[\\n,]/)) : [];\n const filteredFileNames = changedFileNames?.filter(file => !changedFilesToIgnore.includes(file));\n const allProjectDirectories = paths?.split(/[\\n,]/);\n\n const changedProjectsOutdatedOnBranch = allProjectDirectories?.filter(\n dir => fileNamesWhichBranchIsBehindOn.some(file => file.includes(dir)) && filteredFileNames?.some(file => file.includes(dir))\n );\n\n if (changedProjectsOutdatedOnBranch?.length) {\n core.error(buildErrorMessage(changedProjectsOutdatedOnBranch, 'projects', truncatedBranchName));\n return {\n state: 'failure',\n message: `This branch has one or more outdated projects. Please update with ${default_branch}.`\n } as const;\n }\n\n const safeMessage = buildSuccessMessage(truncatedBranchName);\n core.info(safeMessage);\n return {\n state: 'success',\n message: safeMessage\n } as const;\n};\n\nconst buildErrorMessage = (paths: string[], pathType: 'projects' | 'global files' | 'comment paths', branchName: string) =>\n `\nThe following ${pathType} are outdated on branch ${branchName}\n\n${paths.map(path => `* ${path}`).join('\\n')}\n`;\n\nconst diffErrorMessage = (basehead: string, message = '') =>\n `Failed to generate diff for ${basehead}. Please verify SHAs are valid and try again.${message ? `\\nError: ${message}` : ''}`;\n\nconst buildSuccessMessage = (branchName: string) => `Branch ${branchName} is safe to merge!`;\n\nconst getPathsFromComment = async (pullNumber: number): Promise => {\n const { data: comments } = await octokit.issues.listComments({\n ...githubContext.repo,\n issue_number: pullNumber\n });\n\n const pathsComment = comments.find(c => c.body?.includes(COMMENT_PATHS_MARKER));\n if (!pathsComment?.body) {\n return [];\n }\n\n const jsonMatch = pathsComment.body.match(/```json\\n([\\s\\S]*?)\\n```/);\n if (!jsonMatch?.[1]) {\n return [];\n }\n\n try {\n const parsed: unknown = JSON.parse(jsonMatch[1]);\n if (Array.isArray(parsed) && parsed.every(item => typeof item === 'string')) {\n return parsed;\n }\n return [];\n } catch {\n core.warning(`Failed to parse paths from PR #${pullNumber} comment`);\n return [];\n }\n};\n" + "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { HelperInputs } from '../types/generated';\nimport { context as githubContext } from '@actions/github';\nimport { simpleGit } from 'simple-git';\nimport { octokit } from '../octokit';\nimport micromatch from 'micromatch';\nimport { GithubError, PullRequest } from '../types/github';\nimport { paginateAllOpenPullRequests } from '../utils/paginate-open-pull-requests';\nimport { map } from 'bluebird';\nimport { setCommitStatus } from './set-commit-status';\nimport * as core from '@actions/core';\n\nconst git = simpleGit();\n\nconst maxBranchNameLength = 50;\nconst COMMENT_PATHS_MARKER = '';\n\nexport class CheckMergeSafety extends HelperInputs {\n declare context?: string;\n declare paths?: string;\n declare ignore_globs?: string;\n declare override_filter_paths?: string;\n declare override_filter_globs?: string;\n declare match_comment_paths?: string;\n}\n\nexport const checkMergeSafety = async (inputs: CheckMergeSafety) => {\n core.warning(\n \"check-merge-safety is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue\"\n );\n const isPrWorkflow = Boolean(githubContext.issue.number);\n if (!isPrWorkflow) {\n return handlePushWorkflow(inputs);\n }\n const { data: pullRequest } = await octokit.pulls.get({ pull_number: githubContext.issue.number, ...githubContext.repo });\n\n const { state, message } = await setMergeSafetyStatus(pullRequest, inputs);\n if (state === 'failure') {\n core.setFailed(message);\n }\n};\n\nconst setMergeSafetyStatus = async (pullRequest: PullRequest, { context = 'Merge Safety', ...inputs }: CheckMergeSafety) => {\n const { state, message } = await getMergeSafetyStateAndMessage(pullRequest, inputs);\n const hasExistingFailureStatus = await checkForExistingFailureStatus(pullRequest, context);\n if (hasExistingFailureStatus && state === 'failure') {\n const {\n head: {\n ref,\n user: { login: username }\n }\n } = pullRequest;\n const truncatedRef = ref.length > maxBranchNameLength ? `${ref.substring(0, maxBranchNameLength)}...` : ref;\n const truncatedBranchName = `${username}:${truncatedRef}`;\n core.info(`Found existing failure status for ${truncatedBranchName}, skipping setting new status`);\n } else {\n await setCommitStatus({\n sha: pullRequest.head.sha,\n state,\n context,\n description: message,\n ...githubContext.repo\n });\n }\n\n return { state, message };\n};\n\nconst handlePushWorkflow = async (inputs: CheckMergeSafety) => {\n const pullRequests = await paginateAllOpenPullRequests();\n const filteredPullRequests = pullRequests.filter(({ base, draft }) => !draft && base.ref === base.repo.default_branch);\n await map(filteredPullRequests, pullRequest => setMergeSafetyStatus(pullRequest as PullRequest, inputs));\n};\n\nconst checkForExistingFailureStatus = async (pullRequest: PullRequest, context: string) => {\n const { data } = await octokit.repos.getCombinedStatusForRef({\n ...githubContext.repo,\n ref: pullRequest.head.sha\n });\n if (data.state === 'failure') {\n const existingContext = data.statuses.find(status => status.context === context);\n return Boolean(existingContext);\n }\n return false;\n};\n\nconst fetchSha = async (repoUrl: string, sha: string) => {\n try {\n await git.fetch(repoUrl, sha, { '--depth': 1 });\n core.info(`Fetched ${sha} from ${repoUrl}`);\n } catch (err) {\n core.info(`Failed to fetch ${sha} from ${repoUrl}: ${(err as GithubError).message}`);\n throw new Error(`Failed to fetch ${sha} from ${repoUrl}: ${(err as GithubError).message}`);\n }\n};\n\nconst getDiffUsingGitCommand = async (repoUrl: string, baseSha: string, headSha: string): Promise => {\n // update local repo copy\n await fetchSha(repoUrl, baseSha);\n await fetchSha(repoUrl, headSha);\n\n try {\n const diff = await git.diff(['--name-only', baseSha, headSha]);\n return (diff ?? '').split('\\n').filter(Boolean);\n } catch (err) {\n core.error(`Failed to run local git diff for ${repoUrl}: ${(err as GithubError).message}`);\n throw new Error(`Failed to run local git diff for ${repoUrl}: ${(err as GithubError).message}`);\n }\n};\n\ntype DiffRefs = PullRequest['base' | 'head'];\nconst getDiff = async (compareBase: DiffRefs, compareHead: DiffRefs, basehead: string) => {\n let changedFileNames: string[] = [];\n try {\n const { data: { files: changedFiles } = {}, status } = await octokit.repos.compareCommitsWithBasehead({\n ...githubContext.repo,\n basehead\n });\n if (status > 400) {\n throw { status };\n }\n changedFileNames = changedFiles?.map(file => file.filename) ?? [];\n } catch (err) {\n core.info(`Failed to fetch diff: ${(err as GithubError).message} Status: ${(err as GithubError).status}`);\n\n // diff too large error\n if ((err as GithubError)?.status === 406 || (err as GithubError)?.message.includes('diff is taking too long to generate')) {\n core.info(`Attempting to generate diff using local git command`);\n if (compareBase.repo?.html_url) {\n changedFileNames = await getDiffUsingGitCommand(compareBase.repo?.html_url, compareBase.sha, compareHead.sha);\n } else {\n core.error(`Could not fetch repo url to run local git diff`);\n throw err;\n }\n } else {\n throw err;\n }\n }\n return changedFileNames;\n};\n\nconst getMergeSafetyStateAndMessage = async (\n pullRequest: PullRequest,\n { paths, ignore_globs, override_filter_paths, override_filter_globs, match_comment_paths }: CheckMergeSafety\n) => {\n const {\n base: {\n repo: {\n default_branch,\n owner: { login: baseOwner }\n }\n },\n head: {\n ref,\n user: { login: username }\n }\n } = pullRequest;\n\n const branchName = `${username}:${ref}`;\n const diffAgainstUserBranch = `${branchName}...${baseOwner}:${default_branch}`;\n let fileNamesWhichBranchIsBehindOn;\n try {\n fileNamesWhichBranchIsBehindOn = await getDiff(pullRequest.head, pullRequest.base, diffAgainstUserBranch);\n } catch (err) {\n const message = diffErrorMessage(diffAgainstUserBranch, (err as GithubError).message);\n core.error(message);\n return { state: 'failure', message } as const;\n }\n\n const truncatedRef = ref.length > maxBranchNameLength ? `${ref.substring(0, maxBranchNameLength)}...` : ref;\n const truncatedBranchName = `${username}:${truncatedRef}`;\n\n if (match_comment_paths === 'true') {\n const commentPaths = await getPathsFromComment(pullRequest.number);\n\n if (commentPaths.length) {\n core.info(`Found ${commentPaths.length} paths from PR comment`);\n\n const outdatedCommentPaths = commentPaths.filter(commentPath =>\n fileNamesWhichBranchIsBehindOn.some(file => file.startsWith(commentPath + '/') || file === commentPath)\n );\n\n if (outdatedCommentPaths.length) {\n core.error(buildErrorMessage(outdatedCommentPaths, 'comment paths', truncatedBranchName));\n const displayPaths = outdatedCommentPaths.slice(0, 3).join(', ');\n const suffix = outdatedCommentPaths.length > 3 ? '...' : '';\n return {\n state: 'failure',\n message: `Branch is behind on paths from comment: ${displayPaths}${suffix}. Please update with ${default_branch}.`\n } as const;\n }\n } else {\n core.info('No paths found in PR comment, skipping comment path matching check');\n }\n }\n\n const globalFilesOutdatedOnBranch = override_filter_globs\n ? micromatch(fileNamesWhichBranchIsBehindOn, override_filter_globs.split(/[\\n,]/))\n : override_filter_paths\n ? fileNamesWhichBranchIsBehindOn.filter(changedFile => override_filter_paths.split(/[\\n,]/).includes(changedFile))\n : [];\n\n if (globalFilesOutdatedOnBranch.length) {\n core.error(buildErrorMessage(globalFilesOutdatedOnBranch, 'global files', truncatedBranchName));\n return {\n state: 'failure',\n message: `This branch has one or more outdated global files. Please update with ${default_branch}.`\n } as const;\n }\n\n const diffAgainstDefaultBranch = `${baseOwner}:${default_branch}...${branchName}`;\n let changedFileNames;\n try {\n changedFileNames = await getDiff(pullRequest.base, pullRequest.head, diffAgainstDefaultBranch);\n } catch (err) {\n const message = diffErrorMessage(diffAgainstDefaultBranch, (err as GithubError).message);\n core.error(message);\n return { state: 'failure', message } as const;\n }\n\n const changedFilesToIgnore = changedFileNames && ignore_globs ? micromatch(changedFileNames, ignore_globs.split(/[\\n,]/)) : [];\n const filteredFileNames = changedFileNames?.filter(file => !changedFilesToIgnore.includes(file));\n const allProjectDirectories = paths?.split(/[\\n,]/);\n\n const changedProjectsOutdatedOnBranch = allProjectDirectories?.filter(\n dir => fileNamesWhichBranchIsBehindOn.some(file => file.includes(dir)) && filteredFileNames?.some(file => file.includes(dir))\n );\n\n if (changedProjectsOutdatedOnBranch?.length) {\n core.error(buildErrorMessage(changedProjectsOutdatedOnBranch, 'projects', truncatedBranchName));\n return {\n state: 'failure',\n message: `This branch has one or more outdated projects. Please update with ${default_branch}.`\n } as const;\n }\n\n const safeMessage = buildSuccessMessage(truncatedBranchName);\n core.info(safeMessage);\n return {\n state: 'success',\n message: safeMessage\n } as const;\n};\n\nconst buildErrorMessage = (paths: string[], pathType: 'projects' | 'global files' | 'comment paths', branchName: string) =>\n `\nThe following ${pathType} are outdated on branch ${branchName}\n\n${paths.map(path => `* ${path}`).join('\\n')}\n`;\n\nconst diffErrorMessage = (basehead: string, message = '') =>\n `Failed to generate diff for ${basehead}. Please verify SHAs are valid and try again.${message ? `\\nError: ${message}` : ''}`;\n\nconst buildSuccessMessage = (branchName: string) => `Branch ${branchName} is safe to merge!`;\n\nconst getPathsFromComment = async (pullNumber: number): Promise => {\n const { data: comments } = await octokit.issues.listComments({\n ...githubContext.repo,\n issue_number: pullNumber\n });\n\n const pathsComment = comments.find(c => c.body?.includes(COMMENT_PATHS_MARKER));\n if (!pathsComment?.body) {\n return [];\n }\n\n const jsonMatch = pathsComment.body.match(/```json\\n([\\s\\S]*?)\\n```/);\n if (!jsonMatch?.[1]) {\n return [];\n }\n\n try {\n const parsed: unknown = JSON.parse(jsonMatch[1]);\n if (Array.isArray(parsed) && parsed.every(item => typeof item === 'string')) {\n return parsed;\n }\n return [];\n } catch {\n core.warning(`Failed to parse paths from PR #${pullNumber} comment`);\n return [];\n }\n};\n" ], - "mappings": "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", - "debugId": "8CCB3211353B88AF64756E2164756E21", + "mappings": "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", + "debugId": "F4EC41763AC4ABEC64756E2164756E21", "names": [] } \ No newline at end of file diff --git a/dist/helpers/manage-merge-queue.js b/dist/helpers/manage-merge-queue.js index 0a1f0488..819ce57e 100644 --- a/dist/helpers/manage-merge-queue.js +++ b/dist/helpers/manage-merge-queue.js @@ -3,7 +3,7 @@ import { enableAutoMerge, manageMergeQueue, removePrFromQueue -} from "../main-1dad8qjs.js"; +} from "../main-yrwb8zcb.js"; import"../main-f57sjs6g.js"; import"../main-fk67p72v.js"; import"../main-3vz73ekb.js"; diff --git a/dist/helpers/prepare-queued-pr-for-merge.js b/dist/helpers/prepare-queued-pr-for-merge.js index 817240b6..3b3ce677 100644 --- a/dist/helpers/prepare-queued-pr-for-merge.js +++ b/dist/helpers/prepare-queued-pr-for-merge.js @@ -1,7 +1,7 @@ import { prepareQueuedPrForMerge, updatePrWithDefaultBranch -} from "../main-1dad8qjs.js"; +} from "../main-yrwb8zcb.js"; import"../main-f57sjs6g.js"; import"../main-fk67p72v.js"; import"../main-3vz73ekb.js"; diff --git a/dist/main-1dad8qjs.js b/dist/main-yrwb8zcb.js similarity index 97% rename from dist/main-1dad8qjs.js rename to dist/main-yrwb8zcb.js index f6c3773d..3f8fecc5 100644 --- a/dist/main-1dad8qjs.js +++ b/dist/main-yrwb8zcb.js @@ -139,6 +139,7 @@ var manageMergeQueue = async ({ allow_only_for_maintainers, pattern } = {}) => { + warning("manage-merge-queue is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue"); const { data: pullRequest } = await octokit.pulls.get({ pull_number: context.issue.number, ...context.repo }); if (pullRequest.merged || !pullRequest.labels.find((label) => label.name === READY_FOR_MERGE_PR_LABEL)) { info("This PR is not in the merge queue."); @@ -304,4 +305,4 @@ var updatePrWithDefaultBranch = async (pullRequest) => { export { prepareQueuedPrForMerge, updatePrWithDefaultBranch, ManageMergeQueue, manageMergeQueue, removePrFromQueue, enableAutoMerge }; -//# debugId=89067C53C7C247CA64756E2164756E21 +//# debugId=37FACE3969ED272964756E2164756E21 diff --git a/dist/main-1dad8qjs.js.map b/dist/main-yrwb8zcb.js.map similarity index 53% rename from dist/main-1dad8qjs.js.map rename to dist/main-yrwb8zcb.js.map index 89fa6e41..286226f1 100644 --- a/dist/main-1dad8qjs.js.map +++ b/dist/main-yrwb8zcb.js.map @@ -3,10 +3,10 @@ "sources": ["../src/utils/update-merge-queue.ts", "../src/helpers/manage-merge-queue.ts", "../src/helpers/prepare-queued-pr-for-merge.ts"], "sourcesContent": [ "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { JUMP_THE_QUEUE_PR_LABEL, MERGE_QUEUE_STATUS, QUEUED_FOR_MERGE_PREFIX } from '../constants';\nimport { PullRequestList } from '../types/github';\nimport { context } from '@actions/github';\nimport { map } from 'bluebird';\nimport { octokit } from '../octokit';\nimport { removeLabelIfExists } from '../helpers/remove-label';\nimport { updatePrWithDefaultBranch } from '../helpers/prepare-queued-pr-for-merge';\nimport { setCommitStatus } from '../helpers/set-commit-status';\n\nexport const updateMergeQueue = (queuedPrs: PullRequestList) => {\n const sortedPrs = sortPrsByQueuePosition(queuedPrs);\n return map(sortedPrs, updateQueuePosition);\n};\n\nconst sortPrsByQueuePosition = (queuedPrs: PullRequestList) =>\n queuedPrs\n .map(pr => {\n const label = pr.labels.find(label => label.name?.startsWith(QUEUED_FOR_MERGE_PREFIX))?.name;\n const hasJumpTheQueueLabel = Boolean(pr.labels.find(label => label.name === JUMP_THE_QUEUE_PR_LABEL));\n const queuePosition = Number(label?.split('#')?.[1]);\n return {\n number: pr.number,\n label,\n hasJumpTheQueueLabel,\n queuePosition,\n sha: pr.head.sha\n };\n })\n .sort((pr1, pr2) => {\n if (pr1.hasJumpTheQueueLabel) {\n return -1;\n }\n if (pr2.hasJumpTheQueueLabel) {\n return 1;\n }\n return pr1.queuePosition - pr2.queuePosition;\n });\n\nconst updateQueuePosition = async (pr: ReturnType[number], index: number) => {\n const { number, label, queuePosition, sha, hasJumpTheQueueLabel } = pr;\n const newQueuePosition = index + 1;\n if (!label || isNaN(queuePosition) || queuePosition === newQueuePosition) {\n return;\n }\n if (hasJumpTheQueueLabel) {\n await removeLabelIfExists(JUMP_THE_QUEUE_PR_LABEL, number);\n }\n\n const prIsNowFirstInQueue = newQueuePosition === 1;\n if (prIsNowFirstInQueue) {\n const { data: firstPrInQueue } = await octokit.pulls.get({ pull_number: number, ...context.repo });\n await updatePrWithDefaultBranch(firstPrInQueue);\n const {\n data: {\n head: { sha: updatedHeadSha }\n }\n } = await octokit.pulls.get({ pull_number: number, ...context.repo });\n return Promise.all([\n octokit.issues.addLabels({\n labels: [`${QUEUED_FOR_MERGE_PREFIX} #${newQueuePosition}`],\n issue_number: number,\n ...context.repo\n }),\n removeLabelIfExists(label, number),\n setCommitStatus({\n sha: updatedHeadSha,\n context: MERGE_QUEUE_STATUS,\n state: 'success',\n description: 'This PR is next to merge.'\n })\n ]);\n }\n\n return Promise.all([\n octokit.issues.addLabels({\n labels: [`${QUEUED_FOR_MERGE_PREFIX} #${newQueuePosition}`],\n issue_number: number,\n ...context.repo\n }),\n removeLabelIfExists(label, number),\n setCommitStatus({\n sha,\n context: MERGE_QUEUE_STATUS,\n state: 'pending',\n description: 'This PR is in line to merge.'\n })\n ]);\n};\n", - "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as core from '@actions/core';\nimport {\n FIRST_QUEUED_PR_LABEL,\n JUMP_THE_QUEUE_PR_LABEL,\n MERGE_QUEUE_STATUS,\n QUEUED_FOR_MERGE_PREFIX,\n READY_FOR_MERGE_PR_LABEL\n} from '../constants';\nimport { HelperInputs } from '../types/generated';\nimport { PullRequest, PullRequestList } from '../types/github';\nimport { context } from '@actions/github';\nimport { notifyUser } from '../utils/notify-user';\nimport { octokit, octokitGraphql } from '../octokit';\nimport { removeLabelIfExists } from './remove-label';\nimport { setCommitStatus } from './set-commit-status';\nimport { updateMergeQueue } from '../utils/update-merge-queue';\nimport { paginateAllOpenPullRequests } from '../utils/paginate-open-pull-requests';\nimport { updatePrWithDefaultBranch } from './prepare-queued-pr-for-merge';\nimport { approvalsSatisfied } from './approvals-satisfied';\nimport { createPrComment } from './create-pr-comment';\nimport { isUserInTeam } from './is-user-in-team';\nimport { getEmailOnUserProfile } from './get-email-on-user-profile';\n\nexport class ManageMergeQueue extends HelperInputs {\n declare max_queue_size?: string;\n declare login?: string;\n declare slack_webhook_url?: string;\n declare skip_auto_merge?: string;\n declare team?: string;\n declare allow_only_for_maintainers?: string;\n declare pattern?: string;\n}\n\nexport const manageMergeQueue = async ({\n max_queue_size,\n login,\n slack_webhook_url,\n skip_auto_merge,\n team = '',\n allow_only_for_maintainers,\n pattern\n}: ManageMergeQueue = {}) => {\n const { data: pullRequest } = await octokit.pulls.get({ pull_number: context.issue.number, ...context.repo });\n if (pullRequest.merged || !pullRequest.labels.find(label => label.name === READY_FOR_MERGE_PR_LABEL)) {\n core.info('This PR is not in the merge queue.');\n return removePrFromQueue(pullRequest);\n }\n const prMeetsRequiredApprovals = await approvalsSatisfied({\n body: 'PRs must meet all required approvals before entering the merge queue.'\n });\n if (!prMeetsRequiredApprovals) {\n return removePrFromQueue(pullRequest);\n }\n if (slack_webhook_url && login) {\n const email = await getEmailOnUserProfile({ login, pattern });\n if (!email) {\n const patternText = pattern ? `, and it must match the regex pattern \\`${pattern}\\`` : '';\n await createPrComment({\n body: `@${login} Your PR cannot be added to the queue because your email must be set on your GitHub profile${patternText}. Follow the instructions [here](${githubEmailDocsLink}) to add or fix your email on ${context.serverUrl}!`\n });\n return removePrFromQueue(pullRequest);\n }\n }\n\n const queuedPrs = await getQueuedPullRequests();\n const queuePosition = queuedPrs.length + 1;\n const prAttemptingToJoinQueue = pullRequest.labels.every(label => !label.name?.startsWith(QUEUED_FOR_MERGE_PREFIX));\n\n if (prAttemptingToJoinQueue && queuePosition > Number(max_queue_size)) {\n await createPrComment({\n body: `The merge queue is full! Only ${max_queue_size} PRs are allowed in the queue at a time.\\n\\nIf you would like to merge your PR, please monitor the PRs in the queue and make sure the authors are around to merge them.`\n });\n return removePrFromQueue(pullRequest);\n }\n\n if (pullRequest.labels.find(label => label.name === JUMP_THE_QUEUE_PR_LABEL)) {\n if (allow_only_for_maintainers === 'true') {\n core.info(`Checking if user ${login} is a maintainer...`);\n const isMaintainer = await isUserInTeam({ login: context.actor, team: team });\n if (!isMaintainer) {\n await removeLabelIfExists(JUMP_THE_QUEUE_PR_LABEL, pullRequest.number);\n return await createPrComment({\n body: `@${context.actor} Only core maintainers can jump the queue. Please have a core maintainer jump the queue for you.`\n });\n }\n }\n\n return updateMergeQueue(queuedPrs);\n }\n\n if (prAttemptingToJoinQueue) {\n await addPrToQueue(pullRequest, queuePosition, skip_auto_merge);\n }\n\n const isFirstQueuePosition = queuePosition === 1 || pullRequest.labels.find(label => label.name === FIRST_QUEUED_PR_LABEL);\n\n if (isFirstQueuePosition) {\n await updatePrWithDefaultBranch(pullRequest);\n }\n\n await setCommitStatus({\n sha: pullRequest.head.sha,\n context: MERGE_QUEUE_STATUS,\n state: isFirstQueuePosition ? 'success' : 'pending',\n description: isFirstQueuePosition ? 'This PR is next to merge.' : 'This PR is in line to merge.'\n });\n\n if (isFirstQueuePosition && slack_webhook_url && login) {\n await notifyUser({\n login,\n pull_number: context.issue.number,\n slack_webhook_url\n });\n }\n};\n\nexport const removePrFromQueue = async (pullRequest: PullRequest) => {\n await removeLabelIfExists(READY_FOR_MERGE_PR_LABEL, pullRequest.number);\n const queueLabel = pullRequest.labels.find(label => label.name?.startsWith(QUEUED_FOR_MERGE_PREFIX))?.name;\n if (queueLabel) {\n await removeLabelIfExists(queueLabel, pullRequest.number);\n }\n await setCommitStatus({\n sha: pullRequest.head.sha,\n context: MERGE_QUEUE_STATUS,\n state: 'pending',\n description: 'This PR is not in the merge queue.'\n });\n const queuedPrs = await getQueuedPullRequests();\n return updateMergeQueue(queuedPrs);\n};\n\nconst addPrToQueue = async (pullRequest: PullRequest, queuePosition: number, skip_auto_merge?: string) => {\n await octokit.issues.addLabels({\n labels: [`${QUEUED_FOR_MERGE_PREFIX} #${queuePosition}`],\n issue_number: context.issue.number,\n ...context.repo\n });\n if (skip_auto_merge == 'true') {\n core.info('Skipping auto merge per configuration.');\n return;\n }\n await enableAutoMerge(pullRequest.node_id);\n};\n\nconst getQueuedPullRequests = async (): Promise => {\n const openPullRequests = await paginateAllOpenPullRequests();\n return openPullRequests.filter(\n pr =>\n pr.labels.some(label => label.name === READY_FOR_MERGE_PR_LABEL) &&\n pr.labels.some(label => label.name.startsWith(QUEUED_FOR_MERGE_PREFIX))\n );\n};\n\nexport const enableAutoMerge = async (pullRequestId: string, mergeMethod = 'SQUASH') => {\n try {\n await octokitGraphql(`\n mutation {\n enablePullRequestAutoMerge(input: { pullRequestId: \"${pullRequestId}\", mergeMethod: ${mergeMethod} }) {\n clientMutationId\n }\n }\n `);\n } catch (error) {\n core.warning('Auto merge could not be enabled. Perhaps you need to enable auto-merge on your repo?');\n core.warning(error as Error);\n }\n};\n\nconst githubEmailDocsLink =\n 'https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address';\n", + "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as core from '@actions/core';\nimport {\n FIRST_QUEUED_PR_LABEL,\n JUMP_THE_QUEUE_PR_LABEL,\n MERGE_QUEUE_STATUS,\n QUEUED_FOR_MERGE_PREFIX,\n READY_FOR_MERGE_PR_LABEL\n} from '../constants';\nimport { HelperInputs } from '../types/generated';\nimport { PullRequest, PullRequestList } from '../types/github';\nimport { context } from '@actions/github';\nimport { notifyUser } from '../utils/notify-user';\nimport { octokit, octokitGraphql } from '../octokit';\nimport { removeLabelIfExists } from './remove-label';\nimport { setCommitStatus } from './set-commit-status';\nimport { updateMergeQueue } from '../utils/update-merge-queue';\nimport { paginateAllOpenPullRequests } from '../utils/paginate-open-pull-requests';\nimport { updatePrWithDefaultBranch } from './prepare-queued-pr-for-merge';\nimport { approvalsSatisfied } from './approvals-satisfied';\nimport { createPrComment } from './create-pr-comment';\nimport { isUserInTeam } from './is-user-in-team';\nimport { getEmailOnUserProfile } from './get-email-on-user-profile';\n\nexport class ManageMergeQueue extends HelperInputs {\n declare max_queue_size?: string;\n declare login?: string;\n declare slack_webhook_url?: string;\n declare skip_auto_merge?: string;\n declare team?: string;\n declare allow_only_for_maintainers?: string;\n declare pattern?: string;\n}\n\nexport const manageMergeQueue = async ({\n max_queue_size,\n login,\n slack_webhook_url,\n skip_auto_merge,\n team = '',\n allow_only_for_maintainers,\n pattern\n}: ManageMergeQueue = {}) => {\n core.warning(\n \"manage-merge-queue is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue\"\n );\n const { data: pullRequest } = await octokit.pulls.get({ pull_number: context.issue.number, ...context.repo });\n if (pullRequest.merged || !pullRequest.labels.find(label => label.name === READY_FOR_MERGE_PR_LABEL)) {\n core.info('This PR is not in the merge queue.');\n return removePrFromQueue(pullRequest);\n }\n const prMeetsRequiredApprovals = await approvalsSatisfied({\n body: 'PRs must meet all required approvals before entering the merge queue.'\n });\n if (!prMeetsRequiredApprovals) {\n return removePrFromQueue(pullRequest);\n }\n if (slack_webhook_url && login) {\n const email = await getEmailOnUserProfile({ login, pattern });\n if (!email) {\n const patternText = pattern ? `, and it must match the regex pattern \\`${pattern}\\`` : '';\n await createPrComment({\n body: `@${login} Your PR cannot be added to the queue because your email must be set on your GitHub profile${patternText}. Follow the instructions [here](${githubEmailDocsLink}) to add or fix your email on ${context.serverUrl}!`\n });\n return removePrFromQueue(pullRequest);\n }\n }\n\n const queuedPrs = await getQueuedPullRequests();\n const queuePosition = queuedPrs.length + 1;\n const prAttemptingToJoinQueue = pullRequest.labels.every(label => !label.name?.startsWith(QUEUED_FOR_MERGE_PREFIX));\n\n if (prAttemptingToJoinQueue && queuePosition > Number(max_queue_size)) {\n await createPrComment({\n body: `The merge queue is full! Only ${max_queue_size} PRs are allowed in the queue at a time.\\n\\nIf you would like to merge your PR, please monitor the PRs in the queue and make sure the authors are around to merge them.`\n });\n return removePrFromQueue(pullRequest);\n }\n\n if (pullRequest.labels.find(label => label.name === JUMP_THE_QUEUE_PR_LABEL)) {\n if (allow_only_for_maintainers === 'true') {\n core.info(`Checking if user ${login} is a maintainer...`);\n const isMaintainer = await isUserInTeam({ login: context.actor, team: team });\n if (!isMaintainer) {\n await removeLabelIfExists(JUMP_THE_QUEUE_PR_LABEL, pullRequest.number);\n return await createPrComment({\n body: `@${context.actor} Only core maintainers can jump the queue. Please have a core maintainer jump the queue for you.`\n });\n }\n }\n\n return updateMergeQueue(queuedPrs);\n }\n\n if (prAttemptingToJoinQueue) {\n await addPrToQueue(pullRequest, queuePosition, skip_auto_merge);\n }\n\n const isFirstQueuePosition = queuePosition === 1 || pullRequest.labels.find(label => label.name === FIRST_QUEUED_PR_LABEL);\n\n if (isFirstQueuePosition) {\n await updatePrWithDefaultBranch(pullRequest);\n }\n\n await setCommitStatus({\n sha: pullRequest.head.sha,\n context: MERGE_QUEUE_STATUS,\n state: isFirstQueuePosition ? 'success' : 'pending',\n description: isFirstQueuePosition ? 'This PR is next to merge.' : 'This PR is in line to merge.'\n });\n\n if (isFirstQueuePosition && slack_webhook_url && login) {\n await notifyUser({\n login,\n pull_number: context.issue.number,\n slack_webhook_url\n });\n }\n};\n\nexport const removePrFromQueue = async (pullRequest: PullRequest) => {\n await removeLabelIfExists(READY_FOR_MERGE_PR_LABEL, pullRequest.number);\n const queueLabel = pullRequest.labels.find(label => label.name?.startsWith(QUEUED_FOR_MERGE_PREFIX))?.name;\n if (queueLabel) {\n await removeLabelIfExists(queueLabel, pullRequest.number);\n }\n await setCommitStatus({\n sha: pullRequest.head.sha,\n context: MERGE_QUEUE_STATUS,\n state: 'pending',\n description: 'This PR is not in the merge queue.'\n });\n const queuedPrs = await getQueuedPullRequests();\n return updateMergeQueue(queuedPrs);\n};\n\nconst addPrToQueue = async (pullRequest: PullRequest, queuePosition: number, skip_auto_merge?: string) => {\n await octokit.issues.addLabels({\n labels: [`${QUEUED_FOR_MERGE_PREFIX} #${queuePosition}`],\n issue_number: context.issue.number,\n ...context.repo\n });\n if (skip_auto_merge == 'true') {\n core.info('Skipping auto merge per configuration.');\n return;\n }\n await enableAutoMerge(pullRequest.node_id);\n};\n\nconst getQueuedPullRequests = async (): Promise => {\n const openPullRequests = await paginateAllOpenPullRequests();\n return openPullRequests.filter(\n pr =>\n pr.labels.some(label => label.name === READY_FOR_MERGE_PR_LABEL) &&\n pr.labels.some(label => label.name.startsWith(QUEUED_FOR_MERGE_PREFIX))\n );\n};\n\nexport const enableAutoMerge = async (pullRequestId: string, mergeMethod = 'SQUASH') => {\n try {\n await octokitGraphql(`\n mutation {\n enablePullRequestAutoMerge(input: { pullRequestId: \"${pullRequestId}\", mergeMethod: ${mergeMethod} }) {\n clientMutationId\n }\n }\n `);\n } catch (error) {\n core.warning('Auto merge could not be enabled. Perhaps you need to enable auto-merge on your repo?');\n core.warning(error as Error);\n }\n};\n\nconst githubEmailDocsLink =\n 'https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address';\n", "/*\nCopyright 2021 Expedia, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as core from '@actions/core';\nimport { FIRST_QUEUED_PR_LABEL, JUMP_THE_QUEUE_PR_LABEL, READY_FOR_MERGE_PR_LABEL } from '../constants';\nimport { GithubError, PullRequest, PullRequestList, SinglePullRequest } from '../types/github';\nimport { context } from '@actions/github';\nimport { octokit } from '../octokit';\nimport { removePrFromQueue } from './manage-merge-queue';\n\nexport const prepareQueuedPrForMerge = async () => {\n const { data } = await octokit.pulls.list({\n state: 'open',\n per_page: 100,\n ...context.repo\n });\n const pullRequest = findNextPrToMerge(data);\n if (pullRequest) {\n return updatePrWithDefaultBranch(pullRequest as PullRequest);\n }\n};\n\nconst findNextPrToMerge = (pullRequests: PullRequestList) =>\n pullRequests.find(pr => hasRequiredLabels(pr, [READY_FOR_MERGE_PR_LABEL, JUMP_THE_QUEUE_PR_LABEL])) ??\n pullRequests.find(pr => hasRequiredLabels(pr, [READY_FOR_MERGE_PR_LABEL, FIRST_QUEUED_PR_LABEL]));\n\nconst hasRequiredLabels = (pr: SinglePullRequest, requiredLabels: string[]) =>\n requiredLabels.every(mergeQueueLabel => pr.labels.some(label => label.name === mergeQueueLabel));\n\nexport const updatePrWithDefaultBranch = async (pullRequest: PullRequest) => {\n if (pullRequest.head.user?.login && pullRequest.base.user?.login && pullRequest.head.user?.login !== pullRequest.base.user?.login) {\n try {\n // update fork default branch with upstream\n await octokit.repos.mergeUpstream({\n ...context.repo,\n branch: pullRequest.base.repo.default_branch\n });\n } catch (error) {\n if ((error as GithubError).status === 409) {\n core.setFailed('Attempt to update fork branch with upstream failed; conflict on default branch between fork and upstream.');\n } else core.setFailed((error as GithubError).message);\n }\n }\n try {\n await octokit.repos.merge({\n base: pullRequest.head.ref,\n head: 'HEAD',\n ...context.repo\n });\n } catch (error) {\n const noEvictUponConflict = core.getInput('no_evict_upon_conflict');\n const githubError = error as GithubError;\n if (githubError.status !== 409) {\n core.setFailed(githubError.message);\n return;\n }\n if (noEvictUponConflict === 'true') {\n core.info('The first PR in the queue has a merge conflict. PR was not removed from the queue due to no_evict_upon_conflict input.');\n return;\n }\n\n await removePrFromQueue(pullRequest);\n core.setFailed('The first PR in the queue has a merge conflict, and it was removed from the queue.');\n }\n};\n" ], - "mappings": "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", - "debugId": "89067C53C7C247CA64756E2164756E21", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA;AAMO,IAAM,mBAAmB,CAAC,cAA+B;AAAA,EAC9D,MAAM,YAAY,uBAAuB,SAAS;AAAA,EAClD,OAAO,oBAAI,WAAW,mBAAmB;AAAA;AAG3C,IAAM,yBAAyB,CAAC,cAC9B,UACG,IAAI,QAAM;AAAA,EACT,MAAM,QAAQ,GAAG,OAAO,KAAK,YAAS,OAAM,MAAM,WAAW,uBAAuB,CAAC,GAAG;AAAA,EACxF,MAAM,uBAAuB,QAAQ,GAAG,OAAO,KAAK,YAAS,OAAM,SAAS,uBAAuB,CAAC;AAAA,EACpG,MAAM,gBAAgB,OAAO,OAAO,MAAM,GAAG,IAAI,EAAE;AAAA,EACnD,OAAO;AAAA,IACL,QAAQ,GAAG;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,GAAG,KAAK;AAAA,EACf;AAAA,CACD,EACA,KAAK,CAAC,KAAK,QAAQ;AAAA,EAClB,IAAI,IAAI,sBAAsB;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,IAAI,IAAI,sBAAsB;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,OAAO,IAAI,gBAAgB,IAAI;AAAA,CAChC;AAEL,IAAM,sBAAsB,OAAO,IAAuD,UAAkB;AAAA,EAC1G,QAAQ,QAAQ,OAAO,eAAe,KAAK,yBAAyB;AAAA,EACpE,MAAM,mBAAmB,QAAQ;AAAA,EACjC,IAAI,CAAC,SAAS,MAAM,aAAa,KAAK,kBAAkB,kBAAkB;AAAA,IACxE;AAAA,EACF;AAAA,EACA,IAAI,sBAAsB;AAAA,IACxB,MAAM,oBAAoB,yBAAyB,MAAM;AAAA,EAC3D;AAAA,EAEA,MAAM,sBAAsB,qBAAqB;AAAA,EACjD,IAAI,qBAAqB;AAAA,IACvB,QAAQ,MAAM,mBAAmB,MAAM,QAAQ,MAAM,IAAI,EAAE,aAAa,WAAW,QAAQ,KAAK,CAAC;AAAA,IACjG,MAAM,0BAA0B,cAAc;AAAA,IAC9C;AAAA,MACE;AAAA,QACE,QAAQ,KAAK;AAAA;AAAA,QAEb,MAAM,QAAQ,MAAM,IAAI,EAAE,aAAa,WAAW,QAAQ,KAAK,CAAC;AAAA,IACpE,OAAO,QAAQ,IAAI;AAAA,MACjB,QAAQ,OAAO,UAAU;AAAA,QACvB,QAAQ,CAAC,GAAG,4BAA4B,kBAAkB;AAAA,QAC1D,cAAc;AAAA,WACX,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,oBAAoB,OAAO,MAAM;AAAA,MACjC,gBAAgB;AAAA,QACd,KAAK;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAa;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ,IAAI;AAAA,IACjB,QAAQ,OAAO,UAAU;AAAA,MACvB,QAAQ,CAAC,GAAG,4BAA4B,kBAAkB;AAAA,MAC1D,cAAc;AAAA,SACX,QAAQ;AAAA,IACb,CAAC;AAAA,IACD,oBAAoB,OAAO,MAAM;AAAA,IACjC,gBAAgB;AAAA,MACd;AAAA,MACA,SAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAAA;;;AC/DI,MAAM,yBAAyB,aAAa;AAQnD;AAEO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,IACoB,CAAC,MAAM;AAAA,EACtB,QACH,6NACF;AAAA,EACA,QAAQ,MAAM,gBAAgB,MAAM,QAAQ,MAAM,IAAI,EAAE,aAAa,QAAQ,MAAM,WAAW,QAAQ,KAAK,CAAC;AAAA,EAC5G,IAAI,YAAY,UAAU,CAAC,YAAY,OAAO,KAAK,WAAS,MAAM,SAAS,wBAAwB,GAAG;AAAA,IAC/F,KAAK,oCAAoC;AAAA,IAC9C,OAAO,kBAAkB,WAAW;AAAA,EACtC;AAAA,EACA,MAAM,2BAA2B,MAAM,mBAAmB;AAAA,IACxD,MAAM;AAAA,EACR,CAAC;AAAA,EACD,IAAI,CAAC,0BAA0B;AAAA,IAC7B,OAAO,kBAAkB,WAAW;AAAA,EACtC;AAAA,EACA,IAAI,qBAAqB,OAAO;AAAA,IAC9B,MAAM,QAAQ,MAAM,sBAAsB,EAAE,OAAO,QAAQ,CAAC;AAAA,IAC5D,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,cAAc,UAAU,2CAA2C,cAAc;AAAA,MACvF,MAAM,gBAAgB;AAAA,QACpB,MAAM,IAAI,mGAAmG,+CAA+C,oDAAoD,QAAQ;AAAA,MAC1N,CAAC;AAAA,MACD,OAAO,kBAAkB,WAAW;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,MAAM,sBAAsB;AAAA,EAC9C,MAAM,gBAAgB,UAAU,SAAS;AAAA,EACzC,MAAM,0BAA0B,YAAY,OAAO,MAAM,WAAS,CAAC,MAAM,MAAM,WAAW,uBAAuB,CAAC;AAAA,EAElH,IAAI,2BAA2B,gBAAgB,OAAO,cAAc,GAAG;AAAA,IACrE,MAAM,gBAAgB;AAAA,MACpB,MAAM,iCAAiC;AAAA;AAAA;AAAA,IACzC,CAAC;AAAA,IACD,OAAO,kBAAkB,WAAW;AAAA,EACtC;AAAA,EAEA,IAAI,YAAY,OAAO,KAAK,WAAS,MAAM,SAAS,uBAAuB,GAAG;AAAA,IAC5E,IAAI,+BAA+B,QAAQ;AAAA,MACpC,KAAK,oBAAoB,0BAA0B;AAAA,MACxD,MAAM,eAAe,MAAM,aAAa,EAAE,OAAO,QAAQ,OAAO,KAAW,CAAC;AAAA,MAC5E,IAAI,CAAC,cAAc;AAAA,QACjB,MAAM,oBAAoB,yBAAyB,YAAY,MAAM;AAAA,QACrE,OAAO,MAAM,gBAAgB;AAAA,UAC3B,MAAM,IAAI,QAAQ;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO,iBAAiB,SAAS;AAAA,EACnC;AAAA,EAEA,IAAI,yBAAyB;AAAA,IAC3B,MAAM,aAAa,aAAa,eAAe,eAAe;AAAA,EAChE;AAAA,EAEA,MAAM,uBAAuB,kBAAkB,KAAK,YAAY,OAAO,KAAK,WAAS,MAAM,SAAS,qBAAqB;AAAA,EAEzH,IAAI,sBAAsB;AAAA,IACxB,MAAM,0BAA0B,WAAW;AAAA,EAC7C;AAAA,EAEA,MAAM,gBAAgB;AAAA,IACpB,KAAK,YAAY,KAAK;AAAA,IACtB,SAAS;AAAA,IACT,OAAO,uBAAuB,YAAY;AAAA,IAC1C,aAAa,uBAAuB,8BAA8B;AAAA,EACpE,CAAC;AAAA,EAED,IAAI,wBAAwB,qBAAqB,OAAO;AAAA,IACtD,MAAM,WAAW;AAAA,MACf;AAAA,MACA,aAAa,QAAQ,MAAM;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAGK,IAAM,oBAAoB,OAAO,gBAA6B;AAAA,EACnE,MAAM,oBAAoB,0BAA0B,YAAY,MAAM;AAAA,EACtE,MAAM,aAAa,YAAY,OAAO,KAAK,WAAS,MAAM,MAAM,WAAW,uBAAuB,CAAC,GAAG;AAAA,EACtG,IAAI,YAAY;AAAA,IACd,MAAM,oBAAoB,YAAY,YAAY,MAAM;AAAA,EAC1D;AAAA,EACA,MAAM,gBAAgB;AAAA,IACpB,KAAK,YAAY,KAAK;AAAA,IACtB,SAAS;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,EACf,CAAC;AAAA,EACD,MAAM,YAAY,MAAM,sBAAsB;AAAA,EAC9C,OAAO,iBAAiB,SAAS;AAAA;AAGnC,IAAM,eAAe,OAAO,aAA0B,eAAuB,oBAA6B;AAAA,EACxG,MAAM,QAAQ,OAAO,UAAU;AAAA,IAC7B,QAAQ,CAAC,GAAG,4BAA4B,eAAe;AAAA,IACvD,cAAc,QAAQ,MAAM;AAAA,OACzB,QAAQ;AAAA,EACb,CAAC;AAAA,EACD,IAAI,mBAAmB,QAAQ;AAAA,IACxB,KAAK,wCAAwC;AAAA,IAClD;AAAA,EACF;AAAA,EACA,MAAM,gBAAgB,YAAY,OAAO;AAAA;AAG3C,IAAM,wBAAwB,YAAsC;AAAA,EAClE,MAAM,mBAAmB,MAAM,4BAA4B;AAAA,EAC3D,OAAO,iBAAiB,OACtB,QACE,GAAG,OAAO,KAAK,WAAS,MAAM,SAAS,wBAAwB,KAC/D,GAAG,OAAO,KAAK,WAAS,MAAM,KAAK,WAAW,uBAAuB,CAAC,CAC1E;AAAA;AAGK,IAAM,kBAAkB,OAAO,eAAuB,cAAc,aAAa;AAAA,EACtF,IAAI;AAAA,IACF,MAAM,eAAe;AAAA;AAAA,4DAEmC,gCAAgC;AAAA;AAAA;AAAA;AAAA,GAIzF;AAAA,IACC,OAAO,OAAO;AAAA,IACT,QAAQ,sFAAsF;AAAA,IAC9F,QAAQ,KAAc;AAAA;AAAA;AAI/B,IAAM,sBACJ;;;ACtKK,IAAM,0BAA0B,YAAY;AAAA,EACjD,QAAQ,SAAS,MAAM,QAAQ,MAAM,KAAK;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,OACP,QAAQ;AAAA,EACb,CAAC;AAAA,EACD,MAAM,cAAc,kBAAkB,IAAI;AAAA,EAC1C,IAAI,aAAa;AAAA,IACf,OAAO,0BAA0B,WAA0B;AAAA,EAC7D;AAAA;AAGF,IAAM,oBAAoB,CAAC,iBACzB,aAAa,KAAK,QAAM,kBAAkB,IAAI,CAAC,0BAA0B,uBAAuB,CAAC,CAAC,KAClG,aAAa,KAAK,QAAM,kBAAkB,IAAI,CAAC,0BAA0B,qBAAqB,CAAC,CAAC;AAElG,IAAM,oBAAoB,CAAC,IAAuB,mBAChD,eAAe,MAAM,qBAAmB,GAAG,OAAO,KAAK,WAAS,MAAM,SAAS,eAAe,CAAC;AAE1F,IAAM,4BAA4B,OAAO,gBAA6B;AAAA,EAC3E,IAAI,YAAY,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,UAAU,YAAY,KAAK,MAAM,OAAO;AAAA,IACjI,IAAI;AAAA,MAEF,MAAM,QAAQ,MAAM,cAAc;AAAA,WAC7B,QAAQ;AAAA,QACX,QAAQ,YAAY,KAAK,KAAK;AAAA,MAChC,CAAC;AAAA,MACD,OAAO,OAAO;AAAA,MACd,IAAK,MAAsB,WAAW,KAAK;AAAA,QACpC,UAAU,2GAA2G;AAAA,MAC5H,EAAO;AAAA,QAAK,UAAW,MAAsB,OAAO;AAAA;AAAA,EAExD;AAAA,EACA,IAAI;AAAA,IACF,MAAM,QAAQ,MAAM,MAAM;AAAA,MACxB,MAAM,YAAY,KAAK;AAAA,MACvB,MAAM;AAAA,SACH,QAAQ;AAAA,IACb,CAAC;AAAA,IACD,OAAO,OAAO;AAAA,IACd,MAAM,sBAA2B,SAAS,wBAAwB;AAAA,IAClE,MAAM,cAAc;AAAA,IACpB,IAAI,YAAY,WAAW,KAAK;AAAA,MACzB,UAAU,YAAY,OAAO;AAAA,MAClC;AAAA,IACF;AAAA,IACA,IAAI,wBAAwB,QAAQ;AAAA,MAC7B,KAAK,wHAAwH;AAAA,MAClI;AAAA,IACF;AAAA,IAEA,MAAM,kBAAkB,WAAW;AAAA,IAC9B,UAAU,oFAAoF;AAAA;AAAA;", + "debugId": "37FACE3969ED272964756E2164756E21", "names": [] } \ No newline at end of file diff --git a/src/helpers/check-merge-safety.ts b/src/helpers/check-merge-safety.ts index 9a47d568..771078b2 100644 --- a/src/helpers/check-merge-safety.ts +++ b/src/helpers/check-merge-safety.ts @@ -37,6 +37,9 @@ export class CheckMergeSafety extends HelperInputs { } export const checkMergeSafety = async (inputs: CheckMergeSafety) => { + core.warning( + "check-merge-safety is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue" + ); const isPrWorkflow = Boolean(githubContext.issue.number); if (!isPrWorkflow) { return handlePushWorkflow(inputs); diff --git a/src/helpers/manage-merge-queue.ts b/src/helpers/manage-merge-queue.ts index 83365104..fbcbc530 100644 --- a/src/helpers/manage-merge-queue.ts +++ b/src/helpers/manage-merge-queue.ts @@ -53,6 +53,9 @@ export const manageMergeQueue = async ({ allow_only_for_maintainers, pattern }: ManageMergeQueue = {}) => { + core.warning( + "manage-merge-queue is deprecated. Please use GitHub's native merge queue: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue" + ); const { data: pullRequest } = await octokit.pulls.get({ pull_number: context.issue.number, ...context.repo }); if (pullRequest.merged || !pullRequest.labels.find(label => label.name === READY_FOR_MERGE_PR_LABEL)) { core.info('This PR is not in the merge queue.');