diff --git a/dist/index-node10-dev.cjs.js b/dist/index-node10-dev.cjs.js index 0d051f1d7..3a9603284 100644 --- a/dist/index-node10-dev.cjs.js +++ b/dist/index-node10-dev.cjs.js @@ -768,7 +768,7 @@ const config$1 = { const orgsConfigs = { ornikar: config, christophehurpeau: config$1 -}; // flat requires node 11 +}; // export const getMembers = ( // groups: Record, // ): string[] => { @@ -1412,7 +1412,7 @@ const obtainRepoContext = context => { const orgConfig = orgsConfigs[owner.login]; if (!orgConfig) { - console.warn(owner.login, Object.keys(orgsConfigs)); + console.warn(`using default config for ${owner.login}`); return null; } diff --git a/dist/index-node10-dev.cjs.js.map b/dist/index-node10-dev.cjs.js.map index 27d1c6c34..ac8c5d875 100644 --- a/dist/index-node10-dev.cjs.js.map +++ b/dist/index-node10-dev.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"index-node10-dev.cjs.js","sources":["../src/mongo.ts","../src/views/Layout.tsx","../src/auth/github.ts","../src/utils/random.ts","../src/appRouter.tsx","../src/orgsConfigs/ornikar.ts","../src/orgsConfigs/christophehurpeau.ts","../src/orgsConfigs/index.ts","../src/pr-handlers/actions/utils/prOptions.ts","../src/pr-handlers/actions/utils/parseBody.ts","../src/pr-handlers/actions/utils/hasLabelInPR.ts","../src/pr-handlers/actions/autoMergeIfPossible.ts","../src/context/initRepoLabels.ts","../src/context/utils.ts","../src/context/initTeamSlack.ts","../src/context/orgContext.ts","../src/context/repoContext.ts","../src/pr-handlers/utils.ts","../src/pr-handlers/actions/autoAssignPRToCreator.ts","../src/pr-handlers/actions/utils/cleanTitle.ts","../src/pr-handlers/actions/utils/updateBody.ts","../src/pr-handlers/actions/updatePr.ts","../src/pr-handlers/actions/utils/syncLabel.ts","../src/pr-handlers/actions/utils/createStatus.ts","../src/pr-handlers/actions/editOpenedPR.ts","../src/pr-handlers/actions/updateStatusCheckFromLabels.ts","../src/pr-handlers/actions/updateReviewStatus.ts","../src/pr-handlers/actions/autoApproveAndAutoMerge.ts","../src/pr-handlers/actions/readCommitsAndUpdateInfos.ts","../src/pr-handlers/opened.ts","../src/pr-handlers/closed.ts","../src/pr-handlers/reopened.ts","../src/pr-handlers/reviewRequested.ts","../src/pr-handlers/reviewRequestRemoved.ts","../src/pr-handlers/reviewSubmitted.ts","../src/pr-handlers/reviewDismissed.ts","../src/pr-handlers/synchronize.ts","../src/pr-handlers/edited.ts","../src/pr-handlers/actions/updatePrBody.ts","../src/pr-handlers/labelsChanged.ts","../src/pr-handlers/checkrunCompleted.ts","../src/pr-handlers/checksuiteCompleted.ts","../src/pr-handlers/status.ts","../src/initApp.ts","../src/index.ts"],"sourcesContent":["// import { MongoStore, MongoConnection, MongoModel } from 'liwi-mongo';\nimport { MongoConnection } from 'liwi-mongo';\n\n// export interface PrEventsModel extends MongoModel {\n// owner: string;\n// repo: string;\n// prId: string;\n// prNumber: string;\n// event: string;\n// }\n\nexport interface MongoStores {\n connection: MongoConnection;\n // prEvents: MongoStore;\n}\n\nif (!process.env.MONGO_DB) {\n throw new Error('MONGO_DB is missing in process.env');\n}\n\nexport default function init(): MongoStores {\n const config = new Map([\n ['host', process.env.MONGO_HOST || 'localhost'],\n ['port', process.env.MONGO_PORT || '27017'],\n ['database', process.env.MONGO_DB as string],\n ]);\n if (process.env.MONGO_USER) {\n config.set('user', process.env.MONGO_USER);\n config.set('password', process.env.MONGO_PASSWORD as string);\n }\n const connection = new MongoConnection(config);\n\n // const prEvents = new MongoStore(connection, 'prEvents');\n // prEvents.collection.then((coll) => {\n // coll.createIndex({ owner: 1, repo: 1, ???: 1 });\n // });\n\n // return { connection, prEvents };\n return { connection };\n}\n","import React from 'react';\n\ninterface LayoutProps {\n lang?: string;\n title?: string;\n children: React.ReactNode;\n}\n\nexport default function Layout({\n lang = 'en',\n title = process.env.NAME,\n children,\n}: LayoutProps) {\n return (\n \n \n \n \n {title}\n \n \n \n {children}\n \n );\n}\n","import { create } from 'simple-oauth2';\n\nif (!process.env.GITHUB_CLIENT_ID) {\n throw new Error('Missing env variable: GITHUB_CLIENT_ID');\n}\n\nif (!process.env.GITHUB_CLIENT_SECRET) {\n throw new Error('Missing env variable: GITHUB_CLIENT_SECRET');\n}\n\nexport const oauth2 = create({\n client: {\n id: process.env.GITHUB_CLIENT_ID,\n secret: process.env.GITHUB_CLIENT_SECRET,\n },\n auth: {\n tokenHost: 'https://github.com',\n tokenPath: '/login/oauth/access_token',\n authorizePath: '/login/oauth/authorize',\n },\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable max-lines */\n\nimport { promisify } from 'util';\nimport { Request, Response } from 'express';\nimport { Octokit, Application } from 'probot';\nimport cookieParser from 'cookie-parser';\nimport { sign, verify } from 'jsonwebtoken';\nimport React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { MongoStores } from './mongo';\nimport Layout from './views/Layout';\nimport * as githubAuth from './auth/github';\nimport { randomHex } from './utils/random';\n\nif (!process.env.AUTH_SECRET_KEY) {\n throw new Error('Missing env variable: AUTH_SECRET_KEY');\n}\n\nconst AUTH_SECRET_KEY: string = process.env.AUTH_SECRET_KEY;\n\nconst signPromisified: any = promisify(sign);\nconst verifyPromisified: any = promisify(verify);\n\nconst secure =\n !!process.env.SECURE_COOKIE && process.env.SECURE_COOKIE !== 'false';\n\nconst createRedirectUri = (req: Request, strategy: string) => {\n const host = `http${secure ? 's' : ''}://${req.hostname}${\n req.hostname === 'localhost' ? `:${process.env.PORT}` : ''\n }`;\n return `${host}/app/${strategy}/login-response`;\n};\n\ninterface AuthInfo {\n login: string;\n accessToken: string;\n time: number;\n}\n\nconst readAuthCookie = (\n req: Request,\n strategy: string,\n): undefined | Promise => {\n const cookie = req.cookies[`auth_${strategy}`];\n if (!cookie) return;\n\n return verifyPromisified(cookie, AUTH_SECRET_KEY, {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n });\n};\n\nexport default async function appRouter(\n app: Application,\n mongoStuff: MongoStores,\n): Promise {\n const router = app.route('/app');\n const api = await app.auth();\n router.use(cookieParser());\n\n router.get('/', (req, res) => {\n res.redirect('/gh');\n });\n\n router.get('/gh', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/app/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.list({ per_page: 100 });\n\n res.send(\n renderToStaticMarkup(\n \n
\n

Your repositories

\n
    \n {data.map((repo: any) => (\n
  • \n \n {repo.name}\n \n
  • \n ))}\n
\n
\n {data.length === 100 && (\n
We currently have a limit to 100 repositories
\n )}\n
,\n ),\n );\n });\n\n router.get('/gh/login', async (req: Request, res: Response) => {\n const strategy = 'gh';\n if (await readAuthCookie(req, strategy)) {\n return res.redirect('/app/gh');\n }\n\n const state = await randomHex(8);\n res.cookie(`auth_${strategy}_${state}`, strategy, {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure,\n });\n\n const redirectUri = githubAuth.oauth2.authorizationCode.authorizeURL({\n redirect_uri: createRedirectUri(req, strategy),\n scope: 'read:user,repo',\n state,\n // grant_type: options.grantType,\n // access_type: options.accessType,\n // login_hint: req.query.loginHint,\n // include_granted_scopes: options.includeGrantedScopes,\n });\n\n // console.log(redirectUri);\n\n res.redirect(redirectUri);\n });\n\n router.get('/gh/login-response', async (req, res) => {\n if (req.query.error) {\n res.send(req.query.error_description);\n return;\n }\n\n const strategy = 'gh';\n const code = req.query.code;\n const state = req.query.state;\n const cookieName = `auth_${strategy}_${state}`;\n const cookie = req.cookies && req.cookies[cookieName];\n if (!cookie) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n 'No cookie for this state. Retry ?',\n );\n return;\n }\n res.clearCookie(cookieName);\n\n const result = await githubAuth.oauth2.authorizationCode.getToken({\n code,\n redirect_uri: createRedirectUri(req, strategy),\n });\n\n if (!result) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n renderToStaticMarkup(\n \n
\n Could not get access token. Retry ?\n
\n
,\n ),\n );\n return;\n }\n\n const accessToken = result.access_token;\n const octokit = new Octokit({ auth: `token ${accessToken}` });\n const user = await octokit.users.getAuthenticated({});\n const login = user.data.login;\n\n const token = await signPromisified(\n { login, accessToken, time: Date.now() },\n AUTH_SECRET_KEY,\n {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n expiresIn: '10 days',\n },\n );\n\n res.cookie(`auth_${strategy}`, token, {\n httpOnly: true,\n secure,\n });\n\n res.redirect('/gh');\n });\n\n router.get('/gh/repository/:owner/:repository', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.get({\n owner: req.params.owner,\n repo: req.params.repository,\n });\n\n if (!data) {\n return res.status(404).send(\n renderToStaticMarkup(\n \n
repo not found
\n
,\n ),\n );\n }\n\n if (!data.permissions.admin) {\n return res.status(401).send(\n renderToStaticMarkup(\n \n
\n not authorized to see this repo, you need to have admin permission\n
\n
,\n ),\n );\n }\n\n const { data: data2 } = await api.apps\n .getRepoInstallation({\n owner: req.params.owner,\n repo: req.params.repository,\n })\n .catch((err) => {\n return { status: err.status, data: undefined };\n });\n\n if (!data2) {\n return res.send(\n renderToStaticMarkup(\n \n
\n {process.env.REVIEWFLOW_NAME} {\"isn't\"} installed on this repo. Go\n to{' '}\n \n Github Configuration\n {' '}\n to add it.\n
\n
,\n ),\n );\n }\n\n res.send(\n renderToStaticMarkup(\n \n
\n

{req.params.repository}

\n
\n
,\n ),\n );\n });\n}\n","/* eslint-disable max-lines */\n\nimport { Config } from './types';\n\nconst config: Config<'dev' | 'design', 'ops' | 'frontends' | 'backends'> = {\n slackToken: process.env.ORNIKAR_SLACK_TOKEN,\n autoAssignToCreator: true,\n trimTitle: true,\n ignoreRepoPattern: '(infra-.*|devenv)',\n requiresReviewRequest: true,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n {\n bot: false,\n regExp: /\\s([A-Z][A-Z\\d]+-(\\d+)|\\[no issue])$/,\n error: {\n title: 'Title does not have JIRA issue',\n summary: 'The PR title should end with ONK-0000, or [no issue]',\n },\n status: 'jira-issue',\n statusInfoFromMatch: (match) => {\n const issue = match[1];\n if (issue === '[no issue]') {\n return {\n title: 'No issue',\n summary: '',\n };\n }\n return {\n inBody: true,\n url: `https://ornikar.atlassian.net/browse/${issue}`,\n title: `JIRA issue: ${issue}`,\n summary: `[${issue}](https://ornikar.atlassian.net/browse/${issue})`,\n };\n },\n },\n ],\n },\n\n groups: {\n dev: {\n /* ops */\n JulienBreux: `julien.breux${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Alan-pad': null,\n CamilSadiki: null,\n busser: null,\n\n /* back */\n abarreir: `alexandre${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n arthurflachs: `arthur${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n damienorny: `damien.orny${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Thierry-girod': `thierry${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n darame07: `kevin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Pixy: `pierre-alexis${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Radyum: `romain.reynaud${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n\n /* front */\n christophehurpeau: `christophe${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n HugoGarrido: `hugo${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n LentnerStefan: `stefan${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CorentinAndre: `corentin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Mxime: `maxime${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n vlbr: `valerian${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'budet-b': `benjamin.budet${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n mdcarter: `maxime.dehaye${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n design: {\n jperriere: `julien${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CoralineColasse: `coraline${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Lenamari: `lena${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'AlexisRiols-Ornikar': `alexis.riols${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n },\n\n teams: {\n ops: {\n logins: ['JulienBreux', 'Alan-pad', 'CamilSadiki', 'busser'],\n labels: ['teams/ops'],\n },\n\n backends: {\n logins: [\n 'abarreir',\n 'arthurflachs',\n 'damienorny',\n 'Thierry-girod',\n 'darame07',\n 'Pixy',\n 'Radyum',\n ],\n labels: ['teams/backend'],\n },\n\n frontends: {\n logins: [\n 'christophehurpeau',\n 'HugoGarrido',\n 'LentnerStefan',\n 'CorentinAndre',\n 'Mxime',\n 'vlbr',\n 'budet-b',\n 'mdcarter',\n ],\n labels: ['teams/frontend'],\n },\n },\n\n waitForGroups: {\n dev: [],\n design: ['dev'],\n },\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFC44C',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#DAE1E6',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* design */\n 'design/needs-review': {\n name: ':art: design/needs-review',\n color: '#FFC44C',\n },\n 'design/review-requested': {\n name: ':art: design/review-requested',\n color: '#DAE1E6',\n },\n 'design/changes-requested': {\n name: ':art: design/changes-requested',\n color: '#e11d21',\n },\n 'design/approved': {\n name: ':art: design/approved',\n color: '#64DD17',\n },\n\n /* teams */\n 'teams/ops': {\n name: 'ops',\n color: '#003b55',\n },\n 'teams/backend': {\n name: 'backend',\n color: '#6ad8cb',\n },\n 'teams/frontend': {\n name: 'frontend',\n color: '#8a5abc',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n description: 'This issue or pull request will need a new major version',\n color: '#FF6F00',\n },\n duplicate: {\n name: 'duplicate',\n description: 'This issue or pull request already exists',\n color: '#ECEFF1',\n },\n documentation: {\n name: 'documentation',\n description: 'Improvements or additions to documentation',\n color: '#7FCEFF',\n },\n rfc: {\n name: 'RFC',\n description: 'Request For Comments',\n color: '#FFD3B2',\n },\n bug: {\n name: 'bug',\n description: \"Something isn't working\",\n color: '#FF3D00',\n },\n enhancement: {\n name: 'enhancement',\n description: 'New feature or request',\n color: '#7FCEFF',\n },\n 'help-wanted': {\n name: 'help wanted',\n description: 'Extra attention is needed',\n color: '#B1EE8B',\n },\n question: {\n name: 'question',\n description: 'Further information is requested',\n color: '#F860A4',\n },\n wontfix: {\n name: 'wontfix',\n description: 'This will not be worked on',\n color: '#ECEFF1',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n design: {\n needsReview: 'design/needs-review',\n requested: 'design/review-requested',\n changesRequested: 'design/changes-requested',\n approved: 'design/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config } from './types';\n\nconst config: Config<'dev', never> = {\n autoAssignToCreator: true,\n trimTitle: true,\n requiresReviewRequest: false,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?(!)?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n ],\n },\n groups: {\n dev: {\n christophehurpeau: 'christophe@hurpeau.com',\n 'chris-reviewflow': 'christophe.hurpeau+reviewflow@gmail.com',\n tilap: 'jlavinh@gmail.com',\n },\n },\n waitForGroups: {\n dev: [],\n },\n teams: {},\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFD57F',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#B2E1FF',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n color: '#ef7934',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config as ConfigType } from './types';\nimport ornikar from './ornikar';\nimport christophehurpeau from './christophehurpeau';\n\nexport type Config<\n GroupNames extends string = any,\n TeamNames extends string = any\n> = ConfigType;\n\nexport const orgsConfigs: { [owner: string]: Config } = {\n ornikar,\n christophehurpeau,\n};\n\n// flat requires node 11\n// export const getMembers = (\n// groups: Record,\n// ): string[] => {\n// return Object.values(groups).flat(1);\n// };\n","export type Options =\n | 'featureBranch'\n | 'autoMergeWithSkipCi'\n | 'autoMerge'\n | 'deleteAfterMerge';\n\nexport const options: Options[] = [\n 'featureBranch',\n 'autoMergeWithSkipCi',\n 'autoMerge',\n 'deleteAfterMerge',\n];\nexport const optionsRegexps: { name: Options; regexp: RegExp }[] = options.map(\n (option) => ({\n name: option,\n regexp: new RegExp(`\\\\[([ xX]?)]\\\\s*`),\n }),\n);\n\nexport const optionsLabels: { name: Options; label: string }[] = [\n { name: 'featureBranch', label: 'This PR is a feature branch' },\n {\n name: 'autoMergeWithSkipCi',\n label: 'Auto merge with `[skip ci]`',\n },\n {\n name: 'autoMerge',\n label:\n 'Auto merge when this PR is ready and has no failed statuses. (Also has a queue per repo to prevent multiple useless \"Update branch\" triggers)',\n },\n {\n name: 'deleteAfterMerge',\n label: 'Automatic branch delete after this PR is merged',\n },\n];\n","import { Options, optionsRegexps } from './prOptions';\n\nconst commentStart = '';\nconst commentEnd = \"\";\n\nconst regexpCols = /^(.*)((.*))(.*)$/is;\nconst regexpReviewflowCol = /^(\\s*<\\/td>]*>)\\s*(.*)\\s*(<\\/td><\\/tr><\\/table>\\s*)\\s*$/is;\n\ntype Config = Record;\n\nconst parseOptions = (content: string, defaultConfig: Config): Config => {\n return optionsRegexps.reduce(\n (acc, { name, regexp }) => {\n const match = regexp.exec(content);\n acc[name] = !match\n ? defaultConfig[name] || false\n : match[1] === 'x' || match[1] === 'X';\n return acc;\n },\n {} as any,\n ) as Config;\n};\n\ninterface ParseBodyResultWithoutOptions {\n content: string;\n ending: string;\n reviewflowContentCol: string;\n reviewflowContentColPrefix: string;\n reviewflowContentColSuffix: string;\n}\n\ninterface ParseBodyResultWithOptions extends ParseBodyResultWithoutOptions {\n options: Config;\n breakingChanges: string;\n}\n\nexport const parseBody = (\n description: string,\n): ParseBodyResultWithoutOptions | null => {\n const match = regexpCols.exec(description);\n if (!match) return null;\n const [, content, reviewFlowCol, reviewflowContent, ending] = match;\n const reviewFlowColMatch = regexpReviewflowCol.exec(reviewFlowCol);\n if (!reviewFlowColMatch) {\n return {\n content,\n ending,\n reviewflowContentCol: reviewflowContent,\n reviewflowContentColPrefix: commentStart,\n reviewflowContentColSuffix: commentEnd,\n };\n }\n const [\n ,\n reviewflowContentColPrefix,\n reviewflowContentCol,\n reviewflowContentColSuffix,\n ] = reviewFlowColMatch;\n\n return {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n };\n};\n\nexport const parseBodyWithOptions = (\n description: string,\n defaultConfig: Config,\n): ParseBodyResultWithOptions | null => {\n const parsedBody = parseBody(description);\n if (parsedBody === null) return null;\n\n // console.log(parsedBody.reviewflowContentCol);\n let breakingChanges = parsedBody.reviewflowContentCol.replace(\n /^.*#### Commits Notes:(.*)#### Options:.*$/s,\n '$1',\n );\n\n if (breakingChanges === parsedBody.reviewflowContentCol) {\n breakingChanges = '';\n } else {\n breakingChanges = breakingChanges.trim();\n }\n\n return {\n ...parsedBody,\n options: parseOptions(parsedBody.reviewflowContentCol, defaultConfig),\n breakingChanges,\n };\n};\n","import { Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\n\nexport default function hasLabelInPR(\n prLabels: Octokit.PullsGetResponse['labels'],\n label: LabelResponse,\n): boolean {\n if (!label) return false;\n return prLabels.some((l): boolean => l.id === label.id);\n}\n","/* eslint-disable max-lines */\nimport { Context, Octokit } from 'probot';\n// eslint-disable-next-line import/no-cycle\nimport { RepoContext } from '../../context/repoContext';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { parseBodyWithOptions } from './utils/parseBody';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nconst hasFailedStatusOrChecks = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n) => {\n const checks = await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n const failedChecks = checks.data.check_runs.filter(\n (check) => check.conclusion === 'failure',\n );\n\n if (failedChecks.length !== 0) {\n context.log.info(`automerge not possible: failed check pr ${pr.id}`, {\n checks: failedChecks.map((check) => check.name),\n });\n return true;\n }\n\n const combinedStatus = await context.github.repos.getCombinedStatusForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n if (combinedStatus.data.state === 'failure') {\n const failedStatuses = combinedStatus.data.statuses.filter(\n (status) => status.state === 'failure' || status.state === 'error',\n );\n\n context.log.info(`automerge not possible: failed status pr ${pr.id}`, {\n statuses: failedStatuses.map((status) => status.context),\n });\n\n return true;\n }\n\n return false;\n};\n\nexport const autoMergeIfPossible = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n prLabels: LabelResponse[] = pr.labels,\n): Promise => {\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n\n if (!hasLabelInPR(prLabels, autoMergeLabel)) {\n context.log.debug('automerge not possible: no label', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const createMergeLockPrFromPr = () => ({\n id: pr.id,\n number: pr.number,\n branch: pr.head.ref,\n });\n\n if (pr.state !== 'open') {\n context.log.debug('automerge not possible: pr is not opened', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n }\n\n if (\n repoContext.hasNeedsReview(prLabels) ||\n repoContext.hasRequestedReview(prLabels)\n ) {\n context.log.debug('automerge not possible: blocking labels', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const lockedPr = repoContext.getMergeLockedPr();\n if (lockedPr && lockedPr.number !== pr.number) {\n context.log.info('automerge not possible: locked pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.pushAutomergeQueue(createMergeLockPrFromPr());\n return false;\n }\n\n repoContext.addMergeLockPr(createMergeLockPrFromPr());\n\n if (pr.mergeable === undefined) {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n pr = prResult.data;\n }\n\n if (pr.merged) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info('automerge not possible: already merged pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n return false;\n }\n\n context.log.info(\n `automerge?: ${pr.id}, #${pr.number}, mergeable=${pr.mergeable} state=${\n pr.mergeable_state\n }`,\n );\n\n // https://github.com/octokit/octokit.net/issues/1763\n if (\n !(\n pr.mergeable_state === 'clean' ||\n pr.mergeable_state === 'has_hooks' ||\n pr.mergeable_state === 'unstable'\n )\n ) {\n if (!pr.mergeable_state || pr.mergeable_state === 'unknown') {\n context.log.info(`automerge not possible: rescheduling ${pr.id}`);\n // GitHub is determining whether the pull request is mergeable\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n\n if (pr.head.ref.startsWith('renovate/')) {\n if (pr.mergeable_state === 'behind' || pr.mergeable_state === 'dirty') {\n context.log.info(\n `automerge not possible: rebase renovate branch pr ${pr.id}`,\n );\n // TODO check if has commits not made by renovate https://github.com/ornikar/shared-configs/pull/47#issuecomment-445767120\n\n if (pr.body.includes('')) {\n if (pr.body.includes('[x] ')) {\n return false;\n }\n\n const renovateRebaseBody = pr.body.replace(\n '[ ] ',\n '[x] ',\n );\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n body: renovateRebaseBody,\n }),\n );\n } else if (!pr.title.startsWith('rebase!')) {\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n title: `rebase!${pr.title}`,\n }),\n );\n }\n\n return false;\n }\n\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else if (pr.mergeable_state === 'blocked') {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n\n context.log.info(\n `automerge not possible: renovate with mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n if (pr.mergeable_state === 'blocked') {\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n }\n\n if (pr.mergeable_state === 'behind') {\n context.log.info('automerge not possible: update branch', {\n head: pr.head.ref,\n base: pr.base.ref,\n });\n\n await context.github.repos.merge({\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n head: pr.base.ref,\n base: pr.head.ref,\n });\n\n return false;\n }\n\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info(\n `automerge not possible: not mergeable mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n try {\n context.log.info(`automerge pr #${pr.number}`);\n\n const parsedBody = parseBodyWithOptions(\n pr.body,\n repoContext.config.prDefaultOptions,\n );\n const options =\n (parsedBody && parsedBody.options) || repoContext.config.prDefaultOptions;\n\n const mergeResult = await context.github.pulls.merge({\n merge_method: options.featureBranch ? 'merge' : 'squash',\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n pull_number: pr.number,\n commit_title: `${pr.title}${\n options.autoMergeWithSkipCi ? ' [skip ci]' : ''\n } (#${pr.number})`,\n commit_message: '', // TODO add BC\n });\n context.log.debug('merge result:', mergeResult.data);\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return Boolean(mergeResult.data.merged);\n } catch (err) {\n context.log.info('could not merge:', err.message);\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n};\n","import { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\n\nexport interface LabelResponse {\n id: number;\n node_id: string;\n url: string;\n name: string;\n description: string;\n color: string;\n default: boolean;\n}\n\nexport interface Labels {\n [key: string]: LabelResponse;\n}\n\nexport const getLabelsForRepo = async (\n context: Context,\n): Promise => {\n const { data: labels } = await context.github.issues.listLabelsForRepo(\n context.repo({ per_page: 100 }),\n );\n return labels;\n};\n\nexport const initRepoLabels = async (\n context: Context,\n config: Config,\n): Promise => {\n const labels = await getLabelsForRepo(context);\n const finalLabels: Record = {};\n\n for (const [labelKey, labelConfig] of Object.entries(config.labels.list)) {\n const labelColor = labelConfig.color.slice(1);\n const description = labelConfig.description\n ? `${labelConfig.description} - Synced by reviewflow`\n : `Synced by reviewflow for ${labelKey}`;\n\n let existingLabel = labels.find((label) => label.name === labelConfig.name);\n if (!existingLabel) {\n existingLabel = labels.find((label) => label.description === description);\n }\n if (!existingLabel) {\n if (labelKey === 'design/needs-review') {\n existingLabel = labels.find(\n (label) => label.name === 'needs-design-review',\n );\n }\n if (labelKey === 'design/approved') {\n existingLabel = labels.find(\n (label) => label.name === 'design-reviewed',\n );\n }\n if (labelKey === 'teams/ops') {\n existingLabel = labels.find((label) => label.name === 'archi');\n }\n }\n\n if (!existingLabel) {\n const result = await context.github.issues.createLabel(\n context.repo({\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else if (\n existingLabel.name !== labelConfig.name ||\n existingLabel.color !== labelColor ||\n existingLabel.description !== description\n ) {\n context.log.info('Needs to update label', {\n current_name: existingLabel.name,\n name: existingLabel.name !== labelConfig.name && labelConfig.name,\n color: existingLabel.color !== labelColor && labelColor,\n description: existingLabel.description !== description && description,\n });\n\n const result = await context.github.issues.updateLabel(\n context.repo({\n current_name: existingLabel.name,\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else {\n finalLabels[labelKey] = existingLabel;\n }\n }\n\n return finalLabels;\n};\n","export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n","import Webhooks from '@octokit/webhooks';\nimport { WebClient } from '@slack/web-api';\nimport { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { getKeys } from './utils';\n\nexport interface TeamSlack {\n mention: (githubLogin: string) => string;\n postMessage: (githubLogin: string, text: string) => Promise;\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ) => string;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const voidTeamSlack = (): TeamSlack => ({\n mention: (): string => '',\n postMessage: (): Promise => Promise.resolve(),\n prLink: (): string => '',\n});\n\nexport const initTeamSlack = async (\n context: Context,\n config: Config,\n): Promise => {\n if (!config.slackToken) {\n return voidTeamSlack();\n }\n\n const githubLoginToSlackEmail = getKeys(config.groups).reduce<{\n [login: string]: string;\n }>((acc, groupName) => {\n Object.assign(acc, config.groups[groupName]);\n return acc;\n }, {});\n\n const slackClient = new WebClient(config.slackToken);\n const allUsers: any = await slackClient.users.list({ limit: 200 });\n const members: [string, { member: any; im: any }][] = Object.values(\n githubLoginToSlackEmail,\n )\n .map((email) => {\n const member = allUsers.members.find(\n (user: any) => user.profile.email === email,\n );\n if (!member) {\n console.warn(`Could not find user ${email}`);\n return;\n }\n return [email, { member, im: undefined }] as [\n string,\n { member: any; im: any }\n ];\n })\n .filter(ExcludesFalsy);\n\n for (const [, user] of members) {\n try {\n const im: any = await slackClient.im.open({ user: user.member.id });\n user.im = im.channel;\n } catch (err) {\n console.error(err);\n }\n }\n\n const membersMap = new Map(members);\n\n const getUserFromGithubLogin = (githubLogin: string) => {\n const email = githubLoginToSlackEmail[githubLogin];\n if (!email) return null;\n return membersMap.get(email);\n };\n\n return {\n mention: (githubLogin: string): string => {\n const user = getUserFromGithubLogin(githubLogin);\n if (!user) return githubLogin;\n return `<@${user.member.id}>`;\n },\n postMessage: async (githubLogin: string, text: string): Promise => {\n context.log.debug('send slack', { githubLogin, text });\n if (process.env.DRY_RUN) return;\n\n const user = getUserFromGithubLogin(githubLogin);\n if (!user || !user.im) return;\n await slackClient.chat.postMessage({\n username: process.env.REVIEWFLOW_NAME,\n channel: user.im.id,\n text,\n });\n },\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ): string => {\n return `<${pr.html_url}|${context.payload.repository.name}#${pr.number}>`;\n },\n };\n};\n","import { Context } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { initTeamSlack, TeamSlack } from './initTeamSlack';\nimport { getKeys } from './utils';\n\nexport interface OrgContext<\n GroupNames extends string = any,\n TeamNames extends string = any\n> {\n config: Config;\n slack: TeamSlack;\n getReviewerGroup: (githubLogin: string) => string | undefined;\n getReviewerGroups: (githubLogins: string[]) => string[];\n getTeamsForLogin: (githubLogin: string) => TeamNames[];\n reviewShouldWait: (\n reviewerGroup: GroupNames | undefined,\n requestedReviewers: any[],\n {\n includesReviewerGroup,\n includesWaitForGroups,\n }: { includesReviewerGroup?: boolean; includesWaitForGroups?: boolean },\n ) => boolean;\n}\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nconst initTeamContext = async (\n context: Context,\n config: Config,\n): Promise => {\n const slackPromise = initTeamSlack(context, config);\n\n const githubLoginToGroup = new Map();\n getKeys(config.groups).forEach((groupName) => {\n Object.keys(config.groups[groupName]).forEach((login) => {\n githubLoginToGroup.set(login, groupName);\n });\n });\n\n const githubLoginToTeams = new Map();\n getKeys(config.teams || {}).forEach((teamName) => {\n (config.teams as NonNullable)[teamName].logins.forEach(\n (login) => {\n const teams = githubLoginToTeams.get(login);\n if (teams) {\n teams.push(teamName);\n } else {\n githubLoginToTeams.set(login, [teamName]);\n }\n },\n );\n });\n\n const getReviewerGroups = (githubLogins: string[]) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(Boolean),\n ),\n ];\n\n return {\n config,\n getReviewerGroup: (githubLogin) => githubLoginToGroup.get(githubLogin),\n getReviewerGroups: (githubLogins) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(ExcludesFalsy),\n ),\n ],\n\n getTeamsForLogin: (githubLogin) =>\n githubLoginToTeams.get(githubLogin) || [],\n\n reviewShouldWait: (\n reviewerGroup,\n requestedReviewers,\n { includesReviewerGroup, includesWaitForGroups },\n ) => {\n if (!reviewerGroup) return false;\n\n const requestedReviewerGroups = getReviewerGroups(\n requestedReviewers.map((request) => request.login),\n );\n\n // contains another request of a reviewer in the same group\n if (\n includesReviewerGroup &&\n requestedReviewerGroups.includes(reviewerGroup)\n ) {\n return true;\n }\n\n // contains a request from a dependent group\n if (config.waitForGroups && includesWaitForGroups) {\n const waitForGroups = config.waitForGroups;\n return requestedReviewerGroups.some((group) =>\n waitForGroups[reviewerGroup].includes(group),\n );\n }\n\n return false;\n },\n\n slack: await slackPromise,\n };\n};\n\nconst orgContextsPromise = new Map();\nconst orgContexts = new Map();\n\nexport const obtainOrgContext = (\n context: Context,\n config: Config,\n): Promise => {\n const owner = context.payload.repository.owner;\n\n const existingTeamContext = orgContexts.get(owner.login);\n if (existingTeamContext) return existingTeamContext;\n\n const existingPromise = orgContextsPromise.get(owner.login);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const promise = initTeamContext(context, config);\n orgContextsPromise.set(owner.login, promise);\n\n return promise.then((orgContext) => {\n orgContextsPromise.delete(owner.login);\n orgContexts.set(owner.login, orgContext);\n return orgContext;\n });\n};\n","/* eslint-disable max-lines */\n\nimport { Lock } from 'lock';\nimport { Context } from 'probot';\nimport { orgsConfigs, Config } from '../orgsConfigs';\n// eslint-disable-next-line import/no-cycle\nimport { autoMergeIfPossible } from '../pr-handlers/actions/autoMergeIfPossible';\nimport { initRepoLabels, LabelResponse, Labels } from './initRepoLabels';\nimport { obtainOrgContext, OrgContext } from './orgContext';\n\nexport interface LockedMergePr {\n id: number;\n number: number;\n branch: string;\n}\n\ninterface RepoContextWithoutTeamContext {\n labels: Labels;\n protectedLabelIds: readonly LabelResponse['id'][];\n\n hasNeedsReview: (labels: LabelResponse[]) => boolean;\n hasRequestedReview: (labels: LabelResponse[]) => boolean;\n hasChangesRequestedReview: (labels: LabelResponse[]) => boolean;\n hasApprovesReview: (labels: LabelResponse[]) => boolean;\n getNeedsReviewGroupNames: (labels: LabelResponse[]) => GroupNames[];\n\n lockPROrPRS(\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise;\n\n getMergeLockedPr(): LockedMergePr;\n addMergeLockPr(pr: LockedMergePr): void;\n removePrFromAutomergeQueue(context: Context, prNumber: number): void;\n reschedule(context: Context, pr: LockedMergePr): void;\n pushAutomergeQueue(pr: LockedMergePr): void;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport type RepoContext = OrgContext<\n GroupNames\n> &\n RepoContextWithoutTeamContext;\n\nasync function initRepoContext(\n context: Context,\n config: Config,\n): Promise> {\n const repo = context.payload.repository;\n const orgContext = await obtainOrgContext(context, config);\n const repoContext = Object.create(orgContext);\n\n const labels = await initRepoLabels(context, config);\n\n const reviewGroupNames = Object.keys(config.groups) as GroupNames[];\n\n const needsReviewLabelIds = reviewGroupNames\n .map((key: GroupNames) => config.labels.review[key].needsReview)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const requestedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].requested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const changesRequestedLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].changesRequested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const approvedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].approved)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const protectedLabelIds = [\n ...requestedReviewLabelIds,\n ...changesRequestedLabelIds,\n ...approvedReviewLabelIds,\n ];\n\n const labelIdToGroupName = new Map();\n reviewGroupNames.forEach((key) => {\n const reviewGroupLabels = config.labels.review[key] as any;\n Object.keys(reviewGroupLabels).forEach((labelKey: string) => {\n labelIdToGroupName.set(labels[reviewGroupLabels[labelKey]].id, key);\n });\n });\n\n // const updateStatusCheck = (context, reviewGroup, statusInfo) => {};\n\n const hasNeedsReview = (labels: LabelResponse[]) =>\n labels.some((label) => needsReviewLabelIds.includes(label.id));\n const hasRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => requestedReviewLabelIds.includes(label.id));\n const hasChangesRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => changesRequestedLabelIds.includes(label.id));\n const hasApprovesReview = (labels: LabelResponse[]) =>\n labels.some((label) => approvedReviewLabelIds.includes(label.id));\n\n const getNeedsReviewGroupNames = (labels: LabelResponse[]): GroupNames[] =>\n labels\n .filter((label) => needsReviewLabelIds.includes(label.id))\n .map((label) => labelIdToGroupName.get(label.id))\n .filter(ExcludesFalsy);\n\n const lock = Lock();\n let lockMergePr: LockedMergePr | undefined;\n let automergeQueue: LockedMergePr[] = [];\n\n const lockPROrPRS = (\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise =>\n new Promise((resolve, reject) => {\n const logInfos = {\n repoName: repo.name,\n prIdOrIds,\n prNumberOrPrNumbers,\n };\n context.log.info('lock: try to lock pr', logInfos);\n lock(prIdOrIds, async (createReleaseCallback) => {\n const release = createReleaseCallback(() => {});\n context.log.info('lock: lock acquired', logInfos);\n try {\n await callback();\n } catch (err) {\n context.log.info('lock: release pr (with error)', logInfos);\n release();\n reject(err);\n return;\n }\n context.log.info('lock: release pr', logInfos);\n release();\n resolve();\n });\n });\n\n const reschedule = (context: Context, pr: LockedMergePr) => {\n if (!pr) throw new Error('Cannot reschedule undefined');\n context.log.info('reschedule', pr);\n setTimeout(() => {\n lockPROrPRS('reschedule', pr.number, () => {\n return lockPROrPRS(String(pr.id), pr.number, async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n await autoMergeIfPossible(prResult.data, context, repoContext);\n });\n });\n }, 1000);\n };\n\n return Object.assign(repoContext, {\n labels,\n protectedLabelIds,\n hasNeedsReview,\n hasRequestedReview,\n hasChangesRequestedReview,\n hasApprovesReview,\n getNeedsReviewGroupNames,\n\n getMergeLockedPr: () => lockMergePr,\n addMergeLockPr: (pr: LockedMergePr): void => {\n console.log('merge lock: lock', pr);\n if (lockMergePr && String(lockMergePr.number) === String(pr.number)) {\n return;\n }\n if (lockMergePr) throw new Error('Already have lock');\n lockMergePr = pr;\n },\n removePrFromAutomergeQueue: (context, prNumber: number | string): void => {\n context.log('merge lock: remove', { prNumber });\n if (lockMergePr && String(lockMergePr.number) === String(prNumber)) {\n lockMergePr = automergeQueue.shift();\n context.log('merge lock: next', { lockMergePr });\n if (lockMergePr) {\n reschedule(context, lockMergePr);\n }\n } else {\n automergeQueue = automergeQueue.filter(\n (value) => String(value.number) !== String(prNumber),\n );\n }\n },\n pushAutomergeQueue: (pr: LockedMergePr): void => {\n console.log('merge lock: push queue', {\n pr,\n lockMergePr,\n automergeQueue,\n });\n if (!automergeQueue.some((p) => p.number === pr.number)) {\n automergeQueue.push(pr);\n }\n },\n reschedule,\n\n lockPROrPRS,\n } as RepoContextWithoutTeamContext);\n}\n\nconst repoContextsPromise = new Map>();\nconst repoContexts = new Map();\n\nexport const shouldIgnoreRepo = (\n repoName: string,\n orgConfig: Config,\n): boolean => {\n const ignoreRepoRegexp =\n orgConfig.ignoreRepoPattern &&\n new RegExp(`^${orgConfig.ignoreRepoPattern}$`);\n\n if (repoName === 'reviewflow-test') {\n return process.env.REVIEWFLOW_NAME !== 'reviewflow-test';\n }\n\n if (ignoreRepoRegexp) {\n return ignoreRepoRegexp.test(repoName);\n }\n\n return false;\n};\n\nexport const obtainRepoContext = (\n context: Context,\n): Promise | RepoContext | null => {\n const repo = context.payload.repository;\n const owner = repo.owner;\n const key = repo.id;\n\n const existingRepoContext = repoContexts.get(key);\n if (existingRepoContext) return existingRepoContext;\n\n const existingPromise = repoContextsPromise.get(key);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const orgConfig = orgsConfigs[owner.login];\n\n if (!orgConfig) {\n console.warn(owner.login, Object.keys(orgsConfigs));\n return null;\n }\n\n if (shouldIgnoreRepo(repo.name, orgConfig)) {\n console.warn('repo ignored', { owner: repo.owner.login, name: repo.name });\n return null;\n }\n\n const promise = initRepoContext(context, orgConfig);\n repoContextsPromise.set(key, promise);\n\n return promise.then((repoContext) => {\n repoContextsPromise.delete(key);\n repoContexts.set(key, repoContext);\n return repoContext;\n });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { obtainRepoContext, RepoContext } from '../context/repoContext';\n\nexport type PRHandler = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n fourthArgument?: FourthArgument,\n) => Promise;\n\nexport type CallbackWithPRAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const handlerPullRequestChange = async <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n callback: CallbackWithPRAndRepoContext,\n): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n return repoContext.lockPROrPRS(\n String(context.payload.pull_request.id),\n context.payload.pull_request.number,\n async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: context.payload.pull_request.number,\n }),\n );\n\n await callback(prResult.data, repoContext);\n },\n );\n};\n\ntype CallbackPRAndContextAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestChange = <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n callback: CallbackPRAndContextAndRepoContext,\n) => (context: Context) => {\n return handlerPullRequestChange(context, (pr, repoContext) =>\n callback(pr, context, repoContext),\n );\n};\n\ntype CallbackContextAndRepoContext = (\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestsChange = (\n getPullRequests: (\n context: Context,\n repoContext: RepoContext,\n ) => { id: string | number; number: number }[],\n callback: CallbackContextAndRepoContext,\n) => async (context: Context): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n const prs = getPullRequests(context, repoContext);\n if (prs.length === 0) return;\n return repoContext.lockPROrPRS(\n prs.map((pr) => String(pr.id)),\n prs.map((pr) => pr.number),\n () => callback(context, repoContext),\n );\n};\n","import Webhooks from '@octokit/webhooks';\nimport { PRHandler } from '../utils';\n\nexport const autoAssignPRToCreator: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n if (!repoContext.config.autoAssignToCreator) return;\n if (pr.assignees.length !== 0) return;\n if (pr.user.type === 'Bot') return;\n\n await context.github.issues.addAssignees(\n context.issue({\n assignees: [pr.user.login],\n }),\n );\n};\n","export const cleanTitle = (title: string): string =>\n title\n .trim()\n .replace(\n /[\\s-]+\\[?\\s*([A-Za-z][A-Za-z\\d]+)[- ](\\d+)\\s*]?\\s*$/,\n (s, arg1, arg2) => ` ${arg1.toUpperCase()}-${arg2}`,\n )\n .replace(/^([A-Za-z]+)[/:]\\s*/, (s, arg1) => `${arg1.toLowerCase()}: `)\n .replace(/^Revert \"([^\"]+)\"$/, 'revert: $1')\n .replace(/\\s+[[\\]]\\s*no\\s*issue\\s*[[\\]]$/i, ' [no issue]')\n // eslint-disable-next-line unicorn/no-unsafe-regex\n .replace(/^(revert:.*)(\\s+\\(#\\d+\\))$/, '$1');\n","import { StatusInfo } from '../../../orgsConfigs/types';\nimport { parseBodyWithOptions, parseBody } from './parseBody';\nimport { Options, optionsLabels } from './prOptions';\n\nconst toMarkdownOptions = (options: Record) => {\n return optionsLabels\n .map(\n ({ name, label }) =>\n `- [${options[name] ? 'x' : ' '}] ${label}`,\n )\n .join('\\n');\n};\n\nconst toMarkdownInfos = (infos: StatusInfo[]) => {\n return infos\n .map((info) => {\n if (info.url) return `[${info.title}](${info.url})`;\n return info.title;\n })\n .join('\\n');\n};\n\ninterface UpdatedBodyWithOptions {\n body: string;\n options?: Record;\n}\n\nexport const updateBody = (\n body: string,\n defaultConfig: Record,\n infos?: StatusInfo[],\n updateOptions?: Partial>,\n): UpdatedBodyWithOptions => {\n const parsed = parseBodyWithOptions(body, defaultConfig);\n if (!parsed) {\n console.info('could not parse body');\n return { body };\n }\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n options,\n } = parsed;\n\n const infosAndCommitNotesParagraph = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^\\s*(?:(#### Infos:.*)?(#### Commits Notes:.*)?#### Options:)?.*$/s,\n // eslint-disable-next-line no-nested-ternary\n !infos\n ? '$1$2'\n : infos.length !== 0\n ? `#### Infos:\\n${toMarkdownInfos(infos)}\\n$2`\n : '$2',\n );\n\n const updatedOptions = !updateOptions\n ? options\n : { ...options, ...updateOptions };\n\n return {\n options: updatedOptions,\n body: `${content}${reviewflowContentColPrefix}\n${infosAndCommitNotesParagraph}#### Options:\n${toMarkdownOptions(updatedOptions)}\n${reviewflowContentColSuffix}${ending || ''}`,\n };\n};\n\nexport const updateBodyCommitsNotes = (\n body: string,\n commitNotes?: string,\n): string => {\n const parsed = parseBody(body);\n if (!parsed) {\n console.info('could not parse body');\n return body;\n }\n\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n } = parsed;\n\n const reviewflowContentColReplaced = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /(?:#### Commits Notes:.*)?(#### Options:)/s,\n // eslint-disable-next-line no-nested-ternary\n !commitNotes ? '$1' : `#### Commits Notes:\\n\\n${commitNotes}\\n\\n$1`,\n );\n\n return `${content}${reviewflowContentColPrefix}${reviewflowContentColReplaced}${reviewflowContentColSuffix}${ending ||\n ''}`;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\n\ninterface UpdatePr {\n title?: string;\n body?: string;\n}\n\nexport const updatePrIfNeeded = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n update: UpdatePr,\n): Promise => {\n const hasDiffInTitle = update.title && pr.title !== update.title;\n const hasDiffInBody = update.body && pr.body !== update.body;\n\n if (hasDiffInTitle || hasDiffInBody) {\n const diff: Partial> = {};\n if (hasDiffInTitle) {\n diff.title = update.title;\n pr.title = update.title as string;\n }\n if (hasDiffInBody) {\n diff.body = update.body;\n pr.body = update.body as string;\n }\n\n await context.github.issues.update(context.issue(diff));\n }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\nimport hasLabelInPR from './hasLabelInPR';\n\ninterface SyncLabelOptions {\n onRemove?: () => void | Promise;\n onAdd?: (prLabels: LabelResponse[]) => void | Promise;\n}\n\nexport default async function syncLabel<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n shouldHaveLabel: boolean,\n label: LabelResponse,\n prHasLabel = hasLabelInPR(pr.labels, label),\n { onRemove, onAdd }: SyncLabelOptions = {},\n): Promise {\n if (prHasLabel && !shouldHaveLabel) {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n if (onRemove) await onRemove();\n }\n if (shouldHaveLabel && !prHasLabel) {\n const response = await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n if (onAdd) await onAdd(response.data);\n }\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context } from 'probot';\n\nexport default async function createStatus<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n name: string,\n sha: string,\n type: 'failure' | 'success',\n description: string,\n url?: string,\n): Promise {\n await context.github.repos.createStatus(\n context.repo({\n context:\n name === ''\n ? process.env.REVIEWFLOW_NAME\n : `${process.env.REVIEWFLOW_NAME}/${name}`,\n sha,\n state: type,\n description,\n target_url: url,\n }),\n );\n}\n","/* eslint-disable max-lines */\nimport Webhooks from '@octokit/webhooks';\nimport { StatusError, StatusInfo } from '../../orgsConfigs/types';\nimport { PRHandler } from '../utils';\nimport { cleanTitle } from './utils/cleanTitle';\nimport { updateBody } from './utils/updateBody';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport { updatePrIfNeeded } from './updatePr';\nimport hasLabelInPR from './utils/hasLabelInPR';\nimport syncLabel from './utils/syncLabel';\nimport createStatus from './utils/createStatus';\n\ninterface StatusWithInfo {\n name: string;\n info: StatusInfo;\n error?: undefined;\n}\n\ninterface StatusWithError {\n name: string;\n error: StatusError;\n info?: undefined;\n}\n\ntype Status = StatusWithInfo | StatusWithError;\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const editOpenedPR: PRHandler<\n Webhooks.WebhookPayloadPullRequest,\n { skipAutoMerge: boolean },\n string\n> = async (pr, context, repoContext, previousSha) => {\n const repo = context.payload.repository;\n\n // do not lint pr from forks\n if (pr.head.repo.id !== repo.id) return { skipAutoMerge: true };\n\n const title = repoContext.config.trimTitle ? cleanTitle(pr.title) : pr.title;\n\n const isPrFromBot = pr.user.type === 'Bot';\n\n const statuses: Status[] = [];\n\n const errorRule = repoContext.config.parsePR.title.find((rule) => {\n if (rule.bot === false && isPrFromBot) return false;\n\n const match = rule.regExp.exec(title);\n if (match === null) {\n if (rule.status) {\n statuses.push({ name: rule.status, error: rule.error });\n }\n return true;\n }\n\n if (rule.status && rule.statusInfoFromMatch) {\n statuses.push({\n name: rule.status,\n info: rule.statusInfoFromMatch(match),\n });\n return false;\n }\n\n return false;\n });\n\n const date = new Date().toISOString();\n\n const hasLintPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check): boolean => check.name === `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n );\n\n await Promise.all(\n [\n ...statuses.map(\n ({ name, error, info }): Promise =>\n createStatus(\n context,\n name,\n pr.head.sha,\n error ? 'failure' : 'success',\n error ? error.title : (info as StatusInfo).title,\n error ? undefined : (info as StatusInfo).url,\n ),\n ),\n ...(previousSha\n ? statuses\n .map(\n ({ name, error, info }): Promise | undefined =>\n error\n ? createStatus(\n context,\n name,\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n )\n .filter(ExcludesFalsy)\n : []),\n hasLintPrCheck &&\n context.github.checks.create(\n context.repo({\n name: `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n head_sha: pr.head.sha,\n status: 'completed' as 'completed',\n conclusion: (errorRule ? 'failure' : 'success') as\n | 'failure'\n | 'success',\n started_at: date,\n completed_at: date,\n output: errorRule\n ? errorRule.error\n : {\n title: '✓ Your PR is valid',\n summary: '',\n },\n }),\n ),\n !hasLintPrCheck && previousSha && errorRule\n ? createStatus(\n context,\n 'lint-pr',\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n !hasLintPrCheck &&\n createStatus(\n context,\n 'lint-pr',\n pr.head.sha,\n errorRule ? 'failure' : 'success',\n errorRule ? errorRule.error.title : '✓ Your PR is valid',\n ),\n ].filter(ExcludesFalsy),\n );\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const prHasFeatureBranchLabel = hasLabelInPR(pr.labels, featureBranchLabel);\n const prHasSkipCiLabel = hasLabelInPR(pr.labels, skipCiLabel);\n const prHasAutoMergeLabel = hasLabelInPR(pr.labels, automergeLabel);\n\n const defaultOptions = {\n ...repoContext.config.prDefaultOptions,\n featureBranch: prHasFeatureBranchLabel,\n autoMergeWithSkipCi: prHasSkipCiLabel,\n autoMerge: prHasAutoMergeLabel,\n };\n\n const { body, options } = updateBody(pr.body, defaultOptions, statuses\n .filter((status) => status.info && status.info.inBody)\n .map((status) => status.info) as StatusInfo[]);\n await updatePrIfNeeded(pr, context, repoContext, { title, body });\n\n if (options && (featureBranchLabel || automergeLabel)) {\n await Promise.all([\n featureBranchLabel &&\n syncLabel(\n pr,\n context,\n options.featureBranch,\n featureBranchLabel,\n prHasFeatureBranchLabel,\n ),\n skipCiLabel &&\n syncLabel(\n pr,\n context,\n options.autoMergeWithSkipCi,\n skipCiLabel,\n prHasSkipCiLabel,\n ),\n automergeLabel &&\n syncLabel(\n pr,\n context,\n options.autoMerge,\n automergeLabel,\n prHasAutoMergeLabel,\n {\n onAdd: async (prLabels) => {\n await autoMergeIfPossible(pr, context, repoContext, prLabels);\n },\n onRemove: async () => {\n await repoContext.removePrFromAutomergeQueue(context, pr.number);\n },\n },\n ),\n ]);\n\n if (!automergeLabel) {\n return { skipAutoMerge: true };\n }\n }\n\n return { skipAutoMerge: false };\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { RepoContext } from '../../context/repoContext';\nimport createStatus from './utils/createStatus';\n\nconst addStatusCheck = async function<\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n { state, description }: { state: 'failure' | 'success'; description: string },\n previousSha?: string,\n): Promise {\n const hasPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check) => check.name === process.env.REVIEWFLOW_NAME,\n );\n\n context.log.info('add status check', { hasPrCheck, state, description });\n\n if (hasPrCheck) {\n await context.github.checks.create(\n context.repo({\n name: process.env.REVIEWFLOW_NAME as string,\n head_sha: pr.head.sha,\n started_at: pr.created_at,\n status: 'completed',\n conclusion: state,\n completed_at: new Date().toISOString(),\n output: {\n title: description,\n summary: '',\n },\n }),\n );\n } else if (previousSha && state === 'failure') {\n await Promise.all([\n createStatus(\n context,\n '',\n previousSha,\n 'success',\n 'New commits have been pushed',\n ),\n createStatus(context, '', pr.head.sha, state, description),\n ]);\n } else {\n await createStatus(context, '', pr.head.sha, state, description);\n }\n};\n\nexport const updateStatusCheckFromLabels = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n labels: LabelResponse[] = pr.labels || [],\n previousSha?: string,\n): Promise => {\n context.log.info('updateStatusCheckFromLabels', {\n labels: labels.map((l) => l && l.name),\n hasNeedsReview: repoContext.hasNeedsReview(labels),\n hasApprovesReview: repoContext.hasApprovesReview(labels),\n });\n\n const createFailedStatusCheck = (description: string): Promise =>\n addStatusCheck(\n pr,\n context,\n {\n state: 'failure',\n description,\n },\n previousSha,\n );\n\n if (pr.requested_reviewers.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${pr.requested_reviewers\n .map((rr: any) => rr.login)\n .join(', ')}`,\n );\n }\n\n if (repoContext.hasChangesRequestedReview(labels)) {\n return createFailedStatusCheck(\n 'Changes requested ! Push commits or discuss changes then re-request a review.',\n );\n }\n\n const needsReviewGroupNames = repoContext.getNeedsReviewGroupNames(labels);\n\n if (needsReviewGroupNames.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${needsReviewGroupNames.join(\n ', ',\n )}. Perhaps request someone ?`,\n );\n }\n\n if (!repoContext.hasApprovesReview(labels)) {\n if (repoContext.config.requiresReviewRequest) {\n return createFailedStatusCheck(\n 'Awaiting review... Perhaps request someone ?',\n );\n }\n }\n\n // if (\n // repoContext.config.requiresReviewRequest &&\n // !repoContext.hasRequestedReview(labels)\n // ) {\n // return createFailedStatusCheck(\n // context,\n // pr,\n // 'You need to request someone to review the PR',\n // );\n // return;\n // }\n // return createInProgressStatusCheck(context);\n // } else if (repoContext.hasApprovesReview(labels)) {\n return addStatusCheck(\n pr,\n context,\n {\n state: 'success',\n description: '✓ PR ready to merge !',\n },\n previousSha,\n );\n // }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { GroupLabels } from '../../orgsConfigs/types';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateStatusCheckFromLabels } from './updateStatusCheckFromLabels';\n\nexport const updateReviewStatus = async <\n E extends Webhooks.WebhookPayloadPullRequest,\n GroupNames extends string = any\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n reviewGroup: GroupNames,\n {\n add: labelsToAdd,\n remove: labelsToRemove,\n }: {\n add?: (GroupLabels | false | undefined)[];\n remove?: (GroupLabels | false | undefined)[];\n },\n): Promise => {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n labelsToAdd,\n labelsToRemove,\n });\n\n let prLabels: LabelResponse[] = pr.labels || [];\n if (!reviewGroup) return prLabels;\n\n const newLabelNames = new Set(\n prLabels.map((label: LabelResponse) => label.name),\n );\n\n const toAdd = new Set();\n const toAddNames = new Set();\n const toDelete = new Set();\n const toDeleteNames = new Set();\n const labels = repoContext.labels;\n\n const getLabelFromKey = (key: GroupLabels): undefined | LabelResponse => {\n const reviewConfig = repoContext.config.labels.review[reviewGroup];\n if (!reviewConfig) return undefined;\n\n return reviewConfig[key] && labels[reviewConfig[key]]\n ? labels[reviewConfig[key]]\n : undefined;\n };\n\n if (labelsToAdd) {\n labelsToAdd.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label || prLabels.some((prLabel) => prLabel.id === label.id)) {\n return;\n }\n newLabelNames.add(label.name);\n toAdd.add(key);\n toAddNames.add(label.name);\n });\n }\n\n if (labelsToRemove) {\n labelsToRemove.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label) return;\n const existing = prLabels.find((prLabel) => prLabel.id === label.id);\n if (existing) {\n newLabelNames.delete(existing.name);\n toDelete.add(key);\n toDeleteNames.add(existing.name);\n }\n });\n }\n\n // TODO move that elsewhere\n\n repoContext.getTeamsForLogin(pr.user.login).forEach((teamName) => {\n const team = repoContext.config.teams[teamName];\n if (team.labels) {\n team.labels.forEach((labelKey) => {\n const label = repoContext.labels[labelKey];\n if (label && !prLabels.some((prLabel) => prLabel.id === label.id)) {\n newLabelNames.add(label.name);\n toAdd.add(labelKey);\n toAddNames.add(label.name);\n }\n });\n }\n });\n\n // if (process.env.DRY_RUN) return;\n\n if (toAdd.size !== 0 || toDelete.size !== 0) {\n if (toDelete.size === 0 || toDelete.size < 4) {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n toAddNames: [...toAddNames],\n toDeleteNames: [...toDeleteNames],\n });\n\n if (toAdd.size !== 0) {\n const result = await context.github.issues.addLabels(\n context.issue({\n labels: [...toAddNames],\n }),\n );\n prLabels = result.data;\n }\n\n if (toDelete.size !== 0) {\n for (const toDeleteName of [...toDeleteNames]) {\n try {\n const result = await context.github.issues.removeLabel(\n context.issue({\n name: toDeleteName,\n }),\n );\n prLabels = result.data;\n } catch (err) {\n context.log.warn('error removing label', {\n err: err && err.message,\n });\n }\n }\n }\n } else {\n const newLabelNamesArray = [...newLabelNames];\n\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n oldLabels: prLabels.map((l: LabelResponse) => l.name),\n newLabelNames: newLabelNamesArray,\n });\n\n const result = await context.github.issues.replaceLabels(\n context.issue({\n labels: newLabelNamesArray,\n }),\n );\n prLabels = result.data;\n }\n }\n\n // if (toAdd.has('needsReview')) {\n // createInProgressStatusCheck(context);\n // } else if (\n // toDelete.has('needsReview') ||\n // (prLabels.length === 0 && toAdd.size === 1 && toAdd.has('approved'))\n // ) {\n await updateStatusCheckFromLabels(pr, context, repoContext, prLabels);\n // }\n\n return prLabels;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nexport const autoApproveAndAutoMerge = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n): Promise => {\n // const autoMergeLabel = repoContext.labels['merge/automerge'];\n const codeApprovedLabel = repoContext.labels['code/approved'];\n if (hasLabelInPR(pr.labels, codeApprovedLabel)) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n await autoMergeIfPossible(pr, context, repoContext);\n return true;\n }\n\n return false;\n};\n","import Webhooks from '@octokit/webhooks';\nimport parse from '@commitlint/parse';\nimport { PRHandler } from '../utils';\nimport syncLabel from './utils/syncLabel';\nimport { updateBodyCommitsNotes } from './utils/updateBody';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const readCommitsAndUpdateInfos: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n // tmp.data[0].sha\n // tmp.data[0].commit.message\n\n const commits = await context.github.paginate(\n context.github.pulls.listCommits(\n context.issue({\n // A custom page size up to 100. Default is 30.\n per_page: 100,\n }),\n ),\n (res) => res.data,\n );\n\n const conventionalCommits = await Promise.all(\n commits.map((c) => parse(c.commit.message)),\n );\n\n const breakingChangesCommits: any = conventionalCommits.reduce(\n (acc, c, index) => {\n const breakingChangesNotes = c.notes.filter(\n (note: any) => note.title === 'BREAKING CHANGE',\n );\n if (breakingChangesNotes.length !== 0) {\n acc.push({ commit: commits[index], breakingChangesNotes });\n }\n\n return acc;\n },\n [],\n );\n\n const breakingChangesLabel = repoContext.labels['breaking-changes'];\n const newBody = updateBodyCommitsNotes(\n pr.body,\n breakingChangesCommits.length === 0\n ? ''\n : `Breaking Changes:\\n${breakingChangesCommits\n .map(({ commit, breakingChangesNotes }: any) =>\n breakingChangesNotes.map(\n (note: any) =>\n `- ${note.text.replace('\\n', ' ')} (${commit.sha})`,\n ),\n )\n .join('')}`,\n );\n\n await Promise.all([\n syncLabel(\n pr,\n context,\n breakingChangesCommits.length !== 0,\n breakingChangesLabel,\n ),\n updatePrIfNeeded(pr, context, repoContext, { body: newBody }),\n ]);\n\n // TODO auto update ! in front of : to signal a breaking change when https://github.com/conventional-changelog/commitlint/issues/658 is closed\n};\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoAssignPRToCreator } from './actions/autoAssignPRToCreator';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { autoApproveAndAutoMerge } from './actions/autoApproveAndAutoMerge';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function opened(app: Application): void {\n app.on(\n 'pull_request.opened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const fromRenovate = pr.head.ref.startsWith('renovate/');\n\n await Promise.all([\n autoAssignPRToCreator(pr, context, repoContext),\n editOpenedPR(pr, context, repoContext).then(() => {\n return readCommitsAndUpdateInfos(pr, context, repoContext);\n }),\n fromRenovate\n ? autoApproveAndAutoMerge(pr, context, repoContext).then(\n async (approved: boolean): Promise => {\n if (!approved) {\n await updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n });\n }\n },\n )\n : updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved', 'changesRequested'],\n }),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { parseBodyWithOptions } from './actions/utils/parseBody';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.closed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const repo = context.payload.repository;\n\n if (pr.merged) {\n const parsedBody =\n pr.head.repo.id === repo.id &&\n parseBodyWithOptions(pr.body, repoContext.config.prDefaultOptions);\n\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n parsedBody && parsedBody.options.deleteAfterMerge\n ? context.github.git\n .deleteRef(context.repo({ ref: `heads/${pr.head.ref}` }))\n .catch(() => {})\n : undefined,\n ]);\n } else {\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n updateReviewStatus(pr, context, repoContext, 'dev', {\n remove: ['needsReview'],\n }),\n ]);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.reopened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n await Promise.all([\n updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved'],\n }),\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequested(app: Application): void {\n app.on(\n 'pull_request.review_requested',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n\n // ignore if sender is self (dismissed review rerequest review)\n if (sender.type === 'Bot') return;\n\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n const shouldWait = false;\n // repoContext.reviewShouldWait(reviewerGroup, pr.requested_reviewers, { includesWaitForGroups: true });\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup &&\n review.state === 'REQUEST_CHANGES' &&\n // In case this is a rerequest for review\n review.user.login !== reviewer.login,\n );\n\n if (!hasChangesRequestedInReviews) {\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', !shouldWait && 'requested'],\n remove: ['approved', 'changesRequested'],\n });\n }\n }\n\n if (sender.login === reviewer.login) return;\n\n if (!shouldWait && repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:eyes: ${repoContext.slack.mention(\n sender.login,\n )} requests your review on ${repoContext.slack.prLink(\n pr,\n context,\n )} !\\n> ${pr.title}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequestRemoved(app: Application): void {\n app.on(\n 'pull_request.review_request_removed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n },\n );\n\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const hasApprovedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'APPROVED',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n hasApprovedInReviews;\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: [\n // if changes requested by the one which requests was removed\n hasChangesRequestedInReviews && 'changesRequested',\n // if was already approved by another member in the group and has no other requests waiting\n approved && 'approved',\n ],\n // remove labels if has no other requests waiting\n remove: [\n approved && 'needsReview',\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n 'requested',\n ],\n });\n }\n\n if (sender.login === reviewer.login) return;\n\n if (repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull_and_crossbones: ${repoContext.slack.mention(\n sender.login,\n )} removed the request for your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewSubmitted(app: Application): void {\n app.on(\n 'pull_request_review.submitted',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const { user: reviewer, state } = (context.payload as any).review;\n if (pr.user.login === reviewer.login) return;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n let merged;\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n // TODO reenable this when accepted can notify request review to slack (dev accepted => design requested) and flag to disable for label (approved design ; still waiting for dev ?)\n // includesWaitForGroups: true,\n },\n );\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n state === 'approved';\n\n const newLabels = await updateReviewStatus(\n pr,\n context,\n repoContext,\n reviewerGroup,\n {\n add: [\n approved && 'approved',\n state === 'changes_requested' && 'changesRequested',\n ],\n remove: [\n approved && 'needsReview',\n !(\n hasRequestedReviewsForGroup || state === 'changes_requested'\n ) && 'requested',\n state === 'approved' &&\n !hasChangesRequestedInReviews &&\n 'changesRequested',\n state === 'changes_requested' && 'approved',\n ],\n },\n );\n\n if (approved && !hasChangesRequestedInReviews) {\n merged = await autoMergeIfPossible(\n pr,\n context,\n repoContext,\n newLabels,\n );\n }\n }\n\n const mention = repoContext.slack.mention(reviewer.login);\n const prUrl = repoContext.slack.prLink(pr, context);\n\n const message = (() => {\n if (state === 'changes_requested') {\n return `:x: ${mention} requests changes on ${prUrl}`;\n }\n if (state === 'approved') {\n return `:clap: :white_check_mark: ${mention} approves ${prUrl}${\n merged ? ' and PR is merged :tada:' : ''\n }`;\n }\n return `:speech_balloon: ${mention} commented on ${prUrl}`;\n })();\n\n repoContext.slack.postMessage(pr.user.login, message);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewDismissed(app: Application): void {\n app.on(\n 'pull_request_review.dismissed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).review.user;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', 'requested'],\n remove: [\n !hasChangesRequestedInReviews && 'changesRequested',\n 'approved',\n ],\n });\n }\n\n if (repoContext.slack) {\n if (sender.login === reviewer.login) {\n repoContext.slack.postMessage(\n pr.user.login,\n `:skull: ${repoContext.slack.mention(\n reviewer.login,\n )} dismissed his review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n } else {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull: ${repoContext.slack.mention(\n sender.login,\n )} dismissed your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function synchronize(app: Application): void {\n app.on(\n 'pull_request.synchronize',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n // old and new sha\n // const { before, after } = context.payload;\n const previousSha = (context.payload as any).before as string;\n\n await Promise.all([\n editOpenedPR(pr, context, repoContext, previousSha),\n // addStatusCheckToLatestCommit\n updateStatusCheckFromLabels(\n pr,\n context,\n repoContext,\n pr.labels,\n previousSha,\n ),\n\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n\n // call autoMergeIfPossible to re-add to the queue when push is fixed\n await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function edited(app: Application): void {\n app.on(\n 'pull_request.edited',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n if (\n sender.type === 'Bot' &&\n sender.login === `${process.env.REVIEWFLOW_NAME}[bot]`\n ) {\n return;\n }\n\n const { skipAutoMerge } = await editOpenedPR(pr, context, repoContext);\n if (!skipAutoMerge) await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateBody } from './utils/updateBody';\nimport { Options } from './utils/prOptions';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const updatePrBody = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n updateOptions: Partial>,\n): Promise => {\n const { body } = updateBody(\n pr.body,\n repoContext.config.prDefaultOptions,\n undefined,\n updateOptions,\n );\n\n await updatePrIfNeeded(pr, context, repoContext, { body });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { handlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { updatePrBody } from './actions/updatePrBody';\nimport hasLabelInPR from './actions/utils/hasLabelInPR';\n\nexport default function labelsChanged(app: Application): void {\n app.on(\n ['pull_request.labeled', 'pull_request.unlabeled'],\n async (context: Context) => {\n const sender = context.payload.sender;\n const fromRenovate =\n sender.type === 'Bot' && sender.login === 'renovate[bot]';\n context.payload.pull_request.head.ref.startsWith('renovate/');\n\n if (sender.type === 'Bot' && !fromRenovate) {\n return;\n }\n\n await handlerPullRequestChange(context, async (pr, repoContext) => {\n const label = (context.payload as any).label;\n if (fromRenovate) {\n const codeApprovedLabel = repoContext.labels['code/approved'];\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n const autoMergeSkipCiLabel = repoContext.labels['merge/skip-ci'];\n if (context.payload.action === 'labeled') {\n if (codeApprovedLabel && label.id === codeApprovedLabel.id) {\n // const { data: reviews } = await context.github.pulls.listReviews(\n // context.issue({ per_page: 1 }),\n // );\n // if (reviews.length !== 0) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n if (autoMergeSkipCiLabel) {\n await context.github.issues.addLabels(\n context.issue({ labels: [autoMergeSkipCiLabel.name] }),\n );\n }\n await updateStatusCheckFromLabels(pr, context, repoContext);\n await updatePrBody(pr, context, repoContext, {\n autoMergeWithSkipCi: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n autoMerge: hasLabelInPR(pr.labels, autoMergeLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMerge,\n });\n // }\n } else if (autoMergeLabel && label.id === autoMergeLabel.id) {\n await updatePrBody(pr, context, repoContext, {\n autoMerge: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n // Note: si c'est renovate qui ajoute le label autoMerge, le label codeApprovedLabel n'aurait pu etre ajouté que par renovate également (on est a quelques secondes de l'ouverture de la pr par renovate)\n autoMergeWithSkipCi: hasLabelInPR(pr.labels, codeApprovedLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMergeWithSkipCi,\n });\n }\n await autoMergeIfPossible(pr, context, repoContext);\n }\n return;\n }\n\n if (repoContext.protectedLabelIds.includes(label.id)) {\n if (context.payload.action === 'labeled') {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n } else {\n await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n }\n return;\n }\n\n await updateStatusCheckFromLabels(pr, context, repoContext);\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const option = (() => {\n if (featureBranchLabel && label.id === featureBranchLabel.id)\n return 'featureBranch';\n if (automergeLabel && label.id === automergeLabel.id)\n return 'autoMerge';\n if (skipCiLabel && label.id === skipCiLabel.id)\n return 'autoMergeWithSkipCi';\n return null;\n })();\n\n if (option) {\n await updatePrBody(pr, context, repoContext, {\n [option]: context.payload.action === 'labeled',\n });\n } else if (context.payload.action === 'labeled') {\n if (\n repoContext.labels['merge/automerge'] &&\n label.id === repoContext.labels['merge/automerge'].id\n ) {\n await autoMergeIfPossible(pr, context, repoContext);\n }\n }\n });\n },\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checkrunCompleted(app: Application): void {\n app.on(\n 'check_run.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_run.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_run.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checksuiteCompleted(app: Application): void {\n app.on(\n 'check_suite.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_suite.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_suite.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { LockedMergePr } from '../context/repoContext';\nimport { createHandlerPullRequestsChange } from './utils';\n\nconst isSameBranch = (\n context: Context,\n lockedPr: LockedMergePr,\n): boolean => {\n if (!lockedPr) return false;\n return !!context.payload.branches.find((b) => b.name === lockedPr.branch);\n};\n\nexport default function status(app: Application): void {\n app.on(\n 'status',\n createHandlerPullRequestsChange(\n (context, repoContext): LockedMergePr[] => {\n const lockedPr = repoContext.getMergeLockedPr();\n if (!lockedPr) return [];\n\n if (\n context.payload.state !== 'loading' &&\n isSameBranch(context, lockedPr)\n ) {\n return [lockedPr];\n }\n\n return [];\n },\n (context, repoContext): void => {\n const lockedPr = repoContext.getMergeLockedPr();\n // check if changed\n if (isSameBranch(context, lockedPr)) {\n repoContext.reschedule(context, lockedPr);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport openedHandler from './pr-handlers/opened';\nimport closedHandler from './pr-handlers/closed';\nimport reopenedHandler from './pr-handlers/reopened';\nimport reviewRequestedHandler from './pr-handlers/reviewRequested';\nimport reviewRequestRemovedHandler from './pr-handlers/reviewRequestRemoved';\nimport reviewSubmittedHandler from './pr-handlers/reviewSubmitted';\nimport reviewDismissedHandler from './pr-handlers/reviewDismissed';\nimport synchromizeHandler from './pr-handlers/synchronize';\nimport editedHandler from './pr-handlers/edited';\nimport labelsChanged from './pr-handlers/labelsChanged';\nimport checkrunCompleted from './pr-handlers/checkrunCompleted';\nimport checksuiteCompleted from './pr-handlers/checksuiteCompleted';\nimport status from './pr-handlers/status';\n\nexport default function initApp(app: Application): void {\n openedHandler(app);\n closedHandler(app);\n reopenedHandler(app);\n reviewRequestedHandler(app);\n reviewRequestRemovedHandler(app);\n\n // app.on('pull_request.closed', async context => {\n\n // });\n\n // app.on('pull_request.reopened', async context => {\n\n // });\n\n reviewSubmittedHandler(app);\n reviewDismissedHandler(app);\n labelsChanged(app);\n synchromizeHandler(app);\n editedHandler(app);\n\n checkrunCompleted(app);\n checksuiteCompleted(app);\n status(app);\n}\n","import 'dotenv/config';\nimport { Probot, Application } from 'probot';\nimport mongoInit from './mongo';\nimport appRouter from './appRouter';\nimport initApp from './initApp';\n\nif (!process.env.REVIEWFLOW_NAME) process.env.REVIEWFLOW_NAME = 'reviewflow';\nconsole.log({ name: process.env.REVIEWFLOW_NAME });\n\n// const getConfig = require('probot-config')\n// const { MongoClient } = require('mongodb');\n\n// const connect = MongoClient.connect(process.env.MONGO_URL);\n// const db = connect.then(client => client.db(process.env.MONGO_DB));\n\n// let config = await getConfig(context, 'reviewflow.yml');\n\n// eslint-disable-next-line import/no-commonjs\nProbot.run(\n (app: Application): void => {\n const mongoStores = mongoInit();\n appRouter(app, mongoStores);\n initApp(app);\n },\n);\n"],"names":["process","env","MONGO_DB","Error","init","config","Map","MONGO_HOST","MONGO_PORT","MONGO_USER","set","MONGO_PASSWORD","connection","MongoConnection","Layout","lang","title","NAME","children","GITHUB_CLIENT_ID","GITHUB_CLIENT_SECRET","oauth2","create","client","id","secret","auth","tokenHost","tokenPath","authorizePath","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","AUTH_SECRET_KEY","signPromisified","sign","verifyPromisified","verify","secure","SECURE_COOKIE","createRedirectUri","req","strategy","host","hostname","PORT","readAuthCookie","cookie","cookies","algorithm","audience","headers","appRouter","app","router","route","api","use","cookieParser","get","res","redirect","authInfo","octokit","Octokit","accessToken","data","repos","list","per_page","send","renderToStaticMarkup","map","repo","owner","login","name","length","state","maxAge","httpOnly","redirectUri","githubAuth","authorizationCode","authorizeURL","redirect_uri","scope","query","error","error_description","code","cookieName","clearCookie","result","getToken","access_token","user","users","getAuthenticated","token","time","Date","now","expiresIn","params","repository","status","permissions","admin","data2","apps","getRepoInstallation","catch","err","undefined","REVIEWFLOW_NAME","slackToken","ORNIKAR_SLACK_TOKEN","autoAssignToCreator","trimTitle","ignoreRepoPattern","requiresReviewRequest","prDefaultOptions","featureBranch","autoMergeWithSkipCi","autoMerge","deleteAfterMerge","parsePR","regExp","summary","bot","statusInfoFromMatch","match","issue","inBody","url","groups","dev","JulienBreux","ORNIKAR_EMAIL_DOMAIN","CamilSadiki","busser","abarreir","arthurflachs","damienorny","darame07","Pixy","Radyum","christophehurpeau","HugoGarrido","LentnerStefan","CorentinAndre","Mxime","vlbr","mdcarter","design","jperriere","CoralineColasse","Lenamari","teams","ops","logins","labels","backends","frontends","waitForGroups","color","description","duplicate","documentation","rfc","bug","enhancement","question","wontfix","review","ci","inProgress","succeeded","failed","needsReview","requested","changesRequested","approved","tilap","orgsConfigs","ornikar","options","optionsRegexps","option","regexp","RegExp","optionsLabels","label","commentStart","commentEnd","regexpCols","regexpReviewflowCol","parseOptions","content","defaultConfig","reduce","acc","exec","parseBody","reviewFlowCol","reviewflowContent","ending","reviewFlowColMatch","reviewflowContentCol","reviewflowContentColPrefix","reviewflowContentColSuffix","parseBodyWithOptions","parsedBody","breakingChanges","replace","trim","hasLabelInPR","prLabels","some","l","hasFailedStatusOrChecks","pr","context","checks","github","listForRef","ref","head","sha","failedChecks","check_runs","filter","check","conclusion","log","info","combinedStatus","getCombinedStatusForRef","failedStatuses","statuses","autoMergeIfPossible","repoContext","autoMergeLabel","debug","prId","prNumber","number","removePrFromAutomergeQueue","createMergeLockPrFromPr","branch","hasNeedsReview","hasRequestedReview","lockedPr","getMergeLockedPr","pushAutomergeQueue","addMergeLockPr","mergeable","prResult","pulls","pull_number","merged","mergeable_state","reschedule","startsWith","body","includes","renovateRebaseBody","issues","update","base","merge","mergeResult","merge_method","commit_title","commit_message","Boolean","message","getLabelsForRepo","listLabelsForRepo","initRepoLabels","finalLabels","labelKey","labelConfig","Object","entries","labelColor","slice","existingLabel","find","createLabel","current_name","updateLabel","getKeys","o","keys","ExcludesFalsy","voidTeamSlack","mention","postMessage","Promise","resolve","prLink","initTeamSlack","githubLoginToSlackEmail","groupName","assign","slackClient","WebClient","allUsers","limit","members","values","email","member","profile","console","warn","im","open","channel","membersMap","getUserFromGithubLogin","githubLogin","text","DRY_RUN","chat","username","html_url","payload","initTeamContext","slackPromise","githubLoginToGroup","forEach","githubLoginToTeams","teamName","push","getReviewerGroups","githubLogins","Set","getReviewerGroup","getTeamsForLogin","reviewShouldWait","reviewerGroup","requestedReviewers","includesReviewerGroup","includesWaitForGroups","requestedReviewerGroups","request","group","slack","orgContextsPromise","orgContexts","obtainOrgContext","existingTeamContext","existingPromise","promise","then","orgContext","delete","initRepoContext","reviewGroupNames","needsReviewLabelIds","key","requestedReviewLabelIds","changesRequestedLabelIds","approvedReviewLabelIds","protectedLabelIds","labelIdToGroupName","reviewGroupLabels","lock","Lock","lockMergePr","automergeQueue","lockPROrPRS","prIdOrIds","prNumberOrPrNumbers","callback","reject","logInfos","repoName","createReleaseCallback","release","setTimeout","String","hasChangesRequestedReview","hasApprovesReview","getNeedsReviewGroupNames","shift","value","p","repoContextsPromise","repoContexts","shouldIgnoreRepo","orgConfig","ignoreRepoRegexp","test","obtainRepoContext","existingRepoContext","handlerPullRequestChange","pull_request","createHandlerPullRequestChange","createHandlerPullRequestsChange","getPullRequests","prs","autoAssignPRToCreator","assignees","type","addAssignees","cleanTitle","s","arg1","arg2","toUpperCase","toLowerCase","toMarkdownOptions","join","toMarkdownInfos","infos","updateBody","updateOptions","parsed","infosAndCommitNotesParagraph","updatedOptions","updateBodyCommitsNotes","commitNotes","reviewflowContentColReplaced","updatePrIfNeeded","hasDiffInTitle","hasDiffInBody","diff","syncLabel","shouldHaveLabel","prHasLabel","onRemove","onAdd","removeLabel","response","addLabels","createStatus","target_url","editOpenedPR","previousSha","skipAutoMerge","isPrFromBot","errorRule","rule","date","toISOString","hasLintPrCheck","all","head_sha","started_at","completed_at","output","featureBranchLabel","automergeLabel","skipCiLabel","prHasFeatureBranchLabel","prHasSkipCiLabel","prHasAutoMergeLabel","defaultOptions","addStatusCheck","hasPrCheck","created_at","updateStatusCheckFromLabels","createFailedStatusCheck","requested_reviewers","rr","needsReviewGroupNames","updateReviewStatus","reviewGroup","add","labelsToAdd","remove","labelsToRemove","newLabelNames","toAdd","toAddNames","toDelete","toDeleteNames","getLabelFromKey","reviewConfig","prLabel","existing","team","toDeleteName","newLabelNamesArray","oldLabels","replaceLabels","autoApproveAndAutoMerge","codeApprovedLabel","createReview","event","readCommitsAndUpdateInfos","commits","paginate","listCommits","conventionalCommits","c","parse","commit","breakingChangesCommits","index","breakingChangesNotes","notes","note","breakingChangesLabel","newBody","opened","on","fromRenovate","closed","git","deleteRef","reviewRequested","sender","reviewer","requested_reviewer","reviews","listReviews","hasChangesRequestedInReviews","reviewRequestRemoved","hasRequestedReviewsForGroup","hasApprovedInReviews","reviewSubmitted","newLabels","prUrl","reviewDismissed","synchronize","before","edited","updatePrBody","labelsChanged","autoMergeSkipCiLabel","action","checkrunCompleted","check_run","pull_requests","checksuiteCompleted","check_suite","isSameBranch","branches","b","initApp","openedHandler","closedHandler","reopenedHandler","reviewRequestedHandler","reviewRequestRemovedHandler","reviewSubmittedHandler","reviewDismissedHandler","synchromizeHandler","editedHandler","Probot","run","mongoStores","mongoInit"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index-node10-dev.cjs.js","sources":["../src/mongo.ts","../src/views/Layout.tsx","../src/auth/github.ts","../src/utils/random.ts","../src/appRouter.tsx","../src/orgsConfigs/ornikar.ts","../src/orgsConfigs/christophehurpeau.ts","../src/orgsConfigs/index.ts","../src/pr-handlers/actions/utils/prOptions.ts","../src/pr-handlers/actions/utils/parseBody.ts","../src/pr-handlers/actions/utils/hasLabelInPR.ts","../src/pr-handlers/actions/autoMergeIfPossible.ts","../src/context/initRepoLabels.ts","../src/context/utils.ts","../src/context/initTeamSlack.ts","../src/context/orgContext.ts","../src/context/repoContext.ts","../src/pr-handlers/utils.ts","../src/pr-handlers/actions/autoAssignPRToCreator.ts","../src/pr-handlers/actions/utils/cleanTitle.ts","../src/pr-handlers/actions/utils/updateBody.ts","../src/pr-handlers/actions/updatePr.ts","../src/pr-handlers/actions/utils/syncLabel.ts","../src/pr-handlers/actions/utils/createStatus.ts","../src/pr-handlers/actions/editOpenedPR.ts","../src/pr-handlers/actions/updateStatusCheckFromLabels.ts","../src/pr-handlers/actions/updateReviewStatus.ts","../src/pr-handlers/actions/autoApproveAndAutoMerge.ts","../src/pr-handlers/actions/readCommitsAndUpdateInfos.ts","../src/pr-handlers/opened.ts","../src/pr-handlers/closed.ts","../src/pr-handlers/reopened.ts","../src/pr-handlers/reviewRequested.ts","../src/pr-handlers/reviewRequestRemoved.ts","../src/pr-handlers/reviewSubmitted.ts","../src/pr-handlers/reviewDismissed.ts","../src/pr-handlers/synchronize.ts","../src/pr-handlers/edited.ts","../src/pr-handlers/actions/updatePrBody.ts","../src/pr-handlers/labelsChanged.ts","../src/pr-handlers/checkrunCompleted.ts","../src/pr-handlers/checksuiteCompleted.ts","../src/pr-handlers/status.ts","../src/initApp.ts","../src/index.ts"],"sourcesContent":["// import { MongoStore, MongoConnection, MongoModel } from 'liwi-mongo';\nimport { MongoConnection } from 'liwi-mongo';\n\n// export interface PrEventsModel extends MongoModel {\n// owner: string;\n// repo: string;\n// prId: string;\n// prNumber: string;\n// event: string;\n// }\n\nexport interface MongoStores {\n connection: MongoConnection;\n // prEvents: MongoStore;\n}\n\nif (!process.env.MONGO_DB) {\n throw new Error('MONGO_DB is missing in process.env');\n}\n\nexport default function init(): MongoStores {\n const config = new Map([\n ['host', process.env.MONGO_HOST || 'localhost'],\n ['port', process.env.MONGO_PORT || '27017'],\n ['database', process.env.MONGO_DB as string],\n ]);\n if (process.env.MONGO_USER) {\n config.set('user', process.env.MONGO_USER);\n config.set('password', process.env.MONGO_PASSWORD as string);\n }\n const connection = new MongoConnection(config);\n\n // const prEvents = new MongoStore(connection, 'prEvents');\n // prEvents.collection.then((coll) => {\n // coll.createIndex({ owner: 1, repo: 1, ???: 1 });\n // });\n\n // return { connection, prEvents };\n return { connection };\n}\n","import React from 'react';\n\ninterface LayoutProps {\n lang?: string;\n title?: string;\n children: React.ReactNode;\n}\n\nexport default function Layout({\n lang = 'en',\n title = process.env.NAME,\n children,\n}: LayoutProps) {\n return (\n \n \n \n \n {title}\n \n \n \n {children}\n \n );\n}\n","import { create } from 'simple-oauth2';\n\nif (!process.env.GITHUB_CLIENT_ID) {\n throw new Error('Missing env variable: GITHUB_CLIENT_ID');\n}\n\nif (!process.env.GITHUB_CLIENT_SECRET) {\n throw new Error('Missing env variable: GITHUB_CLIENT_SECRET');\n}\n\nexport const oauth2 = create({\n client: {\n id: process.env.GITHUB_CLIENT_ID,\n secret: process.env.GITHUB_CLIENT_SECRET,\n },\n auth: {\n tokenHost: 'https://github.com',\n tokenPath: '/login/oauth/access_token',\n authorizePath: '/login/oauth/authorize',\n },\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable max-lines */\n\nimport { promisify } from 'util';\nimport { Request, Response } from 'express';\nimport { Octokit, Application } from 'probot';\nimport cookieParser from 'cookie-parser';\nimport { sign, verify } from 'jsonwebtoken';\nimport React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { MongoStores } from './mongo';\nimport Layout from './views/Layout';\nimport * as githubAuth from './auth/github';\nimport { randomHex } from './utils/random';\n\nif (!process.env.AUTH_SECRET_KEY) {\n throw new Error('Missing env variable: AUTH_SECRET_KEY');\n}\n\nconst AUTH_SECRET_KEY: string = process.env.AUTH_SECRET_KEY;\n\nconst signPromisified: any = promisify(sign);\nconst verifyPromisified: any = promisify(verify);\n\nconst secure =\n !!process.env.SECURE_COOKIE && process.env.SECURE_COOKIE !== 'false';\n\nconst createRedirectUri = (req: Request, strategy: string) => {\n const host = `http${secure ? 's' : ''}://${req.hostname}${\n req.hostname === 'localhost' ? `:${process.env.PORT}` : ''\n }`;\n return `${host}/app/${strategy}/login-response`;\n};\n\ninterface AuthInfo {\n login: string;\n accessToken: string;\n time: number;\n}\n\nconst readAuthCookie = (\n req: Request,\n strategy: string,\n): undefined | Promise => {\n const cookie = req.cookies[`auth_${strategy}`];\n if (!cookie) return;\n\n return verifyPromisified(cookie, AUTH_SECRET_KEY, {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n });\n};\n\nexport default async function appRouter(\n app: Application,\n mongoStuff: MongoStores,\n): Promise {\n const router = app.route('/app');\n const api = await app.auth();\n router.use(cookieParser());\n\n router.get('/', (req, res) => {\n res.redirect('/gh');\n });\n\n router.get('/gh', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/app/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.list({ per_page: 100 });\n\n res.send(\n renderToStaticMarkup(\n \n
\n

Your repositories

\n
    \n {data.map((repo: any) => (\n
  • \n \n {repo.name}\n \n
  • \n ))}\n
\n
\n {data.length === 100 && (\n
We currently have a limit to 100 repositories
\n )}\n
,\n ),\n );\n });\n\n router.get('/gh/login', async (req: Request, res: Response) => {\n const strategy = 'gh';\n if (await readAuthCookie(req, strategy)) {\n return res.redirect('/app/gh');\n }\n\n const state = await randomHex(8);\n res.cookie(`auth_${strategy}_${state}`, strategy, {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure,\n });\n\n const redirectUri = githubAuth.oauth2.authorizationCode.authorizeURL({\n redirect_uri: createRedirectUri(req, strategy),\n scope: 'read:user,repo',\n state,\n // grant_type: options.grantType,\n // access_type: options.accessType,\n // login_hint: req.query.loginHint,\n // include_granted_scopes: options.includeGrantedScopes,\n });\n\n // console.log(redirectUri);\n\n res.redirect(redirectUri);\n });\n\n router.get('/gh/login-response', async (req, res) => {\n if (req.query.error) {\n res.send(req.query.error_description);\n return;\n }\n\n const strategy = 'gh';\n const code = req.query.code;\n const state = req.query.state;\n const cookieName = `auth_${strategy}_${state}`;\n const cookie = req.cookies && req.cookies[cookieName];\n if (!cookie) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n 'No cookie for this state. Retry ?',\n );\n return;\n }\n res.clearCookie(cookieName);\n\n const result = await githubAuth.oauth2.authorizationCode.getToken({\n code,\n redirect_uri: createRedirectUri(req, strategy),\n });\n\n if (!result) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n renderToStaticMarkup(\n \n
\n Could not get access token. Retry ?\n
\n
,\n ),\n );\n return;\n }\n\n const accessToken = result.access_token;\n const octokit = new Octokit({ auth: `token ${accessToken}` });\n const user = await octokit.users.getAuthenticated({});\n const login = user.data.login;\n\n const token = await signPromisified(\n { login, accessToken, time: Date.now() },\n AUTH_SECRET_KEY,\n {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n expiresIn: '10 days',\n },\n );\n\n res.cookie(`auth_${strategy}`, token, {\n httpOnly: true,\n secure,\n });\n\n res.redirect('/gh');\n });\n\n router.get('/gh/repository/:owner/:repository', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.get({\n owner: req.params.owner,\n repo: req.params.repository,\n });\n\n if (!data) {\n return res.status(404).send(\n renderToStaticMarkup(\n \n
repo not found
\n
,\n ),\n );\n }\n\n if (!data.permissions.admin) {\n return res.status(401).send(\n renderToStaticMarkup(\n \n
\n not authorized to see this repo, you need to have admin permission\n
\n
,\n ),\n );\n }\n\n const { data: data2 } = await api.apps\n .getRepoInstallation({\n owner: req.params.owner,\n repo: req.params.repository,\n })\n .catch((err) => {\n return { status: err.status, data: undefined };\n });\n\n if (!data2) {\n return res.send(\n renderToStaticMarkup(\n \n
\n {process.env.REVIEWFLOW_NAME} {\"isn't\"} installed on this repo. Go\n to{' '}\n \n Github Configuration\n {' '}\n to add it.\n
\n
,\n ),\n );\n }\n\n res.send(\n renderToStaticMarkup(\n \n
\n

{req.params.repository}

\n
\n
,\n ),\n );\n });\n}\n","/* eslint-disable max-lines */\n\nimport { Config } from './types';\n\nconst config: Config<'dev' | 'design', 'ops' | 'frontends' | 'backends'> = {\n slackToken: process.env.ORNIKAR_SLACK_TOKEN,\n autoAssignToCreator: true,\n trimTitle: true,\n ignoreRepoPattern: '(infra-.*|devenv)',\n requiresReviewRequest: true,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n {\n bot: false,\n regExp: /\\s([A-Z][A-Z\\d]+-(\\d+)|\\[no issue])$/,\n error: {\n title: 'Title does not have JIRA issue',\n summary: 'The PR title should end with ONK-0000, or [no issue]',\n },\n status: 'jira-issue',\n statusInfoFromMatch: (match) => {\n const issue = match[1];\n if (issue === '[no issue]') {\n return {\n title: 'No issue',\n summary: '',\n };\n }\n return {\n inBody: true,\n url: `https://ornikar.atlassian.net/browse/${issue}`,\n title: `JIRA issue: ${issue}`,\n summary: `[${issue}](https://ornikar.atlassian.net/browse/${issue})`,\n };\n },\n },\n ],\n },\n\n groups: {\n dev: {\n /* ops */\n JulienBreux: `julien.breux${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Alan-pad': null,\n CamilSadiki: null,\n busser: null,\n\n /* back */\n abarreir: `alexandre${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n arthurflachs: `arthur${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n damienorny: `damien.orny${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Thierry-girod': `thierry${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n darame07: `kevin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Pixy: `pierre-alexis${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Radyum: `romain.reynaud${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n\n /* front */\n christophehurpeau: `christophe${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n HugoGarrido: `hugo${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n LentnerStefan: `stefan${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CorentinAndre: `corentin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Mxime: `maxime${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n vlbr: `valerian${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'budet-b': `benjamin.budet${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n mdcarter: `maxime.dehaye${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n design: {\n jperriere: `julien${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CoralineColasse: `coraline${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Lenamari: `lena${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'AlexisRiols-Ornikar': `alexis.riols${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n },\n\n teams: {\n ops: {\n logins: ['JulienBreux', 'Alan-pad', 'CamilSadiki', 'busser'],\n labels: ['teams/ops'],\n },\n\n backends: {\n logins: [\n 'abarreir',\n 'arthurflachs',\n 'damienorny',\n 'Thierry-girod',\n 'darame07',\n 'Pixy',\n 'Radyum',\n ],\n labels: ['teams/backend'],\n },\n\n frontends: {\n logins: [\n 'christophehurpeau',\n 'HugoGarrido',\n 'LentnerStefan',\n 'CorentinAndre',\n 'Mxime',\n 'vlbr',\n 'budet-b',\n 'mdcarter',\n ],\n labels: ['teams/frontend'],\n },\n },\n\n waitForGroups: {\n dev: [],\n design: ['dev'],\n },\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFC44C',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#DAE1E6',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* design */\n 'design/needs-review': {\n name: ':art: design/needs-review',\n color: '#FFC44C',\n },\n 'design/review-requested': {\n name: ':art: design/review-requested',\n color: '#DAE1E6',\n },\n 'design/changes-requested': {\n name: ':art: design/changes-requested',\n color: '#e11d21',\n },\n 'design/approved': {\n name: ':art: design/approved',\n color: '#64DD17',\n },\n\n /* teams */\n 'teams/ops': {\n name: 'ops',\n color: '#003b55',\n },\n 'teams/backend': {\n name: 'backend',\n color: '#6ad8cb',\n },\n 'teams/frontend': {\n name: 'frontend',\n color: '#8a5abc',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n description: 'This issue or pull request will need a new major version',\n color: '#FF6F00',\n },\n duplicate: {\n name: 'duplicate',\n description: 'This issue or pull request already exists',\n color: '#ECEFF1',\n },\n documentation: {\n name: 'documentation',\n description: 'Improvements or additions to documentation',\n color: '#7FCEFF',\n },\n rfc: {\n name: 'RFC',\n description: 'Request For Comments',\n color: '#FFD3B2',\n },\n bug: {\n name: 'bug',\n description: \"Something isn't working\",\n color: '#FF3D00',\n },\n enhancement: {\n name: 'enhancement',\n description: 'New feature or request',\n color: '#7FCEFF',\n },\n 'help-wanted': {\n name: 'help wanted',\n description: 'Extra attention is needed',\n color: '#B1EE8B',\n },\n question: {\n name: 'question',\n description: 'Further information is requested',\n color: '#F860A4',\n },\n wontfix: {\n name: 'wontfix',\n description: 'This will not be worked on',\n color: '#ECEFF1',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n design: {\n needsReview: 'design/needs-review',\n requested: 'design/review-requested',\n changesRequested: 'design/changes-requested',\n approved: 'design/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config } from './types';\n\nconst config: Config<'dev', never> = {\n autoAssignToCreator: true,\n trimTitle: true,\n requiresReviewRequest: false,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?(!)?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n ],\n },\n groups: {\n dev: {\n christophehurpeau: 'christophe@hurpeau.com',\n 'chris-reviewflow': 'christophe.hurpeau+reviewflow@gmail.com',\n tilap: 'jlavinh@gmail.com',\n },\n },\n waitForGroups: {\n dev: [],\n },\n teams: {},\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFD57F',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#B2E1FF',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n color: '#ef7934',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config as ConfigType } from './types';\nimport defaultConfig from './defaultConfig';\nimport ornikar from './ornikar';\nimport christophehurpeau from './christophehurpeau';\n\nexport type Config<\n GroupNames extends string = any,\n TeamNames extends string = any\n> = ConfigType;\n\nexport const orgsConfigs: { [owner: string]: Config } = {\n ornikar,\n christophehurpeau,\n};\n\nexport { defaultConfig };\n\n// flat requires node 11\n// export const getMembers = (\n// groups: Record,\n// ): string[] => {\n// return Object.values(groups).flat(1);\n// };\n","export type Options =\n | 'featureBranch'\n | 'autoMergeWithSkipCi'\n | 'autoMerge'\n | 'deleteAfterMerge';\n\nexport const options: Options[] = [\n 'featureBranch',\n 'autoMergeWithSkipCi',\n 'autoMerge',\n 'deleteAfterMerge',\n];\nexport const optionsRegexps: { name: Options; regexp: RegExp }[] = options.map(\n (option) => ({\n name: option,\n regexp: new RegExp(`\\\\[([ xX]?)]\\\\s*`),\n }),\n);\n\nexport const optionsLabels: { name: Options; label: string }[] = [\n { name: 'featureBranch', label: 'This PR is a feature branch' },\n {\n name: 'autoMergeWithSkipCi',\n label: 'Auto merge with `[skip ci]`',\n },\n {\n name: 'autoMerge',\n label:\n 'Auto merge when this PR is ready and has no failed statuses. (Also has a queue per repo to prevent multiple useless \"Update branch\" triggers)',\n },\n {\n name: 'deleteAfterMerge',\n label: 'Automatic branch delete after this PR is merged',\n },\n];\n","import { Options, optionsRegexps } from './prOptions';\n\nconst commentStart = '';\nconst commentEnd = \"\";\n\nconst regexpCols = /^(.*)((.*))(.*)$/is;\nconst regexpReviewflowCol = /^(\\s*<\\/td>]*>)\\s*(.*)\\s*(<\\/td><\\/tr><\\/table>\\s*)\\s*$/is;\n\ntype Config = Record;\n\nconst parseOptions = (content: string, defaultConfig: Config): Config => {\n return optionsRegexps.reduce(\n (acc, { name, regexp }) => {\n const match = regexp.exec(content);\n acc[name] = !match\n ? defaultConfig[name] || false\n : match[1] === 'x' || match[1] === 'X';\n return acc;\n },\n {} as any,\n ) as Config;\n};\n\ninterface ParseBodyResultWithoutOptions {\n content: string;\n ending: string;\n reviewflowContentCol: string;\n reviewflowContentColPrefix: string;\n reviewflowContentColSuffix: string;\n}\n\ninterface ParseBodyResultWithOptions extends ParseBodyResultWithoutOptions {\n options: Config;\n breakingChanges: string;\n}\n\nexport const parseBody = (\n description: string,\n): ParseBodyResultWithoutOptions | null => {\n const match = regexpCols.exec(description);\n if (!match) return null;\n const [, content, reviewFlowCol, reviewflowContent, ending] = match;\n const reviewFlowColMatch = regexpReviewflowCol.exec(reviewFlowCol);\n if (!reviewFlowColMatch) {\n return {\n content,\n ending,\n reviewflowContentCol: reviewflowContent,\n reviewflowContentColPrefix: commentStart,\n reviewflowContentColSuffix: commentEnd,\n };\n }\n const [\n ,\n reviewflowContentColPrefix,\n reviewflowContentCol,\n reviewflowContentColSuffix,\n ] = reviewFlowColMatch;\n\n return {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n };\n};\n\nexport const parseBodyWithOptions = (\n description: string,\n defaultConfig: Config,\n): ParseBodyResultWithOptions | null => {\n const parsedBody = parseBody(description);\n if (parsedBody === null) return null;\n\n // console.log(parsedBody.reviewflowContentCol);\n let breakingChanges = parsedBody.reviewflowContentCol.replace(\n /^.*#### Commits Notes:(.*)#### Options:.*$/s,\n '$1',\n );\n\n if (breakingChanges === parsedBody.reviewflowContentCol) {\n breakingChanges = '';\n } else {\n breakingChanges = breakingChanges.trim();\n }\n\n return {\n ...parsedBody,\n options: parseOptions(parsedBody.reviewflowContentCol, defaultConfig),\n breakingChanges,\n };\n};\n","import { Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\n\nexport default function hasLabelInPR(\n prLabels: Octokit.PullsGetResponse['labels'],\n label: LabelResponse,\n): boolean {\n if (!label) return false;\n return prLabels.some((l): boolean => l.id === label.id);\n}\n","/* eslint-disable max-lines */\nimport { Context, Octokit } from 'probot';\n// eslint-disable-next-line import/no-cycle\nimport { RepoContext } from '../../context/repoContext';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { parseBodyWithOptions } from './utils/parseBody';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nconst hasFailedStatusOrChecks = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n) => {\n const checks = await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n const failedChecks = checks.data.check_runs.filter(\n (check) => check.conclusion === 'failure',\n );\n\n if (failedChecks.length !== 0) {\n context.log.info(`automerge not possible: failed check pr ${pr.id}`, {\n checks: failedChecks.map((check) => check.name),\n });\n return true;\n }\n\n const combinedStatus = await context.github.repos.getCombinedStatusForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n if (combinedStatus.data.state === 'failure') {\n const failedStatuses = combinedStatus.data.statuses.filter(\n (status) => status.state === 'failure' || status.state === 'error',\n );\n\n context.log.info(`automerge not possible: failed status pr ${pr.id}`, {\n statuses: failedStatuses.map((status) => status.context),\n });\n\n return true;\n }\n\n return false;\n};\n\nexport const autoMergeIfPossible = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n prLabels: LabelResponse[] = pr.labels,\n): Promise => {\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n\n if (!hasLabelInPR(prLabels, autoMergeLabel)) {\n context.log.debug('automerge not possible: no label', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const createMergeLockPrFromPr = () => ({\n id: pr.id,\n number: pr.number,\n branch: pr.head.ref,\n });\n\n if (pr.state !== 'open') {\n context.log.debug('automerge not possible: pr is not opened', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n }\n\n if (\n repoContext.hasNeedsReview(prLabels) ||\n repoContext.hasRequestedReview(prLabels)\n ) {\n context.log.debug('automerge not possible: blocking labels', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const lockedPr = repoContext.getMergeLockedPr();\n if (lockedPr && lockedPr.number !== pr.number) {\n context.log.info('automerge not possible: locked pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.pushAutomergeQueue(createMergeLockPrFromPr());\n return false;\n }\n\n repoContext.addMergeLockPr(createMergeLockPrFromPr());\n\n if (pr.mergeable === undefined) {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n pr = prResult.data;\n }\n\n if (pr.merged) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info('automerge not possible: already merged pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n return false;\n }\n\n context.log.info(\n `automerge?: ${pr.id}, #${pr.number}, mergeable=${pr.mergeable} state=${\n pr.mergeable_state\n }`,\n );\n\n // https://github.com/octokit/octokit.net/issues/1763\n if (\n !(\n pr.mergeable_state === 'clean' ||\n pr.mergeable_state === 'has_hooks' ||\n pr.mergeable_state === 'unstable'\n )\n ) {\n if (!pr.mergeable_state || pr.mergeable_state === 'unknown') {\n context.log.info(`automerge not possible: rescheduling ${pr.id}`);\n // GitHub is determining whether the pull request is mergeable\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n\n if (pr.head.ref.startsWith('renovate/')) {\n if (pr.mergeable_state === 'behind' || pr.mergeable_state === 'dirty') {\n context.log.info(\n `automerge not possible: rebase renovate branch pr ${pr.id}`,\n );\n // TODO check if has commits not made by renovate https://github.com/ornikar/shared-configs/pull/47#issuecomment-445767120\n\n if (pr.body.includes('')) {\n if (pr.body.includes('[x] ')) {\n return false;\n }\n\n const renovateRebaseBody = pr.body.replace(\n '[ ] ',\n '[x] ',\n );\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n body: renovateRebaseBody,\n }),\n );\n } else if (!pr.title.startsWith('rebase!')) {\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n title: `rebase!${pr.title}`,\n }),\n );\n }\n\n return false;\n }\n\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else if (pr.mergeable_state === 'blocked') {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n\n context.log.info(\n `automerge not possible: renovate with mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n if (pr.mergeable_state === 'blocked') {\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n }\n\n if (pr.mergeable_state === 'behind') {\n context.log.info('automerge not possible: update branch', {\n head: pr.head.ref,\n base: pr.base.ref,\n });\n\n await context.github.repos.merge({\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n head: pr.base.ref,\n base: pr.head.ref,\n });\n\n return false;\n }\n\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info(\n `automerge not possible: not mergeable mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n try {\n context.log.info(`automerge pr #${pr.number}`);\n\n const parsedBody = parseBodyWithOptions(\n pr.body,\n repoContext.config.prDefaultOptions,\n );\n const options =\n (parsedBody && parsedBody.options) || repoContext.config.prDefaultOptions;\n\n const mergeResult = await context.github.pulls.merge({\n merge_method: options.featureBranch ? 'merge' : 'squash',\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n pull_number: pr.number,\n commit_title: `${pr.title}${\n options.autoMergeWithSkipCi ? ' [skip ci]' : ''\n } (#${pr.number})`,\n commit_message: '', // TODO add BC\n });\n context.log.debug('merge result:', mergeResult.data);\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return Boolean(mergeResult.data.merged);\n } catch (err) {\n context.log.info('could not merge:', err.message);\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n};\n","import { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\n\nexport interface LabelResponse {\n id: number;\n node_id: string;\n url: string;\n name: string;\n description: string;\n color: string;\n default: boolean;\n}\n\nexport interface Labels {\n [key: string]: LabelResponse;\n}\n\nexport const getLabelsForRepo = async (\n context: Context,\n): Promise => {\n const { data: labels } = await context.github.issues.listLabelsForRepo(\n context.repo({ per_page: 100 }),\n );\n return labels;\n};\n\nexport const initRepoLabels = async (\n context: Context,\n config: Config,\n): Promise => {\n const labels = await getLabelsForRepo(context);\n const finalLabels: Record = {};\n\n for (const [labelKey, labelConfig] of Object.entries(config.labels.list)) {\n const labelColor = labelConfig.color.slice(1);\n const description = labelConfig.description\n ? `${labelConfig.description} - Synced by reviewflow`\n : `Synced by reviewflow for ${labelKey}`;\n\n let existingLabel = labels.find((label) => label.name === labelConfig.name);\n if (!existingLabel) {\n existingLabel = labels.find((label) => label.description === description);\n }\n if (!existingLabel) {\n if (labelKey === 'design/needs-review') {\n existingLabel = labels.find(\n (label) => label.name === 'needs-design-review',\n );\n }\n if (labelKey === 'design/approved') {\n existingLabel = labels.find(\n (label) => label.name === 'design-reviewed',\n );\n }\n if (labelKey === 'teams/ops') {\n existingLabel = labels.find((label) => label.name === 'archi');\n }\n }\n\n if (!existingLabel) {\n const result = await context.github.issues.createLabel(\n context.repo({\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else if (\n existingLabel.name !== labelConfig.name ||\n existingLabel.color !== labelColor ||\n existingLabel.description !== description\n ) {\n context.log.info('Needs to update label', {\n current_name: existingLabel.name,\n name: existingLabel.name !== labelConfig.name && labelConfig.name,\n color: existingLabel.color !== labelColor && labelColor,\n description: existingLabel.description !== description && description,\n });\n\n const result = await context.github.issues.updateLabel(\n context.repo({\n current_name: existingLabel.name,\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else {\n finalLabels[labelKey] = existingLabel;\n }\n }\n\n return finalLabels;\n};\n","export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n","import Webhooks from '@octokit/webhooks';\nimport { WebClient } from '@slack/web-api';\nimport { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { getKeys } from './utils';\n\nexport interface TeamSlack {\n mention: (githubLogin: string) => string;\n postMessage: (githubLogin: string, text: string) => Promise;\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ) => string;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const voidTeamSlack = (): TeamSlack => ({\n mention: (): string => '',\n postMessage: (): Promise => Promise.resolve(),\n prLink: (): string => '',\n});\n\nexport const initTeamSlack = async (\n context: Context,\n config: Config,\n): Promise => {\n if (!config.slackToken) {\n return voidTeamSlack();\n }\n\n const githubLoginToSlackEmail = getKeys(config.groups).reduce<{\n [login: string]: string;\n }>((acc, groupName) => {\n Object.assign(acc, config.groups[groupName]);\n return acc;\n }, {});\n\n const slackClient = new WebClient(config.slackToken);\n const allUsers: any = await slackClient.users.list({ limit: 200 });\n const members: [string, { member: any; im: any }][] = Object.values(\n githubLoginToSlackEmail,\n )\n .map((email) => {\n const member = allUsers.members.find(\n (user: any) => user.profile.email === email,\n );\n if (!member) {\n console.warn(`Could not find user ${email}`);\n return;\n }\n return [email, { member, im: undefined }] as [\n string,\n { member: any; im: any }\n ];\n })\n .filter(ExcludesFalsy);\n\n for (const [, user] of members) {\n try {\n const im: any = await slackClient.im.open({ user: user.member.id });\n user.im = im.channel;\n } catch (err) {\n console.error(err);\n }\n }\n\n const membersMap = new Map(members);\n\n const getUserFromGithubLogin = (githubLogin: string) => {\n const email = githubLoginToSlackEmail[githubLogin];\n if (!email) return null;\n return membersMap.get(email);\n };\n\n return {\n mention: (githubLogin: string): string => {\n const user = getUserFromGithubLogin(githubLogin);\n if (!user) return githubLogin;\n return `<@${user.member.id}>`;\n },\n postMessage: async (githubLogin: string, text: string): Promise => {\n context.log.debug('send slack', { githubLogin, text });\n if (process.env.DRY_RUN) return;\n\n const user = getUserFromGithubLogin(githubLogin);\n if (!user || !user.im) return;\n await slackClient.chat.postMessage({\n username: process.env.REVIEWFLOW_NAME,\n channel: user.im.id,\n text,\n });\n },\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ): string => {\n return `<${pr.html_url}|${context.payload.repository.name}#${pr.number}>`;\n },\n };\n};\n","import { Context } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { initTeamSlack, TeamSlack } from './initTeamSlack';\nimport { getKeys } from './utils';\n\nexport interface OrgContext<\n GroupNames extends string = any,\n TeamNames extends string = any\n> {\n config: Config;\n slack: TeamSlack;\n getReviewerGroup: (githubLogin: string) => string | undefined;\n getReviewerGroups: (githubLogins: string[]) => string[];\n getTeamsForLogin: (githubLogin: string) => TeamNames[];\n reviewShouldWait: (\n reviewerGroup: GroupNames | undefined,\n requestedReviewers: any[],\n {\n includesReviewerGroup,\n includesWaitForGroups,\n }: { includesReviewerGroup?: boolean; includesWaitForGroups?: boolean },\n ) => boolean;\n}\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nconst initTeamContext = async (\n context: Context,\n config: Config,\n): Promise => {\n const slackPromise = initTeamSlack(context, config);\n\n const githubLoginToGroup = new Map();\n getKeys(config.groups).forEach((groupName) => {\n Object.keys(config.groups[groupName]).forEach((login) => {\n githubLoginToGroup.set(login, groupName);\n });\n });\n\n const githubLoginToTeams = new Map();\n getKeys(config.teams || {}).forEach((teamName) => {\n (config.teams as NonNullable)[teamName].logins.forEach(\n (login) => {\n const teams = githubLoginToTeams.get(login);\n if (teams) {\n teams.push(teamName);\n } else {\n githubLoginToTeams.set(login, [teamName]);\n }\n },\n );\n });\n\n const getReviewerGroups = (githubLogins: string[]) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(Boolean),\n ),\n ];\n\n return {\n config,\n getReviewerGroup: (githubLogin) => githubLoginToGroup.get(githubLogin),\n getReviewerGroups: (githubLogins) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(ExcludesFalsy),\n ),\n ],\n\n getTeamsForLogin: (githubLogin) =>\n githubLoginToTeams.get(githubLogin) || [],\n\n reviewShouldWait: (\n reviewerGroup,\n requestedReviewers,\n { includesReviewerGroup, includesWaitForGroups },\n ) => {\n if (!reviewerGroup) return false;\n\n const requestedReviewerGroups = getReviewerGroups(\n requestedReviewers.map((request) => request.login),\n );\n\n // contains another request of a reviewer in the same group\n if (\n includesReviewerGroup &&\n requestedReviewerGroups.includes(reviewerGroup)\n ) {\n return true;\n }\n\n // contains a request from a dependent group\n if (config.waitForGroups && includesWaitForGroups) {\n const waitForGroups = config.waitForGroups;\n return requestedReviewerGroups.some((group) =>\n waitForGroups[reviewerGroup].includes(group),\n );\n }\n\n return false;\n },\n\n slack: await slackPromise,\n };\n};\n\nconst orgContextsPromise = new Map();\nconst orgContexts = new Map();\n\nexport const obtainOrgContext = (\n context: Context,\n config: Config,\n): Promise => {\n const owner = context.payload.repository.owner;\n\n const existingTeamContext = orgContexts.get(owner.login);\n if (existingTeamContext) return existingTeamContext;\n\n const existingPromise = orgContextsPromise.get(owner.login);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const promise = initTeamContext(context, config);\n orgContextsPromise.set(owner.login, promise);\n\n return promise.then((orgContext) => {\n orgContextsPromise.delete(owner.login);\n orgContexts.set(owner.login, orgContext);\n return orgContext;\n });\n};\n","/* eslint-disable max-lines */\n\nimport { Lock } from 'lock';\nimport { Context } from 'probot';\nimport { orgsConfigs, Config } from '../orgsConfigs';\n// eslint-disable-next-line import/no-cycle\nimport { autoMergeIfPossible } from '../pr-handlers/actions/autoMergeIfPossible';\nimport { initRepoLabels, LabelResponse, Labels } from './initRepoLabels';\nimport { obtainOrgContext, OrgContext } from './orgContext';\n\nexport interface LockedMergePr {\n id: number;\n number: number;\n branch: string;\n}\n\ninterface RepoContextWithoutTeamContext {\n labels: Labels;\n protectedLabelIds: readonly LabelResponse['id'][];\n\n hasNeedsReview: (labels: LabelResponse[]) => boolean;\n hasRequestedReview: (labels: LabelResponse[]) => boolean;\n hasChangesRequestedReview: (labels: LabelResponse[]) => boolean;\n hasApprovesReview: (labels: LabelResponse[]) => boolean;\n getNeedsReviewGroupNames: (labels: LabelResponse[]) => GroupNames[];\n\n lockPROrPRS(\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise;\n\n getMergeLockedPr(): LockedMergePr;\n addMergeLockPr(pr: LockedMergePr): void;\n removePrFromAutomergeQueue(context: Context, prNumber: number): void;\n reschedule(context: Context, pr: LockedMergePr): void;\n pushAutomergeQueue(pr: LockedMergePr): void;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport type RepoContext = OrgContext<\n GroupNames\n> &\n RepoContextWithoutTeamContext;\n\nasync function initRepoContext(\n context: Context,\n config: Config,\n): Promise> {\n const repo = context.payload.repository;\n const orgContext = await obtainOrgContext(context, config);\n const repoContext = Object.create(orgContext);\n\n const labels = await initRepoLabels(context, config);\n\n const reviewGroupNames = Object.keys(config.groups) as GroupNames[];\n\n const needsReviewLabelIds = reviewGroupNames\n .map((key: GroupNames) => config.labels.review[key].needsReview)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const requestedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].requested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const changesRequestedLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].changesRequested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const approvedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].approved)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const protectedLabelIds = [\n ...requestedReviewLabelIds,\n ...changesRequestedLabelIds,\n ...approvedReviewLabelIds,\n ];\n\n const labelIdToGroupName = new Map();\n reviewGroupNames.forEach((key) => {\n const reviewGroupLabels = config.labels.review[key] as any;\n Object.keys(reviewGroupLabels).forEach((labelKey: string) => {\n labelIdToGroupName.set(labels[reviewGroupLabels[labelKey]].id, key);\n });\n });\n\n // const updateStatusCheck = (context, reviewGroup, statusInfo) => {};\n\n const hasNeedsReview = (labels: LabelResponse[]) =>\n labels.some((label) => needsReviewLabelIds.includes(label.id));\n const hasRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => requestedReviewLabelIds.includes(label.id));\n const hasChangesRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => changesRequestedLabelIds.includes(label.id));\n const hasApprovesReview = (labels: LabelResponse[]) =>\n labels.some((label) => approvedReviewLabelIds.includes(label.id));\n\n const getNeedsReviewGroupNames = (labels: LabelResponse[]): GroupNames[] =>\n labels\n .filter((label) => needsReviewLabelIds.includes(label.id))\n .map((label) => labelIdToGroupName.get(label.id))\n .filter(ExcludesFalsy);\n\n const lock = Lock();\n let lockMergePr: LockedMergePr | undefined;\n let automergeQueue: LockedMergePr[] = [];\n\n const lockPROrPRS = (\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise =>\n new Promise((resolve, reject) => {\n const logInfos = {\n repoName: repo.name,\n prIdOrIds,\n prNumberOrPrNumbers,\n };\n context.log.info('lock: try to lock pr', logInfos);\n lock(prIdOrIds, async (createReleaseCallback) => {\n const release = createReleaseCallback(() => {});\n context.log.info('lock: lock acquired', logInfos);\n try {\n await callback();\n } catch (err) {\n context.log.info('lock: release pr (with error)', logInfos);\n release();\n reject(err);\n return;\n }\n context.log.info('lock: release pr', logInfos);\n release();\n resolve();\n });\n });\n\n const reschedule = (context: Context, pr: LockedMergePr) => {\n if (!pr) throw new Error('Cannot reschedule undefined');\n context.log.info('reschedule', pr);\n setTimeout(() => {\n lockPROrPRS('reschedule', pr.number, () => {\n return lockPROrPRS(String(pr.id), pr.number, async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n await autoMergeIfPossible(prResult.data, context, repoContext);\n });\n });\n }, 1000);\n };\n\n return Object.assign(repoContext, {\n labels,\n protectedLabelIds,\n hasNeedsReview,\n hasRequestedReview,\n hasChangesRequestedReview,\n hasApprovesReview,\n getNeedsReviewGroupNames,\n\n getMergeLockedPr: () => lockMergePr,\n addMergeLockPr: (pr: LockedMergePr): void => {\n console.log('merge lock: lock', pr);\n if (lockMergePr && String(lockMergePr.number) === String(pr.number)) {\n return;\n }\n if (lockMergePr) throw new Error('Already have lock');\n lockMergePr = pr;\n },\n removePrFromAutomergeQueue: (context, prNumber: number | string): void => {\n context.log('merge lock: remove', { prNumber });\n if (lockMergePr && String(lockMergePr.number) === String(prNumber)) {\n lockMergePr = automergeQueue.shift();\n context.log('merge lock: next', { lockMergePr });\n if (lockMergePr) {\n reschedule(context, lockMergePr);\n }\n } else {\n automergeQueue = automergeQueue.filter(\n (value) => String(value.number) !== String(prNumber),\n );\n }\n },\n pushAutomergeQueue: (pr: LockedMergePr): void => {\n console.log('merge lock: push queue', {\n pr,\n lockMergePr,\n automergeQueue,\n });\n if (!automergeQueue.some((p) => p.number === pr.number)) {\n automergeQueue.push(pr);\n }\n },\n reschedule,\n\n lockPROrPRS,\n } as RepoContextWithoutTeamContext);\n}\n\nconst repoContextsPromise = new Map>();\nconst repoContexts = new Map();\n\nexport const shouldIgnoreRepo = (\n repoName: string,\n orgConfig: Config,\n): boolean => {\n const ignoreRepoRegexp =\n orgConfig.ignoreRepoPattern &&\n new RegExp(`^${orgConfig.ignoreRepoPattern}$`);\n\n if (repoName === 'reviewflow-test') {\n return process.env.REVIEWFLOW_NAME !== 'reviewflow-test';\n }\n\n if (ignoreRepoRegexp) {\n return ignoreRepoRegexp.test(repoName);\n }\n\n return false;\n};\n\nexport const obtainRepoContext = (\n context: Context,\n): Promise | RepoContext | null => {\n const repo = context.payload.repository;\n const owner = repo.owner;\n const key = repo.id;\n\n const existingRepoContext = repoContexts.get(key);\n if (existingRepoContext) return existingRepoContext;\n\n const existingPromise = repoContextsPromise.get(key);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const orgConfig = orgsConfigs[owner.login];\n\n if (!orgConfig) {\n console.warn(`using default config for ${owner.login}`);\n return null;\n }\n\n if (shouldIgnoreRepo(repo.name, orgConfig)) {\n console.warn('repo ignored', { owner: repo.owner.login, name: repo.name });\n return null;\n }\n\n const promise = initRepoContext(context, orgConfig);\n repoContextsPromise.set(key, promise);\n\n return promise.then((repoContext) => {\n repoContextsPromise.delete(key);\n repoContexts.set(key, repoContext);\n return repoContext;\n });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { obtainRepoContext, RepoContext } from '../context/repoContext';\n\nexport type PRHandler = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n fourthArgument?: FourthArgument,\n) => Promise;\n\nexport type CallbackWithPRAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const handlerPullRequestChange = async <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n callback: CallbackWithPRAndRepoContext,\n): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n return repoContext.lockPROrPRS(\n String(context.payload.pull_request.id),\n context.payload.pull_request.number,\n async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: context.payload.pull_request.number,\n }),\n );\n\n await callback(prResult.data, repoContext);\n },\n );\n};\n\ntype CallbackPRAndContextAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestChange = <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n callback: CallbackPRAndContextAndRepoContext,\n) => (context: Context) => {\n return handlerPullRequestChange(context, (pr, repoContext) =>\n callback(pr, context, repoContext),\n );\n};\n\ntype CallbackContextAndRepoContext = (\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestsChange = (\n getPullRequests: (\n context: Context,\n repoContext: RepoContext,\n ) => { id: string | number; number: number }[],\n callback: CallbackContextAndRepoContext,\n) => async (context: Context): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n const prs = getPullRequests(context, repoContext);\n if (prs.length === 0) return;\n return repoContext.lockPROrPRS(\n prs.map((pr) => String(pr.id)),\n prs.map((pr) => pr.number),\n () => callback(context, repoContext),\n );\n};\n","import Webhooks from '@octokit/webhooks';\nimport { PRHandler } from '../utils';\n\nexport const autoAssignPRToCreator: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n if (!repoContext.config.autoAssignToCreator) return;\n if (pr.assignees.length !== 0) return;\n if (pr.user.type === 'Bot') return;\n\n await context.github.issues.addAssignees(\n context.issue({\n assignees: [pr.user.login],\n }),\n );\n};\n","export const cleanTitle = (title: string): string =>\n title\n .trim()\n .replace(\n /[\\s-]+\\[?\\s*([A-Za-z][A-Za-z\\d]+)[- ](\\d+)\\s*]?\\s*$/,\n (s, arg1, arg2) => ` ${arg1.toUpperCase()}-${arg2}`,\n )\n .replace(/^([A-Za-z]+)[/:]\\s*/, (s, arg1) => `${arg1.toLowerCase()}: `)\n .replace(/^Revert \"([^\"]+)\"$/, 'revert: $1')\n .replace(/\\s+[[\\]]\\s*no\\s*issue\\s*[[\\]]$/i, ' [no issue]')\n // eslint-disable-next-line unicorn/no-unsafe-regex\n .replace(/^(revert:.*)(\\s+\\(#\\d+\\))$/, '$1');\n","import { StatusInfo } from '../../../orgsConfigs/types';\nimport { parseBodyWithOptions, parseBody } from './parseBody';\nimport { Options, optionsLabels } from './prOptions';\n\nconst toMarkdownOptions = (options: Record) => {\n return optionsLabels\n .map(\n ({ name, label }) =>\n `- [${options[name] ? 'x' : ' '}] ${label}`,\n )\n .join('\\n');\n};\n\nconst toMarkdownInfos = (infos: StatusInfo[]) => {\n return infos\n .map((info) => {\n if (info.url) return `[${info.title}](${info.url})`;\n return info.title;\n })\n .join('\\n');\n};\n\ninterface UpdatedBodyWithOptions {\n body: string;\n options?: Record;\n}\n\nexport const updateBody = (\n body: string,\n defaultConfig: Record,\n infos?: StatusInfo[],\n updateOptions?: Partial>,\n): UpdatedBodyWithOptions => {\n const parsed = parseBodyWithOptions(body, defaultConfig);\n if (!parsed) {\n console.info('could not parse body');\n return { body };\n }\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n options,\n } = parsed;\n\n const infosAndCommitNotesParagraph = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^\\s*(?:(#### Infos:.*)?(#### Commits Notes:.*)?#### Options:)?.*$/s,\n // eslint-disable-next-line no-nested-ternary\n !infos\n ? '$1$2'\n : infos.length !== 0\n ? `#### Infos:\\n${toMarkdownInfos(infos)}\\n$2`\n : '$2',\n );\n\n const updatedOptions = !updateOptions\n ? options\n : { ...options, ...updateOptions };\n\n return {\n options: updatedOptions,\n body: `${content}${reviewflowContentColPrefix}\n${infosAndCommitNotesParagraph}#### Options:\n${toMarkdownOptions(updatedOptions)}\n${reviewflowContentColSuffix}${ending || ''}`,\n };\n};\n\nexport const updateBodyCommitsNotes = (\n body: string,\n commitNotes?: string,\n): string => {\n const parsed = parseBody(body);\n if (!parsed) {\n console.info('could not parse body');\n return body;\n }\n\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n } = parsed;\n\n const reviewflowContentColReplaced = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /(?:#### Commits Notes:.*)?(#### Options:)/s,\n // eslint-disable-next-line no-nested-ternary\n !commitNotes ? '$1' : `#### Commits Notes:\\n\\n${commitNotes}\\n\\n$1`,\n );\n\n return `${content}${reviewflowContentColPrefix}${reviewflowContentColReplaced}${reviewflowContentColSuffix}${ending ||\n ''}`;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\n\ninterface UpdatePr {\n title?: string;\n body?: string;\n}\n\nexport const updatePrIfNeeded = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n update: UpdatePr,\n): Promise => {\n const hasDiffInTitle = update.title && pr.title !== update.title;\n const hasDiffInBody = update.body && pr.body !== update.body;\n\n if (hasDiffInTitle || hasDiffInBody) {\n const diff: Partial> = {};\n if (hasDiffInTitle) {\n diff.title = update.title;\n pr.title = update.title as string;\n }\n if (hasDiffInBody) {\n diff.body = update.body;\n pr.body = update.body as string;\n }\n\n await context.github.issues.update(context.issue(diff));\n }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\nimport hasLabelInPR from './hasLabelInPR';\n\ninterface SyncLabelOptions {\n onRemove?: () => void | Promise;\n onAdd?: (prLabels: LabelResponse[]) => void | Promise;\n}\n\nexport default async function syncLabel<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n shouldHaveLabel: boolean,\n label: LabelResponse,\n prHasLabel = hasLabelInPR(pr.labels, label),\n { onRemove, onAdd }: SyncLabelOptions = {},\n): Promise {\n if (prHasLabel && !shouldHaveLabel) {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n if (onRemove) await onRemove();\n }\n if (shouldHaveLabel && !prHasLabel) {\n const response = await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n if (onAdd) await onAdd(response.data);\n }\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context } from 'probot';\n\nexport default async function createStatus<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n name: string,\n sha: string,\n type: 'failure' | 'success',\n description: string,\n url?: string,\n): Promise {\n await context.github.repos.createStatus(\n context.repo({\n context:\n name === ''\n ? process.env.REVIEWFLOW_NAME\n : `${process.env.REVIEWFLOW_NAME}/${name}`,\n sha,\n state: type,\n description,\n target_url: url,\n }),\n );\n}\n","/* eslint-disable max-lines */\nimport Webhooks from '@octokit/webhooks';\nimport { StatusError, StatusInfo } from '../../orgsConfigs/types';\nimport { PRHandler } from '../utils';\nimport { cleanTitle } from './utils/cleanTitle';\nimport { updateBody } from './utils/updateBody';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport { updatePrIfNeeded } from './updatePr';\nimport hasLabelInPR from './utils/hasLabelInPR';\nimport syncLabel from './utils/syncLabel';\nimport createStatus from './utils/createStatus';\n\ninterface StatusWithInfo {\n name: string;\n info: StatusInfo;\n error?: undefined;\n}\n\ninterface StatusWithError {\n name: string;\n error: StatusError;\n info?: undefined;\n}\n\ntype Status = StatusWithInfo | StatusWithError;\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const editOpenedPR: PRHandler<\n Webhooks.WebhookPayloadPullRequest,\n { skipAutoMerge: boolean },\n string\n> = async (pr, context, repoContext, previousSha) => {\n const repo = context.payload.repository;\n\n // do not lint pr from forks\n if (pr.head.repo.id !== repo.id) return { skipAutoMerge: true };\n\n const title = repoContext.config.trimTitle ? cleanTitle(pr.title) : pr.title;\n\n const isPrFromBot = pr.user.type === 'Bot';\n\n const statuses: Status[] = [];\n\n const errorRule = repoContext.config.parsePR.title.find((rule) => {\n if (rule.bot === false && isPrFromBot) return false;\n\n const match = rule.regExp.exec(title);\n if (match === null) {\n if (rule.status) {\n statuses.push({ name: rule.status, error: rule.error });\n }\n return true;\n }\n\n if (rule.status && rule.statusInfoFromMatch) {\n statuses.push({\n name: rule.status,\n info: rule.statusInfoFromMatch(match),\n });\n return false;\n }\n\n return false;\n });\n\n const date = new Date().toISOString();\n\n const hasLintPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check): boolean => check.name === `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n );\n\n await Promise.all(\n [\n ...statuses.map(\n ({ name, error, info }): Promise =>\n createStatus(\n context,\n name,\n pr.head.sha,\n error ? 'failure' : 'success',\n error ? error.title : (info as StatusInfo).title,\n error ? undefined : (info as StatusInfo).url,\n ),\n ),\n ...(previousSha\n ? statuses\n .map(\n ({ name, error, info }): Promise | undefined =>\n error\n ? createStatus(\n context,\n name,\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n )\n .filter(ExcludesFalsy)\n : []),\n hasLintPrCheck &&\n context.github.checks.create(\n context.repo({\n name: `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n head_sha: pr.head.sha,\n status: 'completed' as 'completed',\n conclusion: (errorRule ? 'failure' : 'success') as\n | 'failure'\n | 'success',\n started_at: date,\n completed_at: date,\n output: errorRule\n ? errorRule.error\n : {\n title: '✓ Your PR is valid',\n summary: '',\n },\n }),\n ),\n !hasLintPrCheck && previousSha && errorRule\n ? createStatus(\n context,\n 'lint-pr',\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n !hasLintPrCheck &&\n createStatus(\n context,\n 'lint-pr',\n pr.head.sha,\n errorRule ? 'failure' : 'success',\n errorRule ? errorRule.error.title : '✓ Your PR is valid',\n ),\n ].filter(ExcludesFalsy),\n );\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const prHasFeatureBranchLabel = hasLabelInPR(pr.labels, featureBranchLabel);\n const prHasSkipCiLabel = hasLabelInPR(pr.labels, skipCiLabel);\n const prHasAutoMergeLabel = hasLabelInPR(pr.labels, automergeLabel);\n\n const defaultOptions = {\n ...repoContext.config.prDefaultOptions,\n featureBranch: prHasFeatureBranchLabel,\n autoMergeWithSkipCi: prHasSkipCiLabel,\n autoMerge: prHasAutoMergeLabel,\n };\n\n const { body, options } = updateBody(pr.body, defaultOptions, statuses\n .filter((status) => status.info && status.info.inBody)\n .map((status) => status.info) as StatusInfo[]);\n await updatePrIfNeeded(pr, context, repoContext, { title, body });\n\n if (options && (featureBranchLabel || automergeLabel)) {\n await Promise.all([\n featureBranchLabel &&\n syncLabel(\n pr,\n context,\n options.featureBranch,\n featureBranchLabel,\n prHasFeatureBranchLabel,\n ),\n skipCiLabel &&\n syncLabel(\n pr,\n context,\n options.autoMergeWithSkipCi,\n skipCiLabel,\n prHasSkipCiLabel,\n ),\n automergeLabel &&\n syncLabel(\n pr,\n context,\n options.autoMerge,\n automergeLabel,\n prHasAutoMergeLabel,\n {\n onAdd: async (prLabels) => {\n await autoMergeIfPossible(pr, context, repoContext, prLabels);\n },\n onRemove: async () => {\n await repoContext.removePrFromAutomergeQueue(context, pr.number);\n },\n },\n ),\n ]);\n\n if (!automergeLabel) {\n return { skipAutoMerge: true };\n }\n }\n\n return { skipAutoMerge: false };\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { RepoContext } from '../../context/repoContext';\nimport createStatus from './utils/createStatus';\n\nconst addStatusCheck = async function<\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n { state, description }: { state: 'failure' | 'success'; description: string },\n previousSha?: string,\n): Promise {\n const hasPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check) => check.name === process.env.REVIEWFLOW_NAME,\n );\n\n context.log.info('add status check', { hasPrCheck, state, description });\n\n if (hasPrCheck) {\n await context.github.checks.create(\n context.repo({\n name: process.env.REVIEWFLOW_NAME as string,\n head_sha: pr.head.sha,\n started_at: pr.created_at,\n status: 'completed',\n conclusion: state,\n completed_at: new Date().toISOString(),\n output: {\n title: description,\n summary: '',\n },\n }),\n );\n } else if (previousSha && state === 'failure') {\n await Promise.all([\n createStatus(\n context,\n '',\n previousSha,\n 'success',\n 'New commits have been pushed',\n ),\n createStatus(context, '', pr.head.sha, state, description),\n ]);\n } else {\n await createStatus(context, '', pr.head.sha, state, description);\n }\n};\n\nexport const updateStatusCheckFromLabels = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n labels: LabelResponse[] = pr.labels || [],\n previousSha?: string,\n): Promise => {\n context.log.info('updateStatusCheckFromLabels', {\n labels: labels.map((l) => l && l.name),\n hasNeedsReview: repoContext.hasNeedsReview(labels),\n hasApprovesReview: repoContext.hasApprovesReview(labels),\n });\n\n const createFailedStatusCheck = (description: string): Promise =>\n addStatusCheck(\n pr,\n context,\n {\n state: 'failure',\n description,\n },\n previousSha,\n );\n\n if (pr.requested_reviewers.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${pr.requested_reviewers\n .map((rr: any) => rr.login)\n .join(', ')}`,\n );\n }\n\n if (repoContext.hasChangesRequestedReview(labels)) {\n return createFailedStatusCheck(\n 'Changes requested ! Push commits or discuss changes then re-request a review.',\n );\n }\n\n const needsReviewGroupNames = repoContext.getNeedsReviewGroupNames(labels);\n\n if (needsReviewGroupNames.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${needsReviewGroupNames.join(\n ', ',\n )}. Perhaps request someone ?`,\n );\n }\n\n if (!repoContext.hasApprovesReview(labels)) {\n if (repoContext.config.requiresReviewRequest) {\n return createFailedStatusCheck(\n 'Awaiting review... Perhaps request someone ?',\n );\n }\n }\n\n // if (\n // repoContext.config.requiresReviewRequest &&\n // !repoContext.hasRequestedReview(labels)\n // ) {\n // return createFailedStatusCheck(\n // context,\n // pr,\n // 'You need to request someone to review the PR',\n // );\n // return;\n // }\n // return createInProgressStatusCheck(context);\n // } else if (repoContext.hasApprovesReview(labels)) {\n return addStatusCheck(\n pr,\n context,\n {\n state: 'success',\n description: '✓ PR ready to merge !',\n },\n previousSha,\n );\n // }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { GroupLabels } from '../../orgsConfigs/types';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateStatusCheckFromLabels } from './updateStatusCheckFromLabels';\n\nexport const updateReviewStatus = async <\n E extends Webhooks.WebhookPayloadPullRequest,\n GroupNames extends string = any\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n reviewGroup: GroupNames,\n {\n add: labelsToAdd,\n remove: labelsToRemove,\n }: {\n add?: (GroupLabels | false | undefined)[];\n remove?: (GroupLabels | false | undefined)[];\n },\n): Promise => {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n labelsToAdd,\n labelsToRemove,\n });\n\n let prLabels: LabelResponse[] = pr.labels || [];\n if (!reviewGroup) return prLabels;\n\n const newLabelNames = new Set(\n prLabels.map((label: LabelResponse) => label.name),\n );\n\n const toAdd = new Set();\n const toAddNames = new Set();\n const toDelete = new Set();\n const toDeleteNames = new Set();\n const labels = repoContext.labels;\n\n const getLabelFromKey = (key: GroupLabels): undefined | LabelResponse => {\n const reviewConfig = repoContext.config.labels.review[reviewGroup];\n if (!reviewConfig) return undefined;\n\n return reviewConfig[key] && labels[reviewConfig[key]]\n ? labels[reviewConfig[key]]\n : undefined;\n };\n\n if (labelsToAdd) {\n labelsToAdd.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label || prLabels.some((prLabel) => prLabel.id === label.id)) {\n return;\n }\n newLabelNames.add(label.name);\n toAdd.add(key);\n toAddNames.add(label.name);\n });\n }\n\n if (labelsToRemove) {\n labelsToRemove.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label) return;\n const existing = prLabels.find((prLabel) => prLabel.id === label.id);\n if (existing) {\n newLabelNames.delete(existing.name);\n toDelete.add(key);\n toDeleteNames.add(existing.name);\n }\n });\n }\n\n // TODO move that elsewhere\n\n repoContext.getTeamsForLogin(pr.user.login).forEach((teamName) => {\n const team = repoContext.config.teams[teamName];\n if (team.labels) {\n team.labels.forEach((labelKey) => {\n const label = repoContext.labels[labelKey];\n if (label && !prLabels.some((prLabel) => prLabel.id === label.id)) {\n newLabelNames.add(label.name);\n toAdd.add(labelKey);\n toAddNames.add(label.name);\n }\n });\n }\n });\n\n // if (process.env.DRY_RUN) return;\n\n if (toAdd.size !== 0 || toDelete.size !== 0) {\n if (toDelete.size === 0 || toDelete.size < 4) {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n toAddNames: [...toAddNames],\n toDeleteNames: [...toDeleteNames],\n });\n\n if (toAdd.size !== 0) {\n const result = await context.github.issues.addLabels(\n context.issue({\n labels: [...toAddNames],\n }),\n );\n prLabels = result.data;\n }\n\n if (toDelete.size !== 0) {\n for (const toDeleteName of [...toDeleteNames]) {\n try {\n const result = await context.github.issues.removeLabel(\n context.issue({\n name: toDeleteName,\n }),\n );\n prLabels = result.data;\n } catch (err) {\n context.log.warn('error removing label', {\n err: err && err.message,\n });\n }\n }\n }\n } else {\n const newLabelNamesArray = [...newLabelNames];\n\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n oldLabels: prLabels.map((l: LabelResponse) => l.name),\n newLabelNames: newLabelNamesArray,\n });\n\n const result = await context.github.issues.replaceLabels(\n context.issue({\n labels: newLabelNamesArray,\n }),\n );\n prLabels = result.data;\n }\n }\n\n // if (toAdd.has('needsReview')) {\n // createInProgressStatusCheck(context);\n // } else if (\n // toDelete.has('needsReview') ||\n // (prLabels.length === 0 && toAdd.size === 1 && toAdd.has('approved'))\n // ) {\n await updateStatusCheckFromLabels(pr, context, repoContext, prLabels);\n // }\n\n return prLabels;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nexport const autoApproveAndAutoMerge = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n): Promise => {\n // const autoMergeLabel = repoContext.labels['merge/automerge'];\n const codeApprovedLabel = repoContext.labels['code/approved'];\n if (hasLabelInPR(pr.labels, codeApprovedLabel)) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n await autoMergeIfPossible(pr, context, repoContext);\n return true;\n }\n\n return false;\n};\n","import Webhooks from '@octokit/webhooks';\nimport parse from '@commitlint/parse';\nimport { PRHandler } from '../utils';\nimport syncLabel from './utils/syncLabel';\nimport { updateBodyCommitsNotes } from './utils/updateBody';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const readCommitsAndUpdateInfos: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n // tmp.data[0].sha\n // tmp.data[0].commit.message\n\n const commits = await context.github.paginate(\n context.github.pulls.listCommits(\n context.issue({\n // A custom page size up to 100. Default is 30.\n per_page: 100,\n }),\n ),\n (res) => res.data,\n );\n\n const conventionalCommits = await Promise.all(\n commits.map((c) => parse(c.commit.message)),\n );\n\n const breakingChangesCommits: any = conventionalCommits.reduce(\n (acc, c, index) => {\n const breakingChangesNotes = c.notes.filter(\n (note: any) => note.title === 'BREAKING CHANGE',\n );\n if (breakingChangesNotes.length !== 0) {\n acc.push({ commit: commits[index], breakingChangesNotes });\n }\n\n return acc;\n },\n [],\n );\n\n const breakingChangesLabel = repoContext.labels['breaking-changes'];\n const newBody = updateBodyCommitsNotes(\n pr.body,\n breakingChangesCommits.length === 0\n ? ''\n : `Breaking Changes:\\n${breakingChangesCommits\n .map(({ commit, breakingChangesNotes }: any) =>\n breakingChangesNotes.map(\n (note: any) =>\n `- ${note.text.replace('\\n', ' ')} (${commit.sha})`,\n ),\n )\n .join('')}`,\n );\n\n await Promise.all([\n syncLabel(\n pr,\n context,\n breakingChangesCommits.length !== 0,\n breakingChangesLabel,\n ),\n updatePrIfNeeded(pr, context, repoContext, { body: newBody }),\n ]);\n\n // TODO auto update ! in front of : to signal a breaking change when https://github.com/conventional-changelog/commitlint/issues/658 is closed\n};\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoAssignPRToCreator } from './actions/autoAssignPRToCreator';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { autoApproveAndAutoMerge } from './actions/autoApproveAndAutoMerge';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function opened(app: Application): void {\n app.on(\n 'pull_request.opened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const fromRenovate = pr.head.ref.startsWith('renovate/');\n\n await Promise.all([\n autoAssignPRToCreator(pr, context, repoContext),\n editOpenedPR(pr, context, repoContext).then(() => {\n return readCommitsAndUpdateInfos(pr, context, repoContext);\n }),\n fromRenovate\n ? autoApproveAndAutoMerge(pr, context, repoContext).then(\n async (approved: boolean): Promise => {\n if (!approved) {\n await updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n });\n }\n },\n )\n : updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved', 'changesRequested'],\n }),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { parseBodyWithOptions } from './actions/utils/parseBody';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.closed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const repo = context.payload.repository;\n\n if (pr.merged) {\n const parsedBody =\n pr.head.repo.id === repo.id &&\n parseBodyWithOptions(pr.body, repoContext.config.prDefaultOptions);\n\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n parsedBody && parsedBody.options.deleteAfterMerge\n ? context.github.git\n .deleteRef(context.repo({ ref: `heads/${pr.head.ref}` }))\n .catch(() => {})\n : undefined,\n ]);\n } else {\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n updateReviewStatus(pr, context, repoContext, 'dev', {\n remove: ['needsReview'],\n }),\n ]);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.reopened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n await Promise.all([\n updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved'],\n }),\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequested(app: Application): void {\n app.on(\n 'pull_request.review_requested',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n\n // ignore if sender is self (dismissed review rerequest review)\n if (sender.type === 'Bot') return;\n\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n const shouldWait = false;\n // repoContext.reviewShouldWait(reviewerGroup, pr.requested_reviewers, { includesWaitForGroups: true });\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup &&\n review.state === 'REQUEST_CHANGES' &&\n // In case this is a rerequest for review\n review.user.login !== reviewer.login,\n );\n\n if (!hasChangesRequestedInReviews) {\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', !shouldWait && 'requested'],\n remove: ['approved', 'changesRequested'],\n });\n }\n }\n\n if (sender.login === reviewer.login) return;\n\n if (!shouldWait && repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:eyes: ${repoContext.slack.mention(\n sender.login,\n )} requests your review on ${repoContext.slack.prLink(\n pr,\n context,\n )} !\\n> ${pr.title}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequestRemoved(app: Application): void {\n app.on(\n 'pull_request.review_request_removed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n },\n );\n\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const hasApprovedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'APPROVED',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n hasApprovedInReviews;\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: [\n // if changes requested by the one which requests was removed\n hasChangesRequestedInReviews && 'changesRequested',\n // if was already approved by another member in the group and has no other requests waiting\n approved && 'approved',\n ],\n // remove labels if has no other requests waiting\n remove: [\n approved && 'needsReview',\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n 'requested',\n ],\n });\n }\n\n if (sender.login === reviewer.login) return;\n\n if (repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull_and_crossbones: ${repoContext.slack.mention(\n sender.login,\n )} removed the request for your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewSubmitted(app: Application): void {\n app.on(\n 'pull_request_review.submitted',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const { user: reviewer, state } = (context.payload as any).review;\n if (pr.user.login === reviewer.login) return;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n let merged;\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n // TODO reenable this when accepted can notify request review to slack (dev accepted => design requested) and flag to disable for label (approved design ; still waiting for dev ?)\n // includesWaitForGroups: true,\n },\n );\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n state === 'approved';\n\n const newLabels = await updateReviewStatus(\n pr,\n context,\n repoContext,\n reviewerGroup,\n {\n add: [\n approved && 'approved',\n state === 'changes_requested' && 'changesRequested',\n ],\n remove: [\n approved && 'needsReview',\n !(\n hasRequestedReviewsForGroup || state === 'changes_requested'\n ) && 'requested',\n state === 'approved' &&\n !hasChangesRequestedInReviews &&\n 'changesRequested',\n state === 'changes_requested' && 'approved',\n ],\n },\n );\n\n if (approved && !hasChangesRequestedInReviews) {\n merged = await autoMergeIfPossible(\n pr,\n context,\n repoContext,\n newLabels,\n );\n }\n }\n\n const mention = repoContext.slack.mention(reviewer.login);\n const prUrl = repoContext.slack.prLink(pr, context);\n\n const message = (() => {\n if (state === 'changes_requested') {\n return `:x: ${mention} requests changes on ${prUrl}`;\n }\n if (state === 'approved') {\n return `:clap: :white_check_mark: ${mention} approves ${prUrl}${\n merged ? ' and PR is merged :tada:' : ''\n }`;\n }\n return `:speech_balloon: ${mention} commented on ${prUrl}`;\n })();\n\n repoContext.slack.postMessage(pr.user.login, message);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewDismissed(app: Application): void {\n app.on(\n 'pull_request_review.dismissed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).review.user;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', 'requested'],\n remove: [\n !hasChangesRequestedInReviews && 'changesRequested',\n 'approved',\n ],\n });\n }\n\n if (repoContext.slack) {\n if (sender.login === reviewer.login) {\n repoContext.slack.postMessage(\n pr.user.login,\n `:skull: ${repoContext.slack.mention(\n reviewer.login,\n )} dismissed his review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n } else {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull: ${repoContext.slack.mention(\n sender.login,\n )} dismissed your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function synchronize(app: Application): void {\n app.on(\n 'pull_request.synchronize',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n // old and new sha\n // const { before, after } = context.payload;\n const previousSha = (context.payload as any).before as string;\n\n await Promise.all([\n editOpenedPR(pr, context, repoContext, previousSha),\n // addStatusCheckToLatestCommit\n updateStatusCheckFromLabels(\n pr,\n context,\n repoContext,\n pr.labels,\n previousSha,\n ),\n\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n\n // call autoMergeIfPossible to re-add to the queue when push is fixed\n await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function edited(app: Application): void {\n app.on(\n 'pull_request.edited',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n if (\n sender.type === 'Bot' &&\n sender.login === `${process.env.REVIEWFLOW_NAME}[bot]`\n ) {\n return;\n }\n\n const { skipAutoMerge } = await editOpenedPR(pr, context, repoContext);\n if (!skipAutoMerge) await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateBody } from './utils/updateBody';\nimport { Options } from './utils/prOptions';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const updatePrBody = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n updateOptions: Partial>,\n): Promise => {\n const { body } = updateBody(\n pr.body,\n repoContext.config.prDefaultOptions,\n undefined,\n updateOptions,\n );\n\n await updatePrIfNeeded(pr, context, repoContext, { body });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { handlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { updatePrBody } from './actions/updatePrBody';\nimport hasLabelInPR from './actions/utils/hasLabelInPR';\n\nexport default function labelsChanged(app: Application): void {\n app.on(\n ['pull_request.labeled', 'pull_request.unlabeled'],\n async (context: Context) => {\n const sender = context.payload.sender;\n const fromRenovate =\n sender.type === 'Bot' && sender.login === 'renovate[bot]';\n context.payload.pull_request.head.ref.startsWith('renovate/');\n\n if (sender.type === 'Bot' && !fromRenovate) {\n return;\n }\n\n await handlerPullRequestChange(context, async (pr, repoContext) => {\n const label = (context.payload as any).label;\n if (fromRenovate) {\n const codeApprovedLabel = repoContext.labels['code/approved'];\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n const autoMergeSkipCiLabel = repoContext.labels['merge/skip-ci'];\n if (context.payload.action === 'labeled') {\n if (codeApprovedLabel && label.id === codeApprovedLabel.id) {\n // const { data: reviews } = await context.github.pulls.listReviews(\n // context.issue({ per_page: 1 }),\n // );\n // if (reviews.length !== 0) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n if (autoMergeSkipCiLabel) {\n await context.github.issues.addLabels(\n context.issue({ labels: [autoMergeSkipCiLabel.name] }),\n );\n }\n await updateStatusCheckFromLabels(pr, context, repoContext);\n await updatePrBody(pr, context, repoContext, {\n autoMergeWithSkipCi: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n autoMerge: hasLabelInPR(pr.labels, autoMergeLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMerge,\n });\n // }\n } else if (autoMergeLabel && label.id === autoMergeLabel.id) {\n await updatePrBody(pr, context, repoContext, {\n autoMerge: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n // Note: si c'est renovate qui ajoute le label autoMerge, le label codeApprovedLabel n'aurait pu etre ajouté que par renovate également (on est a quelques secondes de l'ouverture de la pr par renovate)\n autoMergeWithSkipCi: hasLabelInPR(pr.labels, codeApprovedLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMergeWithSkipCi,\n });\n }\n await autoMergeIfPossible(pr, context, repoContext);\n }\n return;\n }\n\n if (repoContext.protectedLabelIds.includes(label.id)) {\n if (context.payload.action === 'labeled') {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n } else {\n await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n }\n return;\n }\n\n await updateStatusCheckFromLabels(pr, context, repoContext);\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const option = (() => {\n if (featureBranchLabel && label.id === featureBranchLabel.id)\n return 'featureBranch';\n if (automergeLabel && label.id === automergeLabel.id)\n return 'autoMerge';\n if (skipCiLabel && label.id === skipCiLabel.id)\n return 'autoMergeWithSkipCi';\n return null;\n })();\n\n if (option) {\n await updatePrBody(pr, context, repoContext, {\n [option]: context.payload.action === 'labeled',\n });\n } else if (context.payload.action === 'labeled') {\n if (\n repoContext.labels['merge/automerge'] &&\n label.id === repoContext.labels['merge/automerge'].id\n ) {\n await autoMergeIfPossible(pr, context, repoContext);\n }\n }\n });\n },\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checkrunCompleted(app: Application): void {\n app.on(\n 'check_run.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_run.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_run.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checksuiteCompleted(app: Application): void {\n app.on(\n 'check_suite.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_suite.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_suite.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { LockedMergePr } from '../context/repoContext';\nimport { createHandlerPullRequestsChange } from './utils';\n\nconst isSameBranch = (\n context: Context,\n lockedPr: LockedMergePr,\n): boolean => {\n if (!lockedPr) return false;\n return !!context.payload.branches.find((b) => b.name === lockedPr.branch);\n};\n\nexport default function status(app: Application): void {\n app.on(\n 'status',\n createHandlerPullRequestsChange(\n (context, repoContext): LockedMergePr[] => {\n const lockedPr = repoContext.getMergeLockedPr();\n if (!lockedPr) return [];\n\n if (\n context.payload.state !== 'loading' &&\n isSameBranch(context, lockedPr)\n ) {\n return [lockedPr];\n }\n\n return [];\n },\n (context, repoContext): void => {\n const lockedPr = repoContext.getMergeLockedPr();\n // check if changed\n if (isSameBranch(context, lockedPr)) {\n repoContext.reschedule(context, lockedPr);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport openedHandler from './pr-handlers/opened';\nimport closedHandler from './pr-handlers/closed';\nimport reopenedHandler from './pr-handlers/reopened';\nimport reviewRequestedHandler from './pr-handlers/reviewRequested';\nimport reviewRequestRemovedHandler from './pr-handlers/reviewRequestRemoved';\nimport reviewSubmittedHandler from './pr-handlers/reviewSubmitted';\nimport reviewDismissedHandler from './pr-handlers/reviewDismissed';\nimport synchromizeHandler from './pr-handlers/synchronize';\nimport editedHandler from './pr-handlers/edited';\nimport labelsChanged from './pr-handlers/labelsChanged';\nimport checkrunCompleted from './pr-handlers/checkrunCompleted';\nimport checksuiteCompleted from './pr-handlers/checksuiteCompleted';\nimport status from './pr-handlers/status';\n\nexport default function initApp(app: Application): void {\n openedHandler(app);\n closedHandler(app);\n reopenedHandler(app);\n reviewRequestedHandler(app);\n reviewRequestRemovedHandler(app);\n\n // app.on('pull_request.closed', async context => {\n\n // });\n\n // app.on('pull_request.reopened', async context => {\n\n // });\n\n reviewSubmittedHandler(app);\n reviewDismissedHandler(app);\n labelsChanged(app);\n synchromizeHandler(app);\n editedHandler(app);\n\n checkrunCompleted(app);\n checksuiteCompleted(app);\n status(app);\n}\n","import 'dotenv/config';\nimport { Probot, Application } from 'probot';\nimport mongoInit from './mongo';\nimport appRouter from './appRouter';\nimport initApp from './initApp';\n\nif (!process.env.REVIEWFLOW_NAME) process.env.REVIEWFLOW_NAME = 'reviewflow';\nconsole.log({ name: process.env.REVIEWFLOW_NAME });\n\n// const getConfig = require('probot-config')\n// const { MongoClient } = require('mongodb');\n\n// const connect = MongoClient.connect(process.env.MONGO_URL);\n// const db = connect.then(client => client.db(process.env.MONGO_DB));\n\n// let config = await getConfig(context, 'reviewflow.yml');\n\n// eslint-disable-next-line import/no-commonjs\nProbot.run(\n (app: Application): void => {\n const mongoStores = mongoInit();\n appRouter(app, mongoStores);\n initApp(app);\n },\n);\n"],"names":["process","env","MONGO_DB","Error","init","config","Map","MONGO_HOST","MONGO_PORT","MONGO_USER","set","MONGO_PASSWORD","connection","MongoConnection","Layout","lang","title","NAME","children","GITHUB_CLIENT_ID","GITHUB_CLIENT_SECRET","oauth2","create","client","id","secret","auth","tokenHost","tokenPath","authorizePath","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","AUTH_SECRET_KEY","signPromisified","sign","verifyPromisified","verify","secure","SECURE_COOKIE","createRedirectUri","req","strategy","host","hostname","PORT","readAuthCookie","cookie","cookies","algorithm","audience","headers","appRouter","app","router","route","api","use","cookieParser","get","res","redirect","authInfo","octokit","Octokit","accessToken","data","repos","list","per_page","send","renderToStaticMarkup","map","repo","owner","login","name","length","state","maxAge","httpOnly","redirectUri","githubAuth","authorizationCode","authorizeURL","redirect_uri","scope","query","error","error_description","code","cookieName","clearCookie","result","getToken","access_token","user","users","getAuthenticated","token","time","Date","now","expiresIn","params","repository","status","permissions","admin","data2","apps","getRepoInstallation","catch","err","undefined","REVIEWFLOW_NAME","slackToken","ORNIKAR_SLACK_TOKEN","autoAssignToCreator","trimTitle","ignoreRepoPattern","requiresReviewRequest","prDefaultOptions","featureBranch","autoMergeWithSkipCi","autoMerge","deleteAfterMerge","parsePR","regExp","summary","bot","statusInfoFromMatch","match","issue","inBody","url","groups","dev","JulienBreux","ORNIKAR_EMAIL_DOMAIN","CamilSadiki","busser","abarreir","arthurflachs","damienorny","darame07","Pixy","Radyum","christophehurpeau","HugoGarrido","LentnerStefan","CorentinAndre","Mxime","vlbr","mdcarter","design","jperriere","CoralineColasse","Lenamari","teams","ops","logins","labels","backends","frontends","waitForGroups","color","description","duplicate","documentation","rfc","bug","enhancement","question","wontfix","review","ci","inProgress","succeeded","failed","needsReview","requested","changesRequested","approved","tilap","orgsConfigs","ornikar","options","optionsRegexps","option","regexp","RegExp","optionsLabels","label","commentStart","commentEnd","regexpCols","regexpReviewflowCol","parseOptions","content","defaultConfig","reduce","acc","exec","parseBody","reviewFlowCol","reviewflowContent","ending","reviewFlowColMatch","reviewflowContentCol","reviewflowContentColPrefix","reviewflowContentColSuffix","parseBodyWithOptions","parsedBody","breakingChanges","replace","trim","hasLabelInPR","prLabels","some","l","hasFailedStatusOrChecks","pr","context","checks","github","listForRef","ref","head","sha","failedChecks","check_runs","filter","check","conclusion","log","info","combinedStatus","getCombinedStatusForRef","failedStatuses","statuses","autoMergeIfPossible","repoContext","autoMergeLabel","debug","prId","prNumber","number","removePrFromAutomergeQueue","createMergeLockPrFromPr","branch","hasNeedsReview","hasRequestedReview","lockedPr","getMergeLockedPr","pushAutomergeQueue","addMergeLockPr","mergeable","prResult","pulls","pull_number","merged","mergeable_state","reschedule","startsWith","body","includes","renovateRebaseBody","issues","update","base","merge","mergeResult","merge_method","commit_title","commit_message","Boolean","message","getLabelsForRepo","listLabelsForRepo","initRepoLabels","finalLabels","labelKey","labelConfig","Object","entries","labelColor","slice","existingLabel","find","createLabel","current_name","updateLabel","getKeys","o","keys","ExcludesFalsy","voidTeamSlack","mention","postMessage","Promise","resolve","prLink","initTeamSlack","githubLoginToSlackEmail","groupName","assign","slackClient","WebClient","allUsers","limit","members","values","email","member","profile","console","warn","im","open","channel","membersMap","getUserFromGithubLogin","githubLogin","text","DRY_RUN","chat","username","html_url","payload","initTeamContext","slackPromise","githubLoginToGroup","forEach","githubLoginToTeams","teamName","push","getReviewerGroups","githubLogins","Set","getReviewerGroup","getTeamsForLogin","reviewShouldWait","reviewerGroup","requestedReviewers","includesReviewerGroup","includesWaitForGroups","requestedReviewerGroups","request","group","slack","orgContextsPromise","orgContexts","obtainOrgContext","existingTeamContext","existingPromise","promise","then","orgContext","delete","initRepoContext","reviewGroupNames","needsReviewLabelIds","key","requestedReviewLabelIds","changesRequestedLabelIds","approvedReviewLabelIds","protectedLabelIds","labelIdToGroupName","reviewGroupLabels","lock","Lock","lockMergePr","automergeQueue","lockPROrPRS","prIdOrIds","prNumberOrPrNumbers","callback","reject","logInfos","repoName","createReleaseCallback","release","setTimeout","String","hasChangesRequestedReview","hasApprovesReview","getNeedsReviewGroupNames","shift","value","p","repoContextsPromise","repoContexts","shouldIgnoreRepo","orgConfig","ignoreRepoRegexp","test","obtainRepoContext","existingRepoContext","handlerPullRequestChange","pull_request","createHandlerPullRequestChange","createHandlerPullRequestsChange","getPullRequests","prs","autoAssignPRToCreator","assignees","type","addAssignees","cleanTitle","s","arg1","arg2","toUpperCase","toLowerCase","toMarkdownOptions","join","toMarkdownInfos","infos","updateBody","updateOptions","parsed","infosAndCommitNotesParagraph","updatedOptions","updateBodyCommitsNotes","commitNotes","reviewflowContentColReplaced","updatePrIfNeeded","hasDiffInTitle","hasDiffInBody","diff","syncLabel","shouldHaveLabel","prHasLabel","onRemove","onAdd","removeLabel","response","addLabels","createStatus","target_url","editOpenedPR","previousSha","skipAutoMerge","isPrFromBot","errorRule","rule","date","toISOString","hasLintPrCheck","all","head_sha","started_at","completed_at","output","featureBranchLabel","automergeLabel","skipCiLabel","prHasFeatureBranchLabel","prHasSkipCiLabel","prHasAutoMergeLabel","defaultOptions","addStatusCheck","hasPrCheck","created_at","updateStatusCheckFromLabels","createFailedStatusCheck","requested_reviewers","rr","needsReviewGroupNames","updateReviewStatus","reviewGroup","add","labelsToAdd","remove","labelsToRemove","newLabelNames","toAdd","toAddNames","toDelete","toDeleteNames","getLabelFromKey","reviewConfig","prLabel","existing","team","toDeleteName","newLabelNamesArray","oldLabels","replaceLabels","autoApproveAndAutoMerge","codeApprovedLabel","createReview","event","readCommitsAndUpdateInfos","commits","paginate","listCommits","conventionalCommits","c","parse","commit","breakingChangesCommits","index","breakingChangesNotes","notes","note","breakingChangesLabel","newBody","opened","on","fromRenovate","closed","git","deleteRef","reviewRequested","sender","reviewer","requested_reviewer","reviews","listReviews","hasChangesRequestedInReviews","reviewRequestRemoved","hasRequestedReviewsForGroup","hasApprovedInReviews","reviewSubmitted","newLabels","prUrl","reviewDismissed","synchronize","before","edited","updatePrBody","labelsChanged","autoMergeSkipCiLabel","action","checkrunCompleted","check_run","pull_requests","checksuiteCompleted","check_suite","isSameBranch","branches","b","initApp","openedHandler","closedHandler","reopenedHandler","reviewRequestedHandler","reviewRequestRemovedHandler","reviewSubmittedHandler","reviewDismissedHandler","synchromizeHandler","editedHandler","Probot","run","mongoStores","mongoInit"],"mappings":"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"} \ No newline at end of file diff --git a/dist/index-node10.cjs.js b/dist/index-node10.cjs.js index 043b91949..cbbd0e1d8 100644 --- a/dist/index-node10.cjs.js +++ b/dist/index-node10.cjs.js @@ -607,7 +607,7 @@ const config$1 = { const orgsConfigs = { ornikar: config, christophehurpeau: config$1 -}; // flat requires node 11 +}; // export const getMembers = ( // groups: Record, // ): string[] => { @@ -1251,7 +1251,7 @@ const obtainRepoContext = context => { const orgConfig = orgsConfigs[owner.login]; if (!orgConfig) { - console.warn(owner.login, Object.keys(orgsConfigs)); + console.warn(`using default config for ${owner.login}`); return null; } diff --git a/dist/index-node10.cjs.js.map b/dist/index-node10.cjs.js.map index 4f7014178..b07fea78d 100644 --- a/dist/index-node10.cjs.js.map +++ b/dist/index-node10.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"index-node10.cjs.js","sources":["../src/mongo.ts","../src/views/Layout.tsx","../src/auth/github.ts","../src/utils/random.ts","../src/appRouter.tsx","../src/orgsConfigs/ornikar.ts","../src/orgsConfigs/christophehurpeau.ts","../src/orgsConfigs/index.ts","../src/pr-handlers/actions/utils/prOptions.ts","../src/pr-handlers/actions/utils/parseBody.ts","../src/pr-handlers/actions/utils/hasLabelInPR.ts","../src/pr-handlers/actions/autoMergeIfPossible.ts","../src/context/initRepoLabels.ts","../src/context/utils.ts","../src/context/initTeamSlack.ts","../src/context/orgContext.ts","../src/context/repoContext.ts","../src/pr-handlers/utils.ts","../src/pr-handlers/actions/autoAssignPRToCreator.ts","../src/pr-handlers/actions/utils/cleanTitle.ts","../src/pr-handlers/actions/utils/updateBody.ts","../src/pr-handlers/actions/updatePr.ts","../src/pr-handlers/actions/utils/syncLabel.ts","../src/pr-handlers/actions/utils/createStatus.ts","../src/pr-handlers/actions/editOpenedPR.ts","../src/pr-handlers/actions/updateStatusCheckFromLabels.ts","../src/pr-handlers/actions/updateReviewStatus.ts","../src/pr-handlers/actions/autoApproveAndAutoMerge.ts","../src/pr-handlers/actions/readCommitsAndUpdateInfos.ts","../src/pr-handlers/opened.ts","../src/pr-handlers/closed.ts","../src/pr-handlers/reopened.ts","../src/pr-handlers/reviewRequested.ts","../src/pr-handlers/reviewRequestRemoved.ts","../src/pr-handlers/reviewSubmitted.ts","../src/pr-handlers/reviewDismissed.ts","../src/pr-handlers/synchronize.ts","../src/pr-handlers/edited.ts","../src/pr-handlers/actions/updatePrBody.ts","../src/pr-handlers/labelsChanged.ts","../src/pr-handlers/checkrunCompleted.ts","../src/pr-handlers/checksuiteCompleted.ts","../src/pr-handlers/status.ts","../src/initApp.ts","../src/index.ts"],"sourcesContent":["// import { MongoStore, MongoConnection, MongoModel } from 'liwi-mongo';\nimport { MongoConnection } from 'liwi-mongo';\n\n// export interface PrEventsModel extends MongoModel {\n// owner: string;\n// repo: string;\n// prId: string;\n// prNumber: string;\n// event: string;\n// }\n\nexport interface MongoStores {\n connection: MongoConnection;\n // prEvents: MongoStore;\n}\n\nif (!process.env.MONGO_DB) {\n throw new Error('MONGO_DB is missing in process.env');\n}\n\nexport default function init(): MongoStores {\n const config = new Map([\n ['host', process.env.MONGO_HOST || 'localhost'],\n ['port', process.env.MONGO_PORT || '27017'],\n ['database', process.env.MONGO_DB as string],\n ]);\n if (process.env.MONGO_USER) {\n config.set('user', process.env.MONGO_USER);\n config.set('password', process.env.MONGO_PASSWORD as string);\n }\n const connection = new MongoConnection(config);\n\n // const prEvents = new MongoStore(connection, 'prEvents');\n // prEvents.collection.then((coll) => {\n // coll.createIndex({ owner: 1, repo: 1, ???: 1 });\n // });\n\n // return { connection, prEvents };\n return { connection };\n}\n","import React from 'react';\n\ninterface LayoutProps {\n lang?: string;\n title?: string;\n children: React.ReactNode;\n}\n\nexport default function Layout({\n lang = 'en',\n title = process.env.NAME,\n children,\n}: LayoutProps) {\n return (\n \n \n \n \n {title}\n \n \n \n {children}\n \n );\n}\n","import { create } from 'simple-oauth2';\n\nif (!process.env.GITHUB_CLIENT_ID) {\n throw new Error('Missing env variable: GITHUB_CLIENT_ID');\n}\n\nif (!process.env.GITHUB_CLIENT_SECRET) {\n throw new Error('Missing env variable: GITHUB_CLIENT_SECRET');\n}\n\nexport const oauth2 = create({\n client: {\n id: process.env.GITHUB_CLIENT_ID,\n secret: process.env.GITHUB_CLIENT_SECRET,\n },\n auth: {\n tokenHost: 'https://github.com',\n tokenPath: '/login/oauth/access_token',\n authorizePath: '/login/oauth/authorize',\n },\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable max-lines */\n\nimport { promisify } from 'util';\nimport { Request, Response } from 'express';\nimport { Octokit, Application } from 'probot';\nimport cookieParser from 'cookie-parser';\nimport { sign, verify } from 'jsonwebtoken';\nimport React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { MongoStores } from './mongo';\nimport Layout from './views/Layout';\nimport * as githubAuth from './auth/github';\nimport { randomHex } from './utils/random';\n\nif (!process.env.AUTH_SECRET_KEY) {\n throw new Error('Missing env variable: AUTH_SECRET_KEY');\n}\n\nconst AUTH_SECRET_KEY: string = process.env.AUTH_SECRET_KEY;\n\nconst signPromisified: any = promisify(sign);\nconst verifyPromisified: any = promisify(verify);\n\nconst secure =\n !!process.env.SECURE_COOKIE && process.env.SECURE_COOKIE !== 'false';\n\nconst createRedirectUri = (req: Request, strategy: string) => {\n const host = `http${secure ? 's' : ''}://${req.hostname}${\n req.hostname === 'localhost' ? `:${process.env.PORT}` : ''\n }`;\n return `${host}/app/${strategy}/login-response`;\n};\n\ninterface AuthInfo {\n login: string;\n accessToken: string;\n time: number;\n}\n\nconst readAuthCookie = (\n req: Request,\n strategy: string,\n): undefined | Promise => {\n const cookie = req.cookies[`auth_${strategy}`];\n if (!cookie) return;\n\n return verifyPromisified(cookie, AUTH_SECRET_KEY, {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n });\n};\n\nexport default async function appRouter(\n app: Application,\n mongoStuff: MongoStores,\n): Promise {\n const router = app.route('/app');\n const api = await app.auth();\n router.use(cookieParser());\n\n router.get('/', (req, res) => {\n res.redirect('/gh');\n });\n\n router.get('/gh', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/app/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.list({ per_page: 100 });\n\n res.send(\n renderToStaticMarkup(\n \n
\n

Your repositories

\n
    \n {data.map((repo: any) => (\n
  • \n \n {repo.name}\n \n
  • \n ))}\n
\n
\n {data.length === 100 && (\n
We currently have a limit to 100 repositories
\n )}\n
,\n ),\n );\n });\n\n router.get('/gh/login', async (req: Request, res: Response) => {\n const strategy = 'gh';\n if (await readAuthCookie(req, strategy)) {\n return res.redirect('/app/gh');\n }\n\n const state = await randomHex(8);\n res.cookie(`auth_${strategy}_${state}`, strategy, {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure,\n });\n\n const redirectUri = githubAuth.oauth2.authorizationCode.authorizeURL({\n redirect_uri: createRedirectUri(req, strategy),\n scope: 'read:user,repo',\n state,\n // grant_type: options.grantType,\n // access_type: options.accessType,\n // login_hint: req.query.loginHint,\n // include_granted_scopes: options.includeGrantedScopes,\n });\n\n // console.log(redirectUri);\n\n res.redirect(redirectUri);\n });\n\n router.get('/gh/login-response', async (req, res) => {\n if (req.query.error) {\n res.send(req.query.error_description);\n return;\n }\n\n const strategy = 'gh';\n const code = req.query.code;\n const state = req.query.state;\n const cookieName = `auth_${strategy}_${state}`;\n const cookie = req.cookies && req.cookies[cookieName];\n if (!cookie) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n 'No cookie for this state. Retry ?',\n );\n return;\n }\n res.clearCookie(cookieName);\n\n const result = await githubAuth.oauth2.authorizationCode.getToken({\n code,\n redirect_uri: createRedirectUri(req, strategy),\n });\n\n if (!result) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n renderToStaticMarkup(\n \n
\n Could not get access token. Retry ?\n
\n
,\n ),\n );\n return;\n }\n\n const accessToken = result.access_token;\n const octokit = new Octokit({ auth: `token ${accessToken}` });\n const user = await octokit.users.getAuthenticated({});\n const login = user.data.login;\n\n const token = await signPromisified(\n { login, accessToken, time: Date.now() },\n AUTH_SECRET_KEY,\n {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n expiresIn: '10 days',\n },\n );\n\n res.cookie(`auth_${strategy}`, token, {\n httpOnly: true,\n secure,\n });\n\n res.redirect('/gh');\n });\n\n router.get('/gh/repository/:owner/:repository', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.get({\n owner: req.params.owner,\n repo: req.params.repository,\n });\n\n if (!data) {\n return res.status(404).send(\n renderToStaticMarkup(\n \n
repo not found
\n
,\n ),\n );\n }\n\n if (!data.permissions.admin) {\n return res.status(401).send(\n renderToStaticMarkup(\n \n
\n not authorized to see this repo, you need to have admin permission\n
\n
,\n ),\n );\n }\n\n const { data: data2 } = await api.apps\n .getRepoInstallation({\n owner: req.params.owner,\n repo: req.params.repository,\n })\n .catch((err) => {\n return { status: err.status, data: undefined };\n });\n\n if (!data2) {\n return res.send(\n renderToStaticMarkup(\n \n
\n {process.env.REVIEWFLOW_NAME} {\"isn't\"} installed on this repo. Go\n to{' '}\n \n Github Configuration\n {' '}\n to add it.\n
\n
,\n ),\n );\n }\n\n res.send(\n renderToStaticMarkup(\n \n
\n

{req.params.repository}

\n
\n
,\n ),\n );\n });\n}\n","/* eslint-disable max-lines */\n\nimport { Config } from './types';\n\nconst config: Config<'dev' | 'design', 'ops' | 'frontends' | 'backends'> = {\n slackToken: process.env.ORNIKAR_SLACK_TOKEN,\n autoAssignToCreator: true,\n trimTitle: true,\n ignoreRepoPattern: '(infra-.*|devenv)',\n requiresReviewRequest: true,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n {\n bot: false,\n regExp: /\\s([A-Z][A-Z\\d]+-(\\d+)|\\[no issue])$/,\n error: {\n title: 'Title does not have JIRA issue',\n summary: 'The PR title should end with ONK-0000, or [no issue]',\n },\n status: 'jira-issue',\n statusInfoFromMatch: (match) => {\n const issue = match[1];\n if (issue === '[no issue]') {\n return {\n title: 'No issue',\n summary: '',\n };\n }\n return {\n inBody: true,\n url: `https://ornikar.atlassian.net/browse/${issue}`,\n title: `JIRA issue: ${issue}`,\n summary: `[${issue}](https://ornikar.atlassian.net/browse/${issue})`,\n };\n },\n },\n ],\n },\n\n groups: {\n dev: {\n /* ops */\n JulienBreux: `julien.breux${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Alan-pad': null,\n CamilSadiki: null,\n busser: null,\n\n /* back */\n abarreir: `alexandre${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n arthurflachs: `arthur${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n damienorny: `damien.orny${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Thierry-girod': `thierry${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n darame07: `kevin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Pixy: `pierre-alexis${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Radyum: `romain.reynaud${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n\n /* front */\n christophehurpeau: `christophe${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n HugoGarrido: `hugo${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n LentnerStefan: `stefan${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CorentinAndre: `corentin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Mxime: `maxime${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n vlbr: `valerian${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'budet-b': `benjamin.budet${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n mdcarter: `maxime.dehaye${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n design: {\n jperriere: `julien${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CoralineColasse: `coraline${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Lenamari: `lena${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'AlexisRiols-Ornikar': `alexis.riols${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n },\n\n teams: {\n ops: {\n logins: ['JulienBreux', 'Alan-pad', 'CamilSadiki', 'busser'],\n labels: ['teams/ops'],\n },\n\n backends: {\n logins: [\n 'abarreir',\n 'arthurflachs',\n 'damienorny',\n 'Thierry-girod',\n 'darame07',\n 'Pixy',\n 'Radyum',\n ],\n labels: ['teams/backend'],\n },\n\n frontends: {\n logins: [\n 'christophehurpeau',\n 'HugoGarrido',\n 'LentnerStefan',\n 'CorentinAndre',\n 'Mxime',\n 'vlbr',\n 'budet-b',\n 'mdcarter',\n ],\n labels: ['teams/frontend'],\n },\n },\n\n waitForGroups: {\n dev: [],\n design: ['dev'],\n },\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFC44C',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#DAE1E6',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* design */\n 'design/needs-review': {\n name: ':art: design/needs-review',\n color: '#FFC44C',\n },\n 'design/review-requested': {\n name: ':art: design/review-requested',\n color: '#DAE1E6',\n },\n 'design/changes-requested': {\n name: ':art: design/changes-requested',\n color: '#e11d21',\n },\n 'design/approved': {\n name: ':art: design/approved',\n color: '#64DD17',\n },\n\n /* teams */\n 'teams/ops': {\n name: 'ops',\n color: '#003b55',\n },\n 'teams/backend': {\n name: 'backend',\n color: '#6ad8cb',\n },\n 'teams/frontend': {\n name: 'frontend',\n color: '#8a5abc',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n description: 'This issue or pull request will need a new major version',\n color: '#FF6F00',\n },\n duplicate: {\n name: 'duplicate',\n description: 'This issue or pull request already exists',\n color: '#ECEFF1',\n },\n documentation: {\n name: 'documentation',\n description: 'Improvements or additions to documentation',\n color: '#7FCEFF',\n },\n rfc: {\n name: 'RFC',\n description: 'Request For Comments',\n color: '#FFD3B2',\n },\n bug: {\n name: 'bug',\n description: \"Something isn't working\",\n color: '#FF3D00',\n },\n enhancement: {\n name: 'enhancement',\n description: 'New feature or request',\n color: '#7FCEFF',\n },\n 'help-wanted': {\n name: 'help wanted',\n description: 'Extra attention is needed',\n color: '#B1EE8B',\n },\n question: {\n name: 'question',\n description: 'Further information is requested',\n color: '#F860A4',\n },\n wontfix: {\n name: 'wontfix',\n description: 'This will not be worked on',\n color: '#ECEFF1',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n design: {\n needsReview: 'design/needs-review',\n requested: 'design/review-requested',\n changesRequested: 'design/changes-requested',\n approved: 'design/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config } from './types';\n\nconst config: Config<'dev', never> = {\n autoAssignToCreator: true,\n trimTitle: true,\n requiresReviewRequest: false,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?(!)?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n ],\n },\n groups: {\n dev: {\n christophehurpeau: 'christophe@hurpeau.com',\n 'chris-reviewflow': 'christophe.hurpeau+reviewflow@gmail.com',\n tilap: 'jlavinh@gmail.com',\n },\n },\n waitForGroups: {\n dev: [],\n },\n teams: {},\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFD57F',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#B2E1FF',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n color: '#ef7934',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config as ConfigType } from './types';\nimport ornikar from './ornikar';\nimport christophehurpeau from './christophehurpeau';\n\nexport type Config<\n GroupNames extends string = any,\n TeamNames extends string = any\n> = ConfigType;\n\nexport const orgsConfigs: { [owner: string]: Config } = {\n ornikar,\n christophehurpeau,\n};\n\n// flat requires node 11\n// export const getMembers = (\n// groups: Record,\n// ): string[] => {\n// return Object.values(groups).flat(1);\n// };\n","export type Options =\n | 'featureBranch'\n | 'autoMergeWithSkipCi'\n | 'autoMerge'\n | 'deleteAfterMerge';\n\nexport const options: Options[] = [\n 'featureBranch',\n 'autoMergeWithSkipCi',\n 'autoMerge',\n 'deleteAfterMerge',\n];\nexport const optionsRegexps: { name: Options; regexp: RegExp }[] = options.map(\n (option) => ({\n name: option,\n regexp: new RegExp(`\\\\[([ xX]?)]\\\\s*`),\n }),\n);\n\nexport const optionsLabels: { name: Options; label: string }[] = [\n { name: 'featureBranch', label: 'This PR is a feature branch' },\n {\n name: 'autoMergeWithSkipCi',\n label: 'Auto merge with `[skip ci]`',\n },\n {\n name: 'autoMerge',\n label:\n 'Auto merge when this PR is ready and has no failed statuses. (Also has a queue per repo to prevent multiple useless \"Update branch\" triggers)',\n },\n {\n name: 'deleteAfterMerge',\n label: 'Automatic branch delete after this PR is merged',\n },\n];\n","import { Options, optionsRegexps } from './prOptions';\n\nconst commentStart = '';\nconst commentEnd = \"\";\n\nconst regexpCols = /^(.*)((.*))(.*)$/is;\nconst regexpReviewflowCol = /^(\\s*<\\/td>]*>)\\s*(.*)\\s*(<\\/td><\\/tr><\\/table>\\s*)\\s*$/is;\n\ntype Config = Record;\n\nconst parseOptions = (content: string, defaultConfig: Config): Config => {\n return optionsRegexps.reduce(\n (acc, { name, regexp }) => {\n const match = regexp.exec(content);\n acc[name] = !match\n ? defaultConfig[name] || false\n : match[1] === 'x' || match[1] === 'X';\n return acc;\n },\n {} as any,\n ) as Config;\n};\n\ninterface ParseBodyResultWithoutOptions {\n content: string;\n ending: string;\n reviewflowContentCol: string;\n reviewflowContentColPrefix: string;\n reviewflowContentColSuffix: string;\n}\n\ninterface ParseBodyResultWithOptions extends ParseBodyResultWithoutOptions {\n options: Config;\n breakingChanges: string;\n}\n\nexport const parseBody = (\n description: string,\n): ParseBodyResultWithoutOptions | null => {\n const match = regexpCols.exec(description);\n if (!match) return null;\n const [, content, reviewFlowCol, reviewflowContent, ending] = match;\n const reviewFlowColMatch = regexpReviewflowCol.exec(reviewFlowCol);\n if (!reviewFlowColMatch) {\n return {\n content,\n ending,\n reviewflowContentCol: reviewflowContent,\n reviewflowContentColPrefix: commentStart,\n reviewflowContentColSuffix: commentEnd,\n };\n }\n const [\n ,\n reviewflowContentColPrefix,\n reviewflowContentCol,\n reviewflowContentColSuffix,\n ] = reviewFlowColMatch;\n\n return {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n };\n};\n\nexport const parseBodyWithOptions = (\n description: string,\n defaultConfig: Config,\n): ParseBodyResultWithOptions | null => {\n const parsedBody = parseBody(description);\n if (parsedBody === null) return null;\n\n // console.log(parsedBody.reviewflowContentCol);\n let breakingChanges = parsedBody.reviewflowContentCol.replace(\n /^.*#### Commits Notes:(.*)#### Options:.*$/s,\n '$1',\n );\n\n if (breakingChanges === parsedBody.reviewflowContentCol) {\n breakingChanges = '';\n } else {\n breakingChanges = breakingChanges.trim();\n }\n\n return {\n ...parsedBody,\n options: parseOptions(parsedBody.reviewflowContentCol, defaultConfig),\n breakingChanges,\n };\n};\n","import { Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\n\nexport default function hasLabelInPR(\n prLabels: Octokit.PullsGetResponse['labels'],\n label: LabelResponse,\n): boolean {\n if (!label) return false;\n return prLabels.some((l): boolean => l.id === label.id);\n}\n","/* eslint-disable max-lines */\nimport { Context, Octokit } from 'probot';\n// eslint-disable-next-line import/no-cycle\nimport { RepoContext } from '../../context/repoContext';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { parseBodyWithOptions } from './utils/parseBody';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nconst hasFailedStatusOrChecks = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n) => {\n const checks = await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n const failedChecks = checks.data.check_runs.filter(\n (check) => check.conclusion === 'failure',\n );\n\n if (failedChecks.length !== 0) {\n context.log.info(`automerge not possible: failed check pr ${pr.id}`, {\n checks: failedChecks.map((check) => check.name),\n });\n return true;\n }\n\n const combinedStatus = await context.github.repos.getCombinedStatusForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n if (combinedStatus.data.state === 'failure') {\n const failedStatuses = combinedStatus.data.statuses.filter(\n (status) => status.state === 'failure' || status.state === 'error',\n );\n\n context.log.info(`automerge not possible: failed status pr ${pr.id}`, {\n statuses: failedStatuses.map((status) => status.context),\n });\n\n return true;\n }\n\n return false;\n};\n\nexport const autoMergeIfPossible = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n prLabels: LabelResponse[] = pr.labels,\n): Promise => {\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n\n if (!hasLabelInPR(prLabels, autoMergeLabel)) {\n context.log.debug('automerge not possible: no label', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const createMergeLockPrFromPr = () => ({\n id: pr.id,\n number: pr.number,\n branch: pr.head.ref,\n });\n\n if (pr.state !== 'open') {\n context.log.debug('automerge not possible: pr is not opened', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n }\n\n if (\n repoContext.hasNeedsReview(prLabels) ||\n repoContext.hasRequestedReview(prLabels)\n ) {\n context.log.debug('automerge not possible: blocking labels', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const lockedPr = repoContext.getMergeLockedPr();\n if (lockedPr && lockedPr.number !== pr.number) {\n context.log.info('automerge not possible: locked pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.pushAutomergeQueue(createMergeLockPrFromPr());\n return false;\n }\n\n repoContext.addMergeLockPr(createMergeLockPrFromPr());\n\n if (pr.mergeable === undefined) {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n pr = prResult.data;\n }\n\n if (pr.merged) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info('automerge not possible: already merged pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n return false;\n }\n\n context.log.info(\n `automerge?: ${pr.id}, #${pr.number}, mergeable=${pr.mergeable} state=${\n pr.mergeable_state\n }`,\n );\n\n // https://github.com/octokit/octokit.net/issues/1763\n if (\n !(\n pr.mergeable_state === 'clean' ||\n pr.mergeable_state === 'has_hooks' ||\n pr.mergeable_state === 'unstable'\n )\n ) {\n if (!pr.mergeable_state || pr.mergeable_state === 'unknown') {\n context.log.info(`automerge not possible: rescheduling ${pr.id}`);\n // GitHub is determining whether the pull request is mergeable\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n\n if (pr.head.ref.startsWith('renovate/')) {\n if (pr.mergeable_state === 'behind' || pr.mergeable_state === 'dirty') {\n context.log.info(\n `automerge not possible: rebase renovate branch pr ${pr.id}`,\n );\n // TODO check if has commits not made by renovate https://github.com/ornikar/shared-configs/pull/47#issuecomment-445767120\n\n if (pr.body.includes('')) {\n if (pr.body.includes('[x] ')) {\n return false;\n }\n\n const renovateRebaseBody = pr.body.replace(\n '[ ] ',\n '[x] ',\n );\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n body: renovateRebaseBody,\n }),\n );\n } else if (!pr.title.startsWith('rebase!')) {\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n title: `rebase!${pr.title}`,\n }),\n );\n }\n\n return false;\n }\n\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else if (pr.mergeable_state === 'blocked') {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n\n context.log.info(\n `automerge not possible: renovate with mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n if (pr.mergeable_state === 'blocked') {\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n }\n\n if (pr.mergeable_state === 'behind') {\n context.log.info('automerge not possible: update branch', {\n head: pr.head.ref,\n base: pr.base.ref,\n });\n\n await context.github.repos.merge({\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n head: pr.base.ref,\n base: pr.head.ref,\n });\n\n return false;\n }\n\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info(\n `automerge not possible: not mergeable mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n try {\n context.log.info(`automerge pr #${pr.number}`);\n\n const parsedBody = parseBodyWithOptions(\n pr.body,\n repoContext.config.prDefaultOptions,\n );\n const options =\n (parsedBody && parsedBody.options) || repoContext.config.prDefaultOptions;\n\n const mergeResult = await context.github.pulls.merge({\n merge_method: options.featureBranch ? 'merge' : 'squash',\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n pull_number: pr.number,\n commit_title: `${pr.title}${\n options.autoMergeWithSkipCi ? ' [skip ci]' : ''\n } (#${pr.number})`,\n commit_message: '', // TODO add BC\n });\n context.log.debug('merge result:', mergeResult.data);\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return Boolean(mergeResult.data.merged);\n } catch (err) {\n context.log.info('could not merge:', err.message);\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n};\n","import { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\n\nexport interface LabelResponse {\n id: number;\n node_id: string;\n url: string;\n name: string;\n description: string;\n color: string;\n default: boolean;\n}\n\nexport interface Labels {\n [key: string]: LabelResponse;\n}\n\nexport const getLabelsForRepo = async (\n context: Context,\n): Promise => {\n const { data: labels } = await context.github.issues.listLabelsForRepo(\n context.repo({ per_page: 100 }),\n );\n return labels;\n};\n\nexport const initRepoLabels = async (\n context: Context,\n config: Config,\n): Promise => {\n const labels = await getLabelsForRepo(context);\n const finalLabels: Record = {};\n\n for (const [labelKey, labelConfig] of Object.entries(config.labels.list)) {\n const labelColor = labelConfig.color.slice(1);\n const description = labelConfig.description\n ? `${labelConfig.description} - Synced by reviewflow`\n : `Synced by reviewflow for ${labelKey}`;\n\n let existingLabel = labels.find((label) => label.name === labelConfig.name);\n if (!existingLabel) {\n existingLabel = labels.find((label) => label.description === description);\n }\n if (!existingLabel) {\n if (labelKey === 'design/needs-review') {\n existingLabel = labels.find(\n (label) => label.name === 'needs-design-review',\n );\n }\n if (labelKey === 'design/approved') {\n existingLabel = labels.find(\n (label) => label.name === 'design-reviewed',\n );\n }\n if (labelKey === 'teams/ops') {\n existingLabel = labels.find((label) => label.name === 'archi');\n }\n }\n\n if (!existingLabel) {\n const result = await context.github.issues.createLabel(\n context.repo({\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else if (\n existingLabel.name !== labelConfig.name ||\n existingLabel.color !== labelColor ||\n existingLabel.description !== description\n ) {\n context.log.info('Needs to update label', {\n current_name: existingLabel.name,\n name: existingLabel.name !== labelConfig.name && labelConfig.name,\n color: existingLabel.color !== labelColor && labelColor,\n description: existingLabel.description !== description && description,\n });\n\n const result = await context.github.issues.updateLabel(\n context.repo({\n current_name: existingLabel.name,\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else {\n finalLabels[labelKey] = existingLabel;\n }\n }\n\n return finalLabels;\n};\n","export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n","import Webhooks from '@octokit/webhooks';\nimport { WebClient } from '@slack/web-api';\nimport { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { getKeys } from './utils';\n\nexport interface TeamSlack {\n mention: (githubLogin: string) => string;\n postMessage: (githubLogin: string, text: string) => Promise;\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ) => string;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const voidTeamSlack = (): TeamSlack => ({\n mention: (): string => '',\n postMessage: (): Promise => Promise.resolve(),\n prLink: (): string => '',\n});\n\nexport const initTeamSlack = async (\n context: Context,\n config: Config,\n): Promise => {\n if (!config.slackToken) {\n return voidTeamSlack();\n }\n\n const githubLoginToSlackEmail = getKeys(config.groups).reduce<{\n [login: string]: string;\n }>((acc, groupName) => {\n Object.assign(acc, config.groups[groupName]);\n return acc;\n }, {});\n\n const slackClient = new WebClient(config.slackToken);\n const allUsers: any = await slackClient.users.list({ limit: 200 });\n const members: [string, { member: any; im: any }][] = Object.values(\n githubLoginToSlackEmail,\n )\n .map((email) => {\n const member = allUsers.members.find(\n (user: any) => user.profile.email === email,\n );\n if (!member) {\n console.warn(`Could not find user ${email}`);\n return;\n }\n return [email, { member, im: undefined }] as [\n string,\n { member: any; im: any }\n ];\n })\n .filter(ExcludesFalsy);\n\n for (const [, user] of members) {\n try {\n const im: any = await slackClient.im.open({ user: user.member.id });\n user.im = im.channel;\n } catch (err) {\n console.error(err);\n }\n }\n\n const membersMap = new Map(members);\n\n const getUserFromGithubLogin = (githubLogin: string) => {\n const email = githubLoginToSlackEmail[githubLogin];\n if (!email) return null;\n return membersMap.get(email);\n };\n\n return {\n mention: (githubLogin: string): string => {\n const user = getUserFromGithubLogin(githubLogin);\n if (!user) return githubLogin;\n return `<@${user.member.id}>`;\n },\n postMessage: async (githubLogin: string, text: string): Promise => {\n context.log.debug('send slack', { githubLogin, text });\n if (process.env.DRY_RUN) return;\n\n const user = getUserFromGithubLogin(githubLogin);\n if (!user || !user.im) return;\n await slackClient.chat.postMessage({\n username: process.env.REVIEWFLOW_NAME,\n channel: user.im.id,\n text,\n });\n },\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ): string => {\n return `<${pr.html_url}|${context.payload.repository.name}#${pr.number}>`;\n },\n };\n};\n","import { Context } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { initTeamSlack, TeamSlack } from './initTeamSlack';\nimport { getKeys } from './utils';\n\nexport interface OrgContext<\n GroupNames extends string = any,\n TeamNames extends string = any\n> {\n config: Config;\n slack: TeamSlack;\n getReviewerGroup: (githubLogin: string) => string | undefined;\n getReviewerGroups: (githubLogins: string[]) => string[];\n getTeamsForLogin: (githubLogin: string) => TeamNames[];\n reviewShouldWait: (\n reviewerGroup: GroupNames | undefined,\n requestedReviewers: any[],\n {\n includesReviewerGroup,\n includesWaitForGroups,\n }: { includesReviewerGroup?: boolean; includesWaitForGroups?: boolean },\n ) => boolean;\n}\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nconst initTeamContext = async (\n context: Context,\n config: Config,\n): Promise => {\n const slackPromise = initTeamSlack(context, config);\n\n const githubLoginToGroup = new Map();\n getKeys(config.groups).forEach((groupName) => {\n Object.keys(config.groups[groupName]).forEach((login) => {\n githubLoginToGroup.set(login, groupName);\n });\n });\n\n const githubLoginToTeams = new Map();\n getKeys(config.teams || {}).forEach((teamName) => {\n (config.teams as NonNullable)[teamName].logins.forEach(\n (login) => {\n const teams = githubLoginToTeams.get(login);\n if (teams) {\n teams.push(teamName);\n } else {\n githubLoginToTeams.set(login, [teamName]);\n }\n },\n );\n });\n\n const getReviewerGroups = (githubLogins: string[]) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(Boolean),\n ),\n ];\n\n return {\n config,\n getReviewerGroup: (githubLogin) => githubLoginToGroup.get(githubLogin),\n getReviewerGroups: (githubLogins) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(ExcludesFalsy),\n ),\n ],\n\n getTeamsForLogin: (githubLogin) =>\n githubLoginToTeams.get(githubLogin) || [],\n\n reviewShouldWait: (\n reviewerGroup,\n requestedReviewers,\n { includesReviewerGroup, includesWaitForGroups },\n ) => {\n if (!reviewerGroup) return false;\n\n const requestedReviewerGroups = getReviewerGroups(\n requestedReviewers.map((request) => request.login),\n );\n\n // contains another request of a reviewer in the same group\n if (\n includesReviewerGroup &&\n requestedReviewerGroups.includes(reviewerGroup)\n ) {\n return true;\n }\n\n // contains a request from a dependent group\n if (config.waitForGroups && includesWaitForGroups) {\n const waitForGroups = config.waitForGroups;\n return requestedReviewerGroups.some((group) =>\n waitForGroups[reviewerGroup].includes(group),\n );\n }\n\n return false;\n },\n\n slack: await slackPromise,\n };\n};\n\nconst orgContextsPromise = new Map();\nconst orgContexts = new Map();\n\nexport const obtainOrgContext = (\n context: Context,\n config: Config,\n): Promise => {\n const owner = context.payload.repository.owner;\n\n const existingTeamContext = orgContexts.get(owner.login);\n if (existingTeamContext) return existingTeamContext;\n\n const existingPromise = orgContextsPromise.get(owner.login);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const promise = initTeamContext(context, config);\n orgContextsPromise.set(owner.login, promise);\n\n return promise.then((orgContext) => {\n orgContextsPromise.delete(owner.login);\n orgContexts.set(owner.login, orgContext);\n return orgContext;\n });\n};\n","/* eslint-disable max-lines */\n\nimport { Lock } from 'lock';\nimport { Context } from 'probot';\nimport { orgsConfigs, Config } from '../orgsConfigs';\n// eslint-disable-next-line import/no-cycle\nimport { autoMergeIfPossible } from '../pr-handlers/actions/autoMergeIfPossible';\nimport { initRepoLabels, LabelResponse, Labels } from './initRepoLabels';\nimport { obtainOrgContext, OrgContext } from './orgContext';\n\nexport interface LockedMergePr {\n id: number;\n number: number;\n branch: string;\n}\n\ninterface RepoContextWithoutTeamContext {\n labels: Labels;\n protectedLabelIds: readonly LabelResponse['id'][];\n\n hasNeedsReview: (labels: LabelResponse[]) => boolean;\n hasRequestedReview: (labels: LabelResponse[]) => boolean;\n hasChangesRequestedReview: (labels: LabelResponse[]) => boolean;\n hasApprovesReview: (labels: LabelResponse[]) => boolean;\n getNeedsReviewGroupNames: (labels: LabelResponse[]) => GroupNames[];\n\n lockPROrPRS(\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise;\n\n getMergeLockedPr(): LockedMergePr;\n addMergeLockPr(pr: LockedMergePr): void;\n removePrFromAutomergeQueue(context: Context, prNumber: number): void;\n reschedule(context: Context, pr: LockedMergePr): void;\n pushAutomergeQueue(pr: LockedMergePr): void;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport type RepoContext = OrgContext<\n GroupNames\n> &\n RepoContextWithoutTeamContext;\n\nasync function initRepoContext(\n context: Context,\n config: Config,\n): Promise> {\n const repo = context.payload.repository;\n const orgContext = await obtainOrgContext(context, config);\n const repoContext = Object.create(orgContext);\n\n const labels = await initRepoLabels(context, config);\n\n const reviewGroupNames = Object.keys(config.groups) as GroupNames[];\n\n const needsReviewLabelIds = reviewGroupNames\n .map((key: GroupNames) => config.labels.review[key].needsReview)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const requestedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].requested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const changesRequestedLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].changesRequested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const approvedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].approved)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const protectedLabelIds = [\n ...requestedReviewLabelIds,\n ...changesRequestedLabelIds,\n ...approvedReviewLabelIds,\n ];\n\n const labelIdToGroupName = new Map();\n reviewGroupNames.forEach((key) => {\n const reviewGroupLabels = config.labels.review[key] as any;\n Object.keys(reviewGroupLabels).forEach((labelKey: string) => {\n labelIdToGroupName.set(labels[reviewGroupLabels[labelKey]].id, key);\n });\n });\n\n // const updateStatusCheck = (context, reviewGroup, statusInfo) => {};\n\n const hasNeedsReview = (labels: LabelResponse[]) =>\n labels.some((label) => needsReviewLabelIds.includes(label.id));\n const hasRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => requestedReviewLabelIds.includes(label.id));\n const hasChangesRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => changesRequestedLabelIds.includes(label.id));\n const hasApprovesReview = (labels: LabelResponse[]) =>\n labels.some((label) => approvedReviewLabelIds.includes(label.id));\n\n const getNeedsReviewGroupNames = (labels: LabelResponse[]): GroupNames[] =>\n labels\n .filter((label) => needsReviewLabelIds.includes(label.id))\n .map((label) => labelIdToGroupName.get(label.id))\n .filter(ExcludesFalsy);\n\n const lock = Lock();\n let lockMergePr: LockedMergePr | undefined;\n let automergeQueue: LockedMergePr[] = [];\n\n const lockPROrPRS = (\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise =>\n new Promise((resolve, reject) => {\n const logInfos = {\n repoName: repo.name,\n prIdOrIds,\n prNumberOrPrNumbers,\n };\n context.log.info('lock: try to lock pr', logInfos);\n lock(prIdOrIds, async (createReleaseCallback) => {\n const release = createReleaseCallback(() => {});\n context.log.info('lock: lock acquired', logInfos);\n try {\n await callback();\n } catch (err) {\n context.log.info('lock: release pr (with error)', logInfos);\n release();\n reject(err);\n return;\n }\n context.log.info('lock: release pr', logInfos);\n release();\n resolve();\n });\n });\n\n const reschedule = (context: Context, pr: LockedMergePr) => {\n if (!pr) throw new Error('Cannot reschedule undefined');\n context.log.info('reschedule', pr);\n setTimeout(() => {\n lockPROrPRS('reschedule', pr.number, () => {\n return lockPROrPRS(String(pr.id), pr.number, async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n await autoMergeIfPossible(prResult.data, context, repoContext);\n });\n });\n }, 1000);\n };\n\n return Object.assign(repoContext, {\n labels,\n protectedLabelIds,\n hasNeedsReview,\n hasRequestedReview,\n hasChangesRequestedReview,\n hasApprovesReview,\n getNeedsReviewGroupNames,\n\n getMergeLockedPr: () => lockMergePr,\n addMergeLockPr: (pr: LockedMergePr): void => {\n console.log('merge lock: lock', pr);\n if (lockMergePr && String(lockMergePr.number) === String(pr.number)) {\n return;\n }\n if (lockMergePr) throw new Error('Already have lock');\n lockMergePr = pr;\n },\n removePrFromAutomergeQueue: (context, prNumber: number | string): void => {\n context.log('merge lock: remove', { prNumber });\n if (lockMergePr && String(lockMergePr.number) === String(prNumber)) {\n lockMergePr = automergeQueue.shift();\n context.log('merge lock: next', { lockMergePr });\n if (lockMergePr) {\n reschedule(context, lockMergePr);\n }\n } else {\n automergeQueue = automergeQueue.filter(\n (value) => String(value.number) !== String(prNumber),\n );\n }\n },\n pushAutomergeQueue: (pr: LockedMergePr): void => {\n console.log('merge lock: push queue', {\n pr,\n lockMergePr,\n automergeQueue,\n });\n if (!automergeQueue.some((p) => p.number === pr.number)) {\n automergeQueue.push(pr);\n }\n },\n reschedule,\n\n lockPROrPRS,\n } as RepoContextWithoutTeamContext);\n}\n\nconst repoContextsPromise = new Map>();\nconst repoContexts = new Map();\n\nexport const shouldIgnoreRepo = (\n repoName: string,\n orgConfig: Config,\n): boolean => {\n const ignoreRepoRegexp =\n orgConfig.ignoreRepoPattern &&\n new RegExp(`^${orgConfig.ignoreRepoPattern}$`);\n\n if (repoName === 'reviewflow-test') {\n return process.env.REVIEWFLOW_NAME !== 'reviewflow-test';\n }\n\n if (ignoreRepoRegexp) {\n return ignoreRepoRegexp.test(repoName);\n }\n\n return false;\n};\n\nexport const obtainRepoContext = (\n context: Context,\n): Promise | RepoContext | null => {\n const repo = context.payload.repository;\n const owner = repo.owner;\n const key = repo.id;\n\n const existingRepoContext = repoContexts.get(key);\n if (existingRepoContext) return existingRepoContext;\n\n const existingPromise = repoContextsPromise.get(key);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const orgConfig = orgsConfigs[owner.login];\n\n if (!orgConfig) {\n console.warn(owner.login, Object.keys(orgsConfigs));\n return null;\n }\n\n if (shouldIgnoreRepo(repo.name, orgConfig)) {\n console.warn('repo ignored', { owner: repo.owner.login, name: repo.name });\n return null;\n }\n\n const promise = initRepoContext(context, orgConfig);\n repoContextsPromise.set(key, promise);\n\n return promise.then((repoContext) => {\n repoContextsPromise.delete(key);\n repoContexts.set(key, repoContext);\n return repoContext;\n });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { obtainRepoContext, RepoContext } from '../context/repoContext';\n\nexport type PRHandler = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n fourthArgument?: FourthArgument,\n) => Promise;\n\nexport type CallbackWithPRAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const handlerPullRequestChange = async <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n callback: CallbackWithPRAndRepoContext,\n): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n return repoContext.lockPROrPRS(\n String(context.payload.pull_request.id),\n context.payload.pull_request.number,\n async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: context.payload.pull_request.number,\n }),\n );\n\n await callback(prResult.data, repoContext);\n },\n );\n};\n\ntype CallbackPRAndContextAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestChange = <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n callback: CallbackPRAndContextAndRepoContext,\n) => (context: Context) => {\n return handlerPullRequestChange(context, (pr, repoContext) =>\n callback(pr, context, repoContext),\n );\n};\n\ntype CallbackContextAndRepoContext = (\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestsChange = (\n getPullRequests: (\n context: Context,\n repoContext: RepoContext,\n ) => { id: string | number; number: number }[],\n callback: CallbackContextAndRepoContext,\n) => async (context: Context): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n const prs = getPullRequests(context, repoContext);\n if (prs.length === 0) return;\n return repoContext.lockPROrPRS(\n prs.map((pr) => String(pr.id)),\n prs.map((pr) => pr.number),\n () => callback(context, repoContext),\n );\n};\n","import Webhooks from '@octokit/webhooks';\nimport { PRHandler } from '../utils';\n\nexport const autoAssignPRToCreator: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n if (!repoContext.config.autoAssignToCreator) return;\n if (pr.assignees.length !== 0) return;\n if (pr.user.type === 'Bot') return;\n\n await context.github.issues.addAssignees(\n context.issue({\n assignees: [pr.user.login],\n }),\n );\n};\n","export const cleanTitle = (title: string): string =>\n title\n .trim()\n .replace(\n /[\\s-]+\\[?\\s*([A-Za-z][A-Za-z\\d]+)[- ](\\d+)\\s*]?\\s*$/,\n (s, arg1, arg2) => ` ${arg1.toUpperCase()}-${arg2}`,\n )\n .replace(/^([A-Za-z]+)[/:]\\s*/, (s, arg1) => `${arg1.toLowerCase()}: `)\n .replace(/^Revert \"([^\"]+)\"$/, 'revert: $1')\n .replace(/\\s+[[\\]]\\s*no\\s*issue\\s*[[\\]]$/i, ' [no issue]')\n // eslint-disable-next-line unicorn/no-unsafe-regex\n .replace(/^(revert:.*)(\\s+\\(#\\d+\\))$/, '$1');\n","import { StatusInfo } from '../../../orgsConfigs/types';\nimport { parseBodyWithOptions, parseBody } from './parseBody';\nimport { Options, optionsLabels } from './prOptions';\n\nconst toMarkdownOptions = (options: Record) => {\n return optionsLabels\n .map(\n ({ name, label }) =>\n `- [${options[name] ? 'x' : ' '}] ${label}`,\n )\n .join('\\n');\n};\n\nconst toMarkdownInfos = (infos: StatusInfo[]) => {\n return infos\n .map((info) => {\n if (info.url) return `[${info.title}](${info.url})`;\n return info.title;\n })\n .join('\\n');\n};\n\ninterface UpdatedBodyWithOptions {\n body: string;\n options?: Record;\n}\n\nexport const updateBody = (\n body: string,\n defaultConfig: Record,\n infos?: StatusInfo[],\n updateOptions?: Partial>,\n): UpdatedBodyWithOptions => {\n const parsed = parseBodyWithOptions(body, defaultConfig);\n if (!parsed) {\n console.info('could not parse body');\n return { body };\n }\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n options,\n } = parsed;\n\n const infosAndCommitNotesParagraph = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^\\s*(?:(#### Infos:.*)?(#### Commits Notes:.*)?#### Options:)?.*$/s,\n // eslint-disable-next-line no-nested-ternary\n !infos\n ? '$1$2'\n : infos.length !== 0\n ? `#### Infos:\\n${toMarkdownInfos(infos)}\\n$2`\n : '$2',\n );\n\n const updatedOptions = !updateOptions\n ? options\n : { ...options, ...updateOptions };\n\n return {\n options: updatedOptions,\n body: `${content}${reviewflowContentColPrefix}\n${infosAndCommitNotesParagraph}#### Options:\n${toMarkdownOptions(updatedOptions)}\n${reviewflowContentColSuffix}${ending || ''}`,\n };\n};\n\nexport const updateBodyCommitsNotes = (\n body: string,\n commitNotes?: string,\n): string => {\n const parsed = parseBody(body);\n if (!parsed) {\n console.info('could not parse body');\n return body;\n }\n\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n } = parsed;\n\n const reviewflowContentColReplaced = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /(?:#### Commits Notes:.*)?(#### Options:)/s,\n // eslint-disable-next-line no-nested-ternary\n !commitNotes ? '$1' : `#### Commits Notes:\\n\\n${commitNotes}\\n\\n$1`,\n );\n\n return `${content}${reviewflowContentColPrefix}${reviewflowContentColReplaced}${reviewflowContentColSuffix}${ending ||\n ''}`;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\n\ninterface UpdatePr {\n title?: string;\n body?: string;\n}\n\nexport const updatePrIfNeeded = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n update: UpdatePr,\n): Promise => {\n const hasDiffInTitle = update.title && pr.title !== update.title;\n const hasDiffInBody = update.body && pr.body !== update.body;\n\n if (hasDiffInTitle || hasDiffInBody) {\n const diff: Partial> = {};\n if (hasDiffInTitle) {\n diff.title = update.title;\n pr.title = update.title as string;\n }\n if (hasDiffInBody) {\n diff.body = update.body;\n pr.body = update.body as string;\n }\n\n await context.github.issues.update(context.issue(diff));\n }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\nimport hasLabelInPR from './hasLabelInPR';\n\ninterface SyncLabelOptions {\n onRemove?: () => void | Promise;\n onAdd?: (prLabels: LabelResponse[]) => void | Promise;\n}\n\nexport default async function syncLabel<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n shouldHaveLabel: boolean,\n label: LabelResponse,\n prHasLabel = hasLabelInPR(pr.labels, label),\n { onRemove, onAdd }: SyncLabelOptions = {},\n): Promise {\n if (prHasLabel && !shouldHaveLabel) {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n if (onRemove) await onRemove();\n }\n if (shouldHaveLabel && !prHasLabel) {\n const response = await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n if (onAdd) await onAdd(response.data);\n }\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context } from 'probot';\n\nexport default async function createStatus<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n name: string,\n sha: string,\n type: 'failure' | 'success',\n description: string,\n url?: string,\n): Promise {\n await context.github.repos.createStatus(\n context.repo({\n context:\n name === ''\n ? process.env.REVIEWFLOW_NAME\n : `${process.env.REVIEWFLOW_NAME}/${name}`,\n sha,\n state: type,\n description,\n target_url: url,\n }),\n );\n}\n","/* eslint-disable max-lines */\nimport Webhooks from '@octokit/webhooks';\nimport { StatusError, StatusInfo } from '../../orgsConfigs/types';\nimport { PRHandler } from '../utils';\nimport { cleanTitle } from './utils/cleanTitle';\nimport { updateBody } from './utils/updateBody';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport { updatePrIfNeeded } from './updatePr';\nimport hasLabelInPR from './utils/hasLabelInPR';\nimport syncLabel from './utils/syncLabel';\nimport createStatus from './utils/createStatus';\n\ninterface StatusWithInfo {\n name: string;\n info: StatusInfo;\n error?: undefined;\n}\n\ninterface StatusWithError {\n name: string;\n error: StatusError;\n info?: undefined;\n}\n\ntype Status = StatusWithInfo | StatusWithError;\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const editOpenedPR: PRHandler<\n Webhooks.WebhookPayloadPullRequest,\n { skipAutoMerge: boolean },\n string\n> = async (pr, context, repoContext, previousSha) => {\n const repo = context.payload.repository;\n\n // do not lint pr from forks\n if (pr.head.repo.id !== repo.id) return { skipAutoMerge: true };\n\n const title = repoContext.config.trimTitle ? cleanTitle(pr.title) : pr.title;\n\n const isPrFromBot = pr.user.type === 'Bot';\n\n const statuses: Status[] = [];\n\n const errorRule = repoContext.config.parsePR.title.find((rule) => {\n if (rule.bot === false && isPrFromBot) return false;\n\n const match = rule.regExp.exec(title);\n if (match === null) {\n if (rule.status) {\n statuses.push({ name: rule.status, error: rule.error });\n }\n return true;\n }\n\n if (rule.status && rule.statusInfoFromMatch) {\n statuses.push({\n name: rule.status,\n info: rule.statusInfoFromMatch(match),\n });\n return false;\n }\n\n return false;\n });\n\n const date = new Date().toISOString();\n\n const hasLintPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check): boolean => check.name === `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n );\n\n await Promise.all(\n [\n ...statuses.map(\n ({ name, error, info }): Promise =>\n createStatus(\n context,\n name,\n pr.head.sha,\n error ? 'failure' : 'success',\n error ? error.title : (info as StatusInfo).title,\n error ? undefined : (info as StatusInfo).url,\n ),\n ),\n ...(previousSha\n ? statuses\n .map(\n ({ name, error, info }): Promise | undefined =>\n error\n ? createStatus(\n context,\n name,\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n )\n .filter(ExcludesFalsy)\n : []),\n hasLintPrCheck &&\n context.github.checks.create(\n context.repo({\n name: `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n head_sha: pr.head.sha,\n status: 'completed' as 'completed',\n conclusion: (errorRule ? 'failure' : 'success') as\n | 'failure'\n | 'success',\n started_at: date,\n completed_at: date,\n output: errorRule\n ? errorRule.error\n : {\n title: '✓ Your PR is valid',\n summary: '',\n },\n }),\n ),\n !hasLintPrCheck && previousSha && errorRule\n ? createStatus(\n context,\n 'lint-pr',\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n !hasLintPrCheck &&\n createStatus(\n context,\n 'lint-pr',\n pr.head.sha,\n errorRule ? 'failure' : 'success',\n errorRule ? errorRule.error.title : '✓ Your PR is valid',\n ),\n ].filter(ExcludesFalsy),\n );\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const prHasFeatureBranchLabel = hasLabelInPR(pr.labels, featureBranchLabel);\n const prHasSkipCiLabel = hasLabelInPR(pr.labels, skipCiLabel);\n const prHasAutoMergeLabel = hasLabelInPR(pr.labels, automergeLabel);\n\n const defaultOptions = {\n ...repoContext.config.prDefaultOptions,\n featureBranch: prHasFeatureBranchLabel,\n autoMergeWithSkipCi: prHasSkipCiLabel,\n autoMerge: prHasAutoMergeLabel,\n };\n\n const { body, options } = updateBody(pr.body, defaultOptions, statuses\n .filter((status) => status.info && status.info.inBody)\n .map((status) => status.info) as StatusInfo[]);\n await updatePrIfNeeded(pr, context, repoContext, { title, body });\n\n if (options && (featureBranchLabel || automergeLabel)) {\n await Promise.all([\n featureBranchLabel &&\n syncLabel(\n pr,\n context,\n options.featureBranch,\n featureBranchLabel,\n prHasFeatureBranchLabel,\n ),\n skipCiLabel &&\n syncLabel(\n pr,\n context,\n options.autoMergeWithSkipCi,\n skipCiLabel,\n prHasSkipCiLabel,\n ),\n automergeLabel &&\n syncLabel(\n pr,\n context,\n options.autoMerge,\n automergeLabel,\n prHasAutoMergeLabel,\n {\n onAdd: async (prLabels) => {\n await autoMergeIfPossible(pr, context, repoContext, prLabels);\n },\n onRemove: async () => {\n await repoContext.removePrFromAutomergeQueue(context, pr.number);\n },\n },\n ),\n ]);\n\n if (!automergeLabel) {\n return { skipAutoMerge: true };\n }\n }\n\n return { skipAutoMerge: false };\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { RepoContext } from '../../context/repoContext';\nimport createStatus from './utils/createStatus';\n\nconst addStatusCheck = async function<\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n { state, description }: { state: 'failure' | 'success'; description: string },\n previousSha?: string,\n): Promise {\n const hasPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check) => check.name === process.env.REVIEWFLOW_NAME,\n );\n\n context.log.info('add status check', { hasPrCheck, state, description });\n\n if (hasPrCheck) {\n await context.github.checks.create(\n context.repo({\n name: process.env.REVIEWFLOW_NAME as string,\n head_sha: pr.head.sha,\n started_at: pr.created_at,\n status: 'completed',\n conclusion: state,\n completed_at: new Date().toISOString(),\n output: {\n title: description,\n summary: '',\n },\n }),\n );\n } else if (previousSha && state === 'failure') {\n await Promise.all([\n createStatus(\n context,\n '',\n previousSha,\n 'success',\n 'New commits have been pushed',\n ),\n createStatus(context, '', pr.head.sha, state, description),\n ]);\n } else {\n await createStatus(context, '', pr.head.sha, state, description);\n }\n};\n\nexport const updateStatusCheckFromLabels = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n labels: LabelResponse[] = pr.labels || [],\n previousSha?: string,\n): Promise => {\n context.log.info('updateStatusCheckFromLabels', {\n labels: labels.map((l) => l && l.name),\n hasNeedsReview: repoContext.hasNeedsReview(labels),\n hasApprovesReview: repoContext.hasApprovesReview(labels),\n });\n\n const createFailedStatusCheck = (description: string): Promise =>\n addStatusCheck(\n pr,\n context,\n {\n state: 'failure',\n description,\n },\n previousSha,\n );\n\n if (pr.requested_reviewers.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${pr.requested_reviewers\n .map((rr: any) => rr.login)\n .join(', ')}`,\n );\n }\n\n if (repoContext.hasChangesRequestedReview(labels)) {\n return createFailedStatusCheck(\n 'Changes requested ! Push commits or discuss changes then re-request a review.',\n );\n }\n\n const needsReviewGroupNames = repoContext.getNeedsReviewGroupNames(labels);\n\n if (needsReviewGroupNames.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${needsReviewGroupNames.join(\n ', ',\n )}. Perhaps request someone ?`,\n );\n }\n\n if (!repoContext.hasApprovesReview(labels)) {\n if (repoContext.config.requiresReviewRequest) {\n return createFailedStatusCheck(\n 'Awaiting review... Perhaps request someone ?',\n );\n }\n }\n\n // if (\n // repoContext.config.requiresReviewRequest &&\n // !repoContext.hasRequestedReview(labels)\n // ) {\n // return createFailedStatusCheck(\n // context,\n // pr,\n // 'You need to request someone to review the PR',\n // );\n // return;\n // }\n // return createInProgressStatusCheck(context);\n // } else if (repoContext.hasApprovesReview(labels)) {\n return addStatusCheck(\n pr,\n context,\n {\n state: 'success',\n description: '✓ PR ready to merge !',\n },\n previousSha,\n );\n // }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { GroupLabels } from '../../orgsConfigs/types';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateStatusCheckFromLabels } from './updateStatusCheckFromLabels';\n\nexport const updateReviewStatus = async <\n E extends Webhooks.WebhookPayloadPullRequest,\n GroupNames extends string = any\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n reviewGroup: GroupNames,\n {\n add: labelsToAdd,\n remove: labelsToRemove,\n }: {\n add?: (GroupLabels | false | undefined)[];\n remove?: (GroupLabels | false | undefined)[];\n },\n): Promise => {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n labelsToAdd,\n labelsToRemove,\n });\n\n let prLabels: LabelResponse[] = pr.labels || [];\n if (!reviewGroup) return prLabels;\n\n const newLabelNames = new Set(\n prLabels.map((label: LabelResponse) => label.name),\n );\n\n const toAdd = new Set();\n const toAddNames = new Set();\n const toDelete = new Set();\n const toDeleteNames = new Set();\n const labels = repoContext.labels;\n\n const getLabelFromKey = (key: GroupLabels): undefined | LabelResponse => {\n const reviewConfig = repoContext.config.labels.review[reviewGroup];\n if (!reviewConfig) return undefined;\n\n return reviewConfig[key] && labels[reviewConfig[key]]\n ? labels[reviewConfig[key]]\n : undefined;\n };\n\n if (labelsToAdd) {\n labelsToAdd.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label || prLabels.some((prLabel) => prLabel.id === label.id)) {\n return;\n }\n newLabelNames.add(label.name);\n toAdd.add(key);\n toAddNames.add(label.name);\n });\n }\n\n if (labelsToRemove) {\n labelsToRemove.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label) return;\n const existing = prLabels.find((prLabel) => prLabel.id === label.id);\n if (existing) {\n newLabelNames.delete(existing.name);\n toDelete.add(key);\n toDeleteNames.add(existing.name);\n }\n });\n }\n\n // TODO move that elsewhere\n\n repoContext.getTeamsForLogin(pr.user.login).forEach((teamName) => {\n const team = repoContext.config.teams[teamName];\n if (team.labels) {\n team.labels.forEach((labelKey) => {\n const label = repoContext.labels[labelKey];\n if (label && !prLabels.some((prLabel) => prLabel.id === label.id)) {\n newLabelNames.add(label.name);\n toAdd.add(labelKey);\n toAddNames.add(label.name);\n }\n });\n }\n });\n\n // if (process.env.DRY_RUN) return;\n\n if (toAdd.size !== 0 || toDelete.size !== 0) {\n if (toDelete.size === 0 || toDelete.size < 4) {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n toAddNames: [...toAddNames],\n toDeleteNames: [...toDeleteNames],\n });\n\n if (toAdd.size !== 0) {\n const result = await context.github.issues.addLabels(\n context.issue({\n labels: [...toAddNames],\n }),\n );\n prLabels = result.data;\n }\n\n if (toDelete.size !== 0) {\n for (const toDeleteName of [...toDeleteNames]) {\n try {\n const result = await context.github.issues.removeLabel(\n context.issue({\n name: toDeleteName,\n }),\n );\n prLabels = result.data;\n } catch (err) {\n context.log.warn('error removing label', {\n err: err && err.message,\n });\n }\n }\n }\n } else {\n const newLabelNamesArray = [...newLabelNames];\n\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n oldLabels: prLabels.map((l: LabelResponse) => l.name),\n newLabelNames: newLabelNamesArray,\n });\n\n const result = await context.github.issues.replaceLabels(\n context.issue({\n labels: newLabelNamesArray,\n }),\n );\n prLabels = result.data;\n }\n }\n\n // if (toAdd.has('needsReview')) {\n // createInProgressStatusCheck(context);\n // } else if (\n // toDelete.has('needsReview') ||\n // (prLabels.length === 0 && toAdd.size === 1 && toAdd.has('approved'))\n // ) {\n await updateStatusCheckFromLabels(pr, context, repoContext, prLabels);\n // }\n\n return prLabels;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nexport const autoApproveAndAutoMerge = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n): Promise => {\n // const autoMergeLabel = repoContext.labels['merge/automerge'];\n const codeApprovedLabel = repoContext.labels['code/approved'];\n if (hasLabelInPR(pr.labels, codeApprovedLabel)) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n await autoMergeIfPossible(pr, context, repoContext);\n return true;\n }\n\n return false;\n};\n","import Webhooks from '@octokit/webhooks';\nimport parse from '@commitlint/parse';\nimport { PRHandler } from '../utils';\nimport syncLabel from './utils/syncLabel';\nimport { updateBodyCommitsNotes } from './utils/updateBody';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const readCommitsAndUpdateInfos: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n // tmp.data[0].sha\n // tmp.data[0].commit.message\n\n const commits = await context.github.paginate(\n context.github.pulls.listCommits(\n context.issue({\n // A custom page size up to 100. Default is 30.\n per_page: 100,\n }),\n ),\n (res) => res.data,\n );\n\n const conventionalCommits = await Promise.all(\n commits.map((c) => parse(c.commit.message)),\n );\n\n const breakingChangesCommits: any = conventionalCommits.reduce(\n (acc, c, index) => {\n const breakingChangesNotes = c.notes.filter(\n (note: any) => note.title === 'BREAKING CHANGE',\n );\n if (breakingChangesNotes.length !== 0) {\n acc.push({ commit: commits[index], breakingChangesNotes });\n }\n\n return acc;\n },\n [],\n );\n\n const breakingChangesLabel = repoContext.labels['breaking-changes'];\n const newBody = updateBodyCommitsNotes(\n pr.body,\n breakingChangesCommits.length === 0\n ? ''\n : `Breaking Changes:\\n${breakingChangesCommits\n .map(({ commit, breakingChangesNotes }: any) =>\n breakingChangesNotes.map(\n (note: any) =>\n `- ${note.text.replace('\\n', ' ')} (${commit.sha})`,\n ),\n )\n .join('')}`,\n );\n\n await Promise.all([\n syncLabel(\n pr,\n context,\n breakingChangesCommits.length !== 0,\n breakingChangesLabel,\n ),\n updatePrIfNeeded(pr, context, repoContext, { body: newBody }),\n ]);\n\n // TODO auto update ! in front of : to signal a breaking change when https://github.com/conventional-changelog/commitlint/issues/658 is closed\n};\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoAssignPRToCreator } from './actions/autoAssignPRToCreator';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { autoApproveAndAutoMerge } from './actions/autoApproveAndAutoMerge';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function opened(app: Application): void {\n app.on(\n 'pull_request.opened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const fromRenovate = pr.head.ref.startsWith('renovate/');\n\n await Promise.all([\n autoAssignPRToCreator(pr, context, repoContext),\n editOpenedPR(pr, context, repoContext).then(() => {\n return readCommitsAndUpdateInfos(pr, context, repoContext);\n }),\n fromRenovate\n ? autoApproveAndAutoMerge(pr, context, repoContext).then(\n async (approved: boolean): Promise => {\n if (!approved) {\n await updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n });\n }\n },\n )\n : updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved', 'changesRequested'],\n }),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { parseBodyWithOptions } from './actions/utils/parseBody';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.closed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const repo = context.payload.repository;\n\n if (pr.merged) {\n const parsedBody =\n pr.head.repo.id === repo.id &&\n parseBodyWithOptions(pr.body, repoContext.config.prDefaultOptions);\n\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n parsedBody && parsedBody.options.deleteAfterMerge\n ? context.github.git\n .deleteRef(context.repo({ ref: `heads/${pr.head.ref}` }))\n .catch(() => {})\n : undefined,\n ]);\n } else {\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n updateReviewStatus(pr, context, repoContext, 'dev', {\n remove: ['needsReview'],\n }),\n ]);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.reopened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n await Promise.all([\n updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved'],\n }),\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequested(app: Application): void {\n app.on(\n 'pull_request.review_requested',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n\n // ignore if sender is self (dismissed review rerequest review)\n if (sender.type === 'Bot') return;\n\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n const shouldWait = false;\n // repoContext.reviewShouldWait(reviewerGroup, pr.requested_reviewers, { includesWaitForGroups: true });\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup &&\n review.state === 'REQUEST_CHANGES' &&\n // In case this is a rerequest for review\n review.user.login !== reviewer.login,\n );\n\n if (!hasChangesRequestedInReviews) {\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', !shouldWait && 'requested'],\n remove: ['approved', 'changesRequested'],\n });\n }\n }\n\n if (sender.login === reviewer.login) return;\n\n if (!shouldWait && repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:eyes: ${repoContext.slack.mention(\n sender.login,\n )} requests your review on ${repoContext.slack.prLink(\n pr,\n context,\n )} !\\n> ${pr.title}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequestRemoved(app: Application): void {\n app.on(\n 'pull_request.review_request_removed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n },\n );\n\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const hasApprovedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'APPROVED',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n hasApprovedInReviews;\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: [\n // if changes requested by the one which requests was removed\n hasChangesRequestedInReviews && 'changesRequested',\n // if was already approved by another member in the group and has no other requests waiting\n approved && 'approved',\n ],\n // remove labels if has no other requests waiting\n remove: [\n approved && 'needsReview',\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n 'requested',\n ],\n });\n }\n\n if (sender.login === reviewer.login) return;\n\n if (repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull_and_crossbones: ${repoContext.slack.mention(\n sender.login,\n )} removed the request for your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewSubmitted(app: Application): void {\n app.on(\n 'pull_request_review.submitted',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const { user: reviewer, state } = (context.payload as any).review;\n if (pr.user.login === reviewer.login) return;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n let merged;\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n // TODO reenable this when accepted can notify request review to slack (dev accepted => design requested) and flag to disable for label (approved design ; still waiting for dev ?)\n // includesWaitForGroups: true,\n },\n );\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n state === 'approved';\n\n const newLabels = await updateReviewStatus(\n pr,\n context,\n repoContext,\n reviewerGroup,\n {\n add: [\n approved && 'approved',\n state === 'changes_requested' && 'changesRequested',\n ],\n remove: [\n approved && 'needsReview',\n !(\n hasRequestedReviewsForGroup || state === 'changes_requested'\n ) && 'requested',\n state === 'approved' &&\n !hasChangesRequestedInReviews &&\n 'changesRequested',\n state === 'changes_requested' && 'approved',\n ],\n },\n );\n\n if (approved && !hasChangesRequestedInReviews) {\n merged = await autoMergeIfPossible(\n pr,\n context,\n repoContext,\n newLabels,\n );\n }\n }\n\n const mention = repoContext.slack.mention(reviewer.login);\n const prUrl = repoContext.slack.prLink(pr, context);\n\n const message = (() => {\n if (state === 'changes_requested') {\n return `:x: ${mention} requests changes on ${prUrl}`;\n }\n if (state === 'approved') {\n return `:clap: :white_check_mark: ${mention} approves ${prUrl}${\n merged ? ' and PR is merged :tada:' : ''\n }`;\n }\n return `:speech_balloon: ${mention} commented on ${prUrl}`;\n })();\n\n repoContext.slack.postMessage(pr.user.login, message);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewDismissed(app: Application): void {\n app.on(\n 'pull_request_review.dismissed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).review.user;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', 'requested'],\n remove: [\n !hasChangesRequestedInReviews && 'changesRequested',\n 'approved',\n ],\n });\n }\n\n if (repoContext.slack) {\n if (sender.login === reviewer.login) {\n repoContext.slack.postMessage(\n pr.user.login,\n `:skull: ${repoContext.slack.mention(\n reviewer.login,\n )} dismissed his review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n } else {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull: ${repoContext.slack.mention(\n sender.login,\n )} dismissed your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function synchronize(app: Application): void {\n app.on(\n 'pull_request.synchronize',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n // old and new sha\n // const { before, after } = context.payload;\n const previousSha = (context.payload as any).before as string;\n\n await Promise.all([\n editOpenedPR(pr, context, repoContext, previousSha),\n // addStatusCheckToLatestCommit\n updateStatusCheckFromLabels(\n pr,\n context,\n repoContext,\n pr.labels,\n previousSha,\n ),\n\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n\n // call autoMergeIfPossible to re-add to the queue when push is fixed\n await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function edited(app: Application): void {\n app.on(\n 'pull_request.edited',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n if (\n sender.type === 'Bot' &&\n sender.login === `${process.env.REVIEWFLOW_NAME}[bot]`\n ) {\n return;\n }\n\n const { skipAutoMerge } = await editOpenedPR(pr, context, repoContext);\n if (!skipAutoMerge) await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateBody } from './utils/updateBody';\nimport { Options } from './utils/prOptions';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const updatePrBody = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n updateOptions: Partial>,\n): Promise => {\n const { body } = updateBody(\n pr.body,\n repoContext.config.prDefaultOptions,\n undefined,\n updateOptions,\n );\n\n await updatePrIfNeeded(pr, context, repoContext, { body });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { handlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { updatePrBody } from './actions/updatePrBody';\nimport hasLabelInPR from './actions/utils/hasLabelInPR';\n\nexport default function labelsChanged(app: Application): void {\n app.on(\n ['pull_request.labeled', 'pull_request.unlabeled'],\n async (context: Context) => {\n const sender = context.payload.sender;\n const fromRenovate =\n sender.type === 'Bot' && sender.login === 'renovate[bot]';\n context.payload.pull_request.head.ref.startsWith('renovate/');\n\n if (sender.type === 'Bot' && !fromRenovate) {\n return;\n }\n\n await handlerPullRequestChange(context, async (pr, repoContext) => {\n const label = (context.payload as any).label;\n if (fromRenovate) {\n const codeApprovedLabel = repoContext.labels['code/approved'];\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n const autoMergeSkipCiLabel = repoContext.labels['merge/skip-ci'];\n if (context.payload.action === 'labeled') {\n if (codeApprovedLabel && label.id === codeApprovedLabel.id) {\n // const { data: reviews } = await context.github.pulls.listReviews(\n // context.issue({ per_page: 1 }),\n // );\n // if (reviews.length !== 0) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n if (autoMergeSkipCiLabel) {\n await context.github.issues.addLabels(\n context.issue({ labels: [autoMergeSkipCiLabel.name] }),\n );\n }\n await updateStatusCheckFromLabels(pr, context, repoContext);\n await updatePrBody(pr, context, repoContext, {\n autoMergeWithSkipCi: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n autoMerge: hasLabelInPR(pr.labels, autoMergeLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMerge,\n });\n // }\n } else if (autoMergeLabel && label.id === autoMergeLabel.id) {\n await updatePrBody(pr, context, repoContext, {\n autoMerge: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n // Note: si c'est renovate qui ajoute le label autoMerge, le label codeApprovedLabel n'aurait pu etre ajouté que par renovate également (on est a quelques secondes de l'ouverture de la pr par renovate)\n autoMergeWithSkipCi: hasLabelInPR(pr.labels, codeApprovedLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMergeWithSkipCi,\n });\n }\n await autoMergeIfPossible(pr, context, repoContext);\n }\n return;\n }\n\n if (repoContext.protectedLabelIds.includes(label.id)) {\n if (context.payload.action === 'labeled') {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n } else {\n await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n }\n return;\n }\n\n await updateStatusCheckFromLabels(pr, context, repoContext);\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const option = (() => {\n if (featureBranchLabel && label.id === featureBranchLabel.id)\n return 'featureBranch';\n if (automergeLabel && label.id === automergeLabel.id)\n return 'autoMerge';\n if (skipCiLabel && label.id === skipCiLabel.id)\n return 'autoMergeWithSkipCi';\n return null;\n })();\n\n if (option) {\n await updatePrBody(pr, context, repoContext, {\n [option]: context.payload.action === 'labeled',\n });\n } else if (context.payload.action === 'labeled') {\n if (\n repoContext.labels['merge/automerge'] &&\n label.id === repoContext.labels['merge/automerge'].id\n ) {\n await autoMergeIfPossible(pr, context, repoContext);\n }\n }\n });\n },\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checkrunCompleted(app: Application): void {\n app.on(\n 'check_run.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_run.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_run.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checksuiteCompleted(app: Application): void {\n app.on(\n 'check_suite.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_suite.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_suite.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { LockedMergePr } from '../context/repoContext';\nimport { createHandlerPullRequestsChange } from './utils';\n\nconst isSameBranch = (\n context: Context,\n lockedPr: LockedMergePr,\n): boolean => {\n if (!lockedPr) return false;\n return !!context.payload.branches.find((b) => b.name === lockedPr.branch);\n};\n\nexport default function status(app: Application): void {\n app.on(\n 'status',\n createHandlerPullRequestsChange(\n (context, repoContext): LockedMergePr[] => {\n const lockedPr = repoContext.getMergeLockedPr();\n if (!lockedPr) return [];\n\n if (\n context.payload.state !== 'loading' &&\n isSameBranch(context, lockedPr)\n ) {\n return [lockedPr];\n }\n\n return [];\n },\n (context, repoContext): void => {\n const lockedPr = repoContext.getMergeLockedPr();\n // check if changed\n if (isSameBranch(context, lockedPr)) {\n repoContext.reschedule(context, lockedPr);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport openedHandler from './pr-handlers/opened';\nimport closedHandler from './pr-handlers/closed';\nimport reopenedHandler from './pr-handlers/reopened';\nimport reviewRequestedHandler from './pr-handlers/reviewRequested';\nimport reviewRequestRemovedHandler from './pr-handlers/reviewRequestRemoved';\nimport reviewSubmittedHandler from './pr-handlers/reviewSubmitted';\nimport reviewDismissedHandler from './pr-handlers/reviewDismissed';\nimport synchromizeHandler from './pr-handlers/synchronize';\nimport editedHandler from './pr-handlers/edited';\nimport labelsChanged from './pr-handlers/labelsChanged';\nimport checkrunCompleted from './pr-handlers/checkrunCompleted';\nimport checksuiteCompleted from './pr-handlers/checksuiteCompleted';\nimport status from './pr-handlers/status';\n\nexport default function initApp(app: Application): void {\n openedHandler(app);\n closedHandler(app);\n reopenedHandler(app);\n reviewRequestedHandler(app);\n reviewRequestRemovedHandler(app);\n\n // app.on('pull_request.closed', async context => {\n\n // });\n\n // app.on('pull_request.reopened', async context => {\n\n // });\n\n reviewSubmittedHandler(app);\n reviewDismissedHandler(app);\n labelsChanged(app);\n synchromizeHandler(app);\n editedHandler(app);\n\n checkrunCompleted(app);\n checksuiteCompleted(app);\n status(app);\n}\n","import 'dotenv/config';\nimport { Probot, Application } from 'probot';\nimport mongoInit from './mongo';\nimport appRouter from './appRouter';\nimport initApp from './initApp';\n\nif (!process.env.REVIEWFLOW_NAME) process.env.REVIEWFLOW_NAME = 'reviewflow';\nconsole.log({ name: process.env.REVIEWFLOW_NAME });\n\n// const getConfig = require('probot-config')\n// const { MongoClient } = require('mongodb');\n\n// const connect = MongoClient.connect(process.env.MONGO_URL);\n// const db = connect.then(client => client.db(process.env.MONGO_DB));\n\n// let config = await getConfig(context, 'reviewflow.yml');\n\n// eslint-disable-next-line import/no-commonjs\nProbot.run(\n (app: Application): void => {\n const mongoStores = mongoInit();\n appRouter(app, mongoStores);\n initApp(app);\n },\n);\n"],"names":["process","env","MONGO_DB","Error","init","config","Map","MONGO_HOST","MONGO_PORT","MONGO_USER","set","MONGO_PASSWORD","connection","MongoConnection","Layout","lang","title","NAME","children","GITHUB_CLIENT_ID","GITHUB_CLIENT_SECRET","oauth2","create","client","id","secret","auth","tokenHost","tokenPath","authorizePath","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","AUTH_SECRET_KEY","signPromisified","sign","verifyPromisified","verify","secure","SECURE_COOKIE","createRedirectUri","req","strategy","host","hostname","PORT","readAuthCookie","cookie","cookies","algorithm","audience","headers","appRouter","app","router","route","api","use","cookieParser","get","res","redirect","authInfo","octokit","Octokit","accessToken","data","repos","list","per_page","send","renderToStaticMarkup","map","repo","owner","login","name","length","state","maxAge","httpOnly","redirectUri","githubAuth","authorizationCode","authorizeURL","redirect_uri","scope","query","error","error_description","code","cookieName","clearCookie","result","getToken","access_token","user","users","getAuthenticated","token","time","Date","now","expiresIn","params","repository","status","permissions","admin","data2","apps","getRepoInstallation","catch","err","undefined","REVIEWFLOW_NAME","slackToken","ORNIKAR_SLACK_TOKEN","autoAssignToCreator","trimTitle","ignoreRepoPattern","requiresReviewRequest","prDefaultOptions","featureBranch","autoMergeWithSkipCi","autoMerge","deleteAfterMerge","parsePR","regExp","summary","bot","statusInfoFromMatch","match","issue","inBody","url","groups","dev","JulienBreux","ORNIKAR_EMAIL_DOMAIN","CamilSadiki","busser","abarreir","arthurflachs","damienorny","darame07","Pixy","Radyum","christophehurpeau","HugoGarrido","LentnerStefan","CorentinAndre","Mxime","vlbr","mdcarter","design","jperriere","CoralineColasse","Lenamari","teams","ops","logins","labels","backends","frontends","waitForGroups","color","description","duplicate","documentation","rfc","bug","enhancement","question","wontfix","review","ci","inProgress","succeeded","failed","needsReview","requested","changesRequested","approved","tilap","orgsConfigs","ornikar","options","optionsRegexps","option","regexp","RegExp","optionsLabels","label","commentStart","commentEnd","regexpCols","regexpReviewflowCol","parseOptions","content","defaultConfig","reduce","acc","exec","parseBody","reviewFlowCol","reviewflowContent","ending","reviewFlowColMatch","reviewflowContentCol","reviewflowContentColPrefix","reviewflowContentColSuffix","parseBodyWithOptions","parsedBody","breakingChanges","replace","trim","hasLabelInPR","prLabels","some","l","hasFailedStatusOrChecks","pr","context","checks","github","listForRef","ref","head","sha","failedChecks","check_runs","filter","check","conclusion","log","info","combinedStatus","getCombinedStatusForRef","failedStatuses","statuses","autoMergeIfPossible","repoContext","autoMergeLabel","debug","prId","prNumber","number","removePrFromAutomergeQueue","createMergeLockPrFromPr","branch","hasNeedsReview","hasRequestedReview","lockedPr","getMergeLockedPr","pushAutomergeQueue","addMergeLockPr","mergeable","prResult","pulls","pull_number","merged","mergeable_state","reschedule","startsWith","body","includes","renovateRebaseBody","issues","update","base","merge","mergeResult","merge_method","commit_title","commit_message","Boolean","message","getLabelsForRepo","listLabelsForRepo","initRepoLabels","finalLabels","labelKey","labelConfig","Object","entries","labelColor","slice","existingLabel","find","createLabel","current_name","updateLabel","getKeys","o","keys","ExcludesFalsy","voidTeamSlack","mention","postMessage","Promise","resolve","prLink","initTeamSlack","githubLoginToSlackEmail","groupName","assign","slackClient","WebClient","allUsers","limit","members","values","email","member","profile","console","warn","im","open","channel","membersMap","getUserFromGithubLogin","githubLogin","text","DRY_RUN","chat","username","html_url","payload","initTeamContext","slackPromise","githubLoginToGroup","forEach","githubLoginToTeams","teamName","push","getReviewerGroups","githubLogins","Set","getReviewerGroup","getTeamsForLogin","reviewShouldWait","reviewerGroup","requestedReviewers","includesReviewerGroup","includesWaitForGroups","requestedReviewerGroups","request","group","slack","orgContextsPromise","orgContexts","obtainOrgContext","existingTeamContext","existingPromise","promise","then","orgContext","delete","initRepoContext","reviewGroupNames","needsReviewLabelIds","key","requestedReviewLabelIds","changesRequestedLabelIds","approvedReviewLabelIds","protectedLabelIds","labelIdToGroupName","reviewGroupLabels","lock","Lock","lockMergePr","automergeQueue","lockPROrPRS","prIdOrIds","prNumberOrPrNumbers","callback","reject","logInfos","repoName","createReleaseCallback","release","setTimeout","String","hasChangesRequestedReview","hasApprovesReview","getNeedsReviewGroupNames","shift","value","p","repoContextsPromise","repoContexts","shouldIgnoreRepo","orgConfig","ignoreRepoRegexp","test","obtainRepoContext","existingRepoContext","handlerPullRequestChange","pull_request","createHandlerPullRequestChange","createHandlerPullRequestsChange","getPullRequests","prs","autoAssignPRToCreator","assignees","type","addAssignees","cleanTitle","s","arg1","arg2","toUpperCase","toLowerCase","toMarkdownOptions","join","toMarkdownInfos","infos","updateBody","updateOptions","parsed","infosAndCommitNotesParagraph","updatedOptions","updateBodyCommitsNotes","commitNotes","reviewflowContentColReplaced","updatePrIfNeeded","hasDiffInTitle","hasDiffInBody","diff","syncLabel","shouldHaveLabel","prHasLabel","onRemove","onAdd","removeLabel","response","addLabels","createStatus","target_url","editOpenedPR","previousSha","skipAutoMerge","isPrFromBot","errorRule","rule","date","toISOString","hasLintPrCheck","all","head_sha","started_at","completed_at","output","featureBranchLabel","automergeLabel","skipCiLabel","prHasFeatureBranchLabel","prHasSkipCiLabel","prHasAutoMergeLabel","defaultOptions","addStatusCheck","hasPrCheck","created_at","updateStatusCheckFromLabels","createFailedStatusCheck","requested_reviewers","rr","needsReviewGroupNames","updateReviewStatus","reviewGroup","add","labelsToAdd","remove","labelsToRemove","newLabelNames","toAdd","toAddNames","toDelete","toDeleteNames","getLabelFromKey","reviewConfig","prLabel","existing","team","toDeleteName","newLabelNamesArray","oldLabels","replaceLabels","autoApproveAndAutoMerge","codeApprovedLabel","createReview","event","readCommitsAndUpdateInfos","commits","paginate","listCommits","conventionalCommits","c","parse","commit","breakingChangesCommits","index","breakingChangesNotes","notes","note","breakingChangesLabel","newBody","opened","on","fromRenovate","closed","git","deleteRef","reviewRequested","sender","reviewer","requested_reviewer","reviews","listReviews","hasChangesRequestedInReviews","reviewRequestRemoved","hasRequestedReviewsForGroup","hasApprovedInReviews","reviewSubmitted","newLabels","prUrl","reviewDismissed","synchronize","before","edited","updatePrBody","labelsChanged","autoMergeSkipCiLabel","action","checkrunCompleted","check_run","pull_requests","checksuiteCompleted","check_suite","isSameBranch","branches","b","initApp","openedHandler","closedHandler","reopenedHandler","reviewRequestedHandler","reviewRequestRemovedHandler","reviewSubmittedHandler","reviewDismissedHandler","synchromizeHandler","editedHandler","Probot","run","mongoStores","mongoInit"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index-node10.cjs.js","sources":["../src/mongo.ts","../src/views/Layout.tsx","../src/auth/github.ts","../src/utils/random.ts","../src/appRouter.tsx","../src/orgsConfigs/ornikar.ts","../src/orgsConfigs/christophehurpeau.ts","../src/orgsConfigs/index.ts","../src/pr-handlers/actions/utils/prOptions.ts","../src/pr-handlers/actions/utils/parseBody.ts","../src/pr-handlers/actions/utils/hasLabelInPR.ts","../src/pr-handlers/actions/autoMergeIfPossible.ts","../src/context/initRepoLabels.ts","../src/context/utils.ts","../src/context/initTeamSlack.ts","../src/context/orgContext.ts","../src/context/repoContext.ts","../src/pr-handlers/utils.ts","../src/pr-handlers/actions/autoAssignPRToCreator.ts","../src/pr-handlers/actions/utils/cleanTitle.ts","../src/pr-handlers/actions/utils/updateBody.ts","../src/pr-handlers/actions/updatePr.ts","../src/pr-handlers/actions/utils/syncLabel.ts","../src/pr-handlers/actions/utils/createStatus.ts","../src/pr-handlers/actions/editOpenedPR.ts","../src/pr-handlers/actions/updateStatusCheckFromLabels.ts","../src/pr-handlers/actions/updateReviewStatus.ts","../src/pr-handlers/actions/autoApproveAndAutoMerge.ts","../src/pr-handlers/actions/readCommitsAndUpdateInfos.ts","../src/pr-handlers/opened.ts","../src/pr-handlers/closed.ts","../src/pr-handlers/reopened.ts","../src/pr-handlers/reviewRequested.ts","../src/pr-handlers/reviewRequestRemoved.ts","../src/pr-handlers/reviewSubmitted.ts","../src/pr-handlers/reviewDismissed.ts","../src/pr-handlers/synchronize.ts","../src/pr-handlers/edited.ts","../src/pr-handlers/actions/updatePrBody.ts","../src/pr-handlers/labelsChanged.ts","../src/pr-handlers/checkrunCompleted.ts","../src/pr-handlers/checksuiteCompleted.ts","../src/pr-handlers/status.ts","../src/initApp.ts","../src/index.ts"],"sourcesContent":["// import { MongoStore, MongoConnection, MongoModel } from 'liwi-mongo';\nimport { MongoConnection } from 'liwi-mongo';\n\n// export interface PrEventsModel extends MongoModel {\n// owner: string;\n// repo: string;\n// prId: string;\n// prNumber: string;\n// event: string;\n// }\n\nexport interface MongoStores {\n connection: MongoConnection;\n // prEvents: MongoStore;\n}\n\nif (!process.env.MONGO_DB) {\n throw new Error('MONGO_DB is missing in process.env');\n}\n\nexport default function init(): MongoStores {\n const config = new Map([\n ['host', process.env.MONGO_HOST || 'localhost'],\n ['port', process.env.MONGO_PORT || '27017'],\n ['database', process.env.MONGO_DB as string],\n ]);\n if (process.env.MONGO_USER) {\n config.set('user', process.env.MONGO_USER);\n config.set('password', process.env.MONGO_PASSWORD as string);\n }\n const connection = new MongoConnection(config);\n\n // const prEvents = new MongoStore(connection, 'prEvents');\n // prEvents.collection.then((coll) => {\n // coll.createIndex({ owner: 1, repo: 1, ???: 1 });\n // });\n\n // return { connection, prEvents };\n return { connection };\n}\n","import React from 'react';\n\ninterface LayoutProps {\n lang?: string;\n title?: string;\n children: React.ReactNode;\n}\n\nexport default function Layout({\n lang = 'en',\n title = process.env.NAME,\n children,\n}: LayoutProps) {\n return (\n \n \n \n \n {title}\n \n \n \n {children}\n \n );\n}\n","import { create } from 'simple-oauth2';\n\nif (!process.env.GITHUB_CLIENT_ID) {\n throw new Error('Missing env variable: GITHUB_CLIENT_ID');\n}\n\nif (!process.env.GITHUB_CLIENT_SECRET) {\n throw new Error('Missing env variable: GITHUB_CLIENT_SECRET');\n}\n\nexport const oauth2 = create({\n client: {\n id: process.env.GITHUB_CLIENT_ID,\n secret: process.env.GITHUB_CLIENT_SECRET,\n },\n auth: {\n tokenHost: 'https://github.com',\n tokenPath: '/login/oauth/access_token',\n authorizePath: '/login/oauth/authorize',\n },\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable max-lines */\n\nimport { promisify } from 'util';\nimport { Request, Response } from 'express';\nimport { Octokit, Application } from 'probot';\nimport cookieParser from 'cookie-parser';\nimport { sign, verify } from 'jsonwebtoken';\nimport React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { MongoStores } from './mongo';\nimport Layout from './views/Layout';\nimport * as githubAuth from './auth/github';\nimport { randomHex } from './utils/random';\n\nif (!process.env.AUTH_SECRET_KEY) {\n throw new Error('Missing env variable: AUTH_SECRET_KEY');\n}\n\nconst AUTH_SECRET_KEY: string = process.env.AUTH_SECRET_KEY;\n\nconst signPromisified: any = promisify(sign);\nconst verifyPromisified: any = promisify(verify);\n\nconst secure =\n !!process.env.SECURE_COOKIE && process.env.SECURE_COOKIE !== 'false';\n\nconst createRedirectUri = (req: Request, strategy: string) => {\n const host = `http${secure ? 's' : ''}://${req.hostname}${\n req.hostname === 'localhost' ? `:${process.env.PORT}` : ''\n }`;\n return `${host}/app/${strategy}/login-response`;\n};\n\ninterface AuthInfo {\n login: string;\n accessToken: string;\n time: number;\n}\n\nconst readAuthCookie = (\n req: Request,\n strategy: string,\n): undefined | Promise => {\n const cookie = req.cookies[`auth_${strategy}`];\n if (!cookie) return;\n\n return verifyPromisified(cookie, AUTH_SECRET_KEY, {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n });\n};\n\nexport default async function appRouter(\n app: Application,\n mongoStuff: MongoStores,\n): Promise {\n const router = app.route('/app');\n const api = await app.auth();\n router.use(cookieParser());\n\n router.get('/', (req, res) => {\n res.redirect('/gh');\n });\n\n router.get('/gh', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/app/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.list({ per_page: 100 });\n\n res.send(\n renderToStaticMarkup(\n \n
\n

Your repositories

\n
    \n {data.map((repo: any) => (\n
  • \n \n {repo.name}\n \n
  • \n ))}\n
\n
\n {data.length === 100 && (\n
We currently have a limit to 100 repositories
\n )}\n
,\n ),\n );\n });\n\n router.get('/gh/login', async (req: Request, res: Response) => {\n const strategy = 'gh';\n if (await readAuthCookie(req, strategy)) {\n return res.redirect('/app/gh');\n }\n\n const state = await randomHex(8);\n res.cookie(`auth_${strategy}_${state}`, strategy, {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure,\n });\n\n const redirectUri = githubAuth.oauth2.authorizationCode.authorizeURL({\n redirect_uri: createRedirectUri(req, strategy),\n scope: 'read:user,repo',\n state,\n // grant_type: options.grantType,\n // access_type: options.accessType,\n // login_hint: req.query.loginHint,\n // include_granted_scopes: options.includeGrantedScopes,\n });\n\n // console.log(redirectUri);\n\n res.redirect(redirectUri);\n });\n\n router.get('/gh/login-response', async (req, res) => {\n if (req.query.error) {\n res.send(req.query.error_description);\n return;\n }\n\n const strategy = 'gh';\n const code = req.query.code;\n const state = req.query.state;\n const cookieName = `auth_${strategy}_${state}`;\n const cookie = req.cookies && req.cookies[cookieName];\n if (!cookie) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n 'No cookie for this state. Retry ?',\n );\n return;\n }\n res.clearCookie(cookieName);\n\n const result = await githubAuth.oauth2.authorizationCode.getToken({\n code,\n redirect_uri: createRedirectUri(req, strategy),\n });\n\n if (!result) {\n // res.redirect(`/${strategy}/login`);\n res.send(\n renderToStaticMarkup(\n \n
\n Could not get access token. Retry ?\n
\n
,\n ),\n );\n return;\n }\n\n const accessToken = result.access_token;\n const octokit = new Octokit({ auth: `token ${accessToken}` });\n const user = await octokit.users.getAuthenticated({});\n const login = user.data.login;\n\n const token = await signPromisified(\n { login, accessToken, time: Date.now() },\n AUTH_SECRET_KEY,\n {\n algorithm: 'HS512',\n audience: req.headers['user-agent'],\n expiresIn: '10 days',\n },\n );\n\n res.cookie(`auth_${strategy}`, token, {\n httpOnly: true,\n secure,\n });\n\n res.redirect('/gh');\n });\n\n router.get('/gh/repository/:owner/:repository', async (req, res) => {\n const strategy = 'gh';\n const authInfo = await readAuthCookie(req, strategy);\n if (!authInfo) {\n return res.redirect('/gh/login');\n }\n\n const octokit = new Octokit({ auth: `token ${authInfo.accessToken}` });\n const { data } = await octokit.repos.get({\n owner: req.params.owner,\n repo: req.params.repository,\n });\n\n if (!data) {\n return res.status(404).send(\n renderToStaticMarkup(\n \n
repo not found
\n
,\n ),\n );\n }\n\n if (!data.permissions.admin) {\n return res.status(401).send(\n renderToStaticMarkup(\n \n
\n not authorized to see this repo, you need to have admin permission\n
\n
,\n ),\n );\n }\n\n const { data: data2 } = await api.apps\n .getRepoInstallation({\n owner: req.params.owner,\n repo: req.params.repository,\n })\n .catch((err) => {\n return { status: err.status, data: undefined };\n });\n\n if (!data2) {\n return res.send(\n renderToStaticMarkup(\n \n
\n {process.env.REVIEWFLOW_NAME} {\"isn't\"} installed on this repo. Go\n to{' '}\n \n Github Configuration\n {' '}\n to add it.\n
\n
,\n ),\n );\n }\n\n res.send(\n renderToStaticMarkup(\n \n
\n

{req.params.repository}

\n
\n
,\n ),\n );\n });\n}\n","/* eslint-disable max-lines */\n\nimport { Config } from './types';\n\nconst config: Config<'dev' | 'design', 'ops' | 'frontends' | 'backends'> = {\n slackToken: process.env.ORNIKAR_SLACK_TOKEN,\n autoAssignToCreator: true,\n trimTitle: true,\n ignoreRepoPattern: '(infra-.*|devenv)',\n requiresReviewRequest: true,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n {\n bot: false,\n regExp: /\\s([A-Z][A-Z\\d]+-(\\d+)|\\[no issue])$/,\n error: {\n title: 'Title does not have JIRA issue',\n summary: 'The PR title should end with ONK-0000, or [no issue]',\n },\n status: 'jira-issue',\n statusInfoFromMatch: (match) => {\n const issue = match[1];\n if (issue === '[no issue]') {\n return {\n title: 'No issue',\n summary: '',\n };\n }\n return {\n inBody: true,\n url: `https://ornikar.atlassian.net/browse/${issue}`,\n title: `JIRA issue: ${issue}`,\n summary: `[${issue}](https://ornikar.atlassian.net/browse/${issue})`,\n };\n },\n },\n ],\n },\n\n groups: {\n dev: {\n /* ops */\n JulienBreux: `julien.breux${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Alan-pad': null,\n CamilSadiki: null,\n busser: null,\n\n /* back */\n abarreir: `alexandre${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n arthurflachs: `arthur${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n damienorny: `damien.orny${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'Thierry-girod': `thierry${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n darame07: `kevin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Pixy: `pierre-alexis${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Radyum: `romain.reynaud${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n\n /* front */\n christophehurpeau: `christophe${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n HugoGarrido: `hugo${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n LentnerStefan: `stefan${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CorentinAndre: `corentin${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Mxime: `maxime${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n vlbr: `valerian${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'budet-b': `benjamin.budet${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n mdcarter: `maxime.dehaye${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n design: {\n jperriere: `julien${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n CoralineColasse: `coraline${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n Lenamari: `lena${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n 'AlexisRiols-Ornikar': `alexis.riols${process.env.ORNIKAR_EMAIL_DOMAIN}`,\n },\n },\n\n teams: {\n ops: {\n logins: ['JulienBreux', 'Alan-pad', 'CamilSadiki', 'busser'],\n labels: ['teams/ops'],\n },\n\n backends: {\n logins: [\n 'abarreir',\n 'arthurflachs',\n 'damienorny',\n 'Thierry-girod',\n 'darame07',\n 'Pixy',\n 'Radyum',\n ],\n labels: ['teams/backend'],\n },\n\n frontends: {\n logins: [\n 'christophehurpeau',\n 'HugoGarrido',\n 'LentnerStefan',\n 'CorentinAndre',\n 'Mxime',\n 'vlbr',\n 'budet-b',\n 'mdcarter',\n ],\n labels: ['teams/frontend'],\n },\n },\n\n waitForGroups: {\n dev: [],\n design: ['dev'],\n },\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFC44C',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#DAE1E6',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* design */\n 'design/needs-review': {\n name: ':art: design/needs-review',\n color: '#FFC44C',\n },\n 'design/review-requested': {\n name: ':art: design/review-requested',\n color: '#DAE1E6',\n },\n 'design/changes-requested': {\n name: ':art: design/changes-requested',\n color: '#e11d21',\n },\n 'design/approved': {\n name: ':art: design/approved',\n color: '#64DD17',\n },\n\n /* teams */\n 'teams/ops': {\n name: 'ops',\n color: '#003b55',\n },\n 'teams/backend': {\n name: 'backend',\n color: '#6ad8cb',\n },\n 'teams/frontend': {\n name: 'frontend',\n color: '#8a5abc',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n description: 'This issue or pull request will need a new major version',\n color: '#FF6F00',\n },\n duplicate: {\n name: 'duplicate',\n description: 'This issue or pull request already exists',\n color: '#ECEFF1',\n },\n documentation: {\n name: 'documentation',\n description: 'Improvements or additions to documentation',\n color: '#7FCEFF',\n },\n rfc: {\n name: 'RFC',\n description: 'Request For Comments',\n color: '#FFD3B2',\n },\n bug: {\n name: 'bug',\n description: \"Something isn't working\",\n color: '#FF3D00',\n },\n enhancement: {\n name: 'enhancement',\n description: 'New feature or request',\n color: '#7FCEFF',\n },\n 'help-wanted': {\n name: 'help wanted',\n description: 'Extra attention is needed',\n color: '#B1EE8B',\n },\n question: {\n name: 'question',\n description: 'Further information is requested',\n color: '#F860A4',\n },\n wontfix: {\n name: 'wontfix',\n description: 'This will not be worked on',\n color: '#ECEFF1',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n design: {\n needsReview: 'design/needs-review',\n requested: 'design/review-requested',\n changesRequested: 'design/changes-requested',\n approved: 'design/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config } from './types';\n\nconst config: Config<'dev', never> = {\n autoAssignToCreator: true,\n trimTitle: true,\n requiresReviewRequest: false,\n prDefaultOptions: {\n featureBranch: false,\n autoMergeWithSkipCi: false,\n autoMerge: false,\n deleteAfterMerge: true,\n },\n parsePR: {\n title: [\n {\n regExp:\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^(revert: )?(build|chore|ci|docs|feat|fix|perf|refactor|style|test)(\\(([a-z\\-/]*)\\))?(!)?:\\s/,\n error: {\n title: 'Title does not match commitlint conventional',\n summary:\n 'https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional',\n },\n },\n ],\n },\n groups: {\n dev: {\n christophehurpeau: 'christophe@hurpeau.com',\n 'chris-reviewflow': 'christophe.hurpeau+reviewflow@gmail.com',\n tilap: 'jlavinh@gmail.com',\n },\n },\n waitForGroups: {\n dev: [],\n },\n teams: {},\n labels: {\n list: {\n // /* ci */\n // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' },\n // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' },\n // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },\n\n /* code */\n 'code/needs-review': {\n name: ':ok_hand: code/needs-review',\n color: '#FFD57F',\n },\n 'code/review-requested': {\n name: ':ok_hand: code/review-requested',\n color: '#B2E1FF',\n },\n 'code/changes-requested': {\n name: ':ok_hand: code/changes-requested',\n color: '#e11d21',\n },\n 'code/approved': {\n name: ':ok_hand: code/approved',\n color: '#64DD17',\n },\n\n /* auto merge */\n 'merge/automerge': {\n name: ':soon: automerge',\n color: '#64DD17',\n },\n 'merge/skip-ci': {\n name: 'automerge/skip-ci',\n color: '#e1e8ed',\n },\n\n /* feature-branch */\n 'feature-branch': {\n name: 'feature-branch',\n color: '#7FCEFF',\n },\n\n /* infos */\n 'breaking-changes': {\n name: ':warning: Breaking Changes',\n color: '#ef7934',\n },\n },\n\n review: {\n ci: {\n inProgress: 'ci/in-progress',\n succeeded: 'ci/success',\n failed: 'ci/fail',\n },\n dev: {\n needsReview: 'code/needs-review',\n requested: 'code/review-requested',\n changesRequested: 'code/changes-requested',\n approved: 'code/approved',\n },\n },\n },\n};\n\nexport default config;\n","import { Config as ConfigType } from './types';\nimport defaultConfig from './defaultConfig';\nimport ornikar from './ornikar';\nimport christophehurpeau from './christophehurpeau';\n\nexport type Config<\n GroupNames extends string = any,\n TeamNames extends string = any\n> = ConfigType;\n\nexport const orgsConfigs: { [owner: string]: Config } = {\n ornikar,\n christophehurpeau,\n};\n\nexport { defaultConfig };\n\n// flat requires node 11\n// export const getMembers = (\n// groups: Record,\n// ): string[] => {\n// return Object.values(groups).flat(1);\n// };\n","export type Options =\n | 'featureBranch'\n | 'autoMergeWithSkipCi'\n | 'autoMerge'\n | 'deleteAfterMerge';\n\nexport const options: Options[] = [\n 'featureBranch',\n 'autoMergeWithSkipCi',\n 'autoMerge',\n 'deleteAfterMerge',\n];\nexport const optionsRegexps: { name: Options; regexp: RegExp }[] = options.map(\n (option) => ({\n name: option,\n regexp: new RegExp(`\\\\[([ xX]?)]\\\\s*`),\n }),\n);\n\nexport const optionsLabels: { name: Options; label: string }[] = [\n { name: 'featureBranch', label: 'This PR is a feature branch' },\n {\n name: 'autoMergeWithSkipCi',\n label: 'Auto merge with `[skip ci]`',\n },\n {\n name: 'autoMerge',\n label:\n 'Auto merge when this PR is ready and has no failed statuses. (Also has a queue per repo to prevent multiple useless \"Update branch\" triggers)',\n },\n {\n name: 'deleteAfterMerge',\n label: 'Automatic branch delete after this PR is merged',\n },\n];\n","import { Options, optionsRegexps } from './prOptions';\n\nconst commentStart = '';\nconst commentEnd = \"\";\n\nconst regexpCols = /^(.*)((.*))(.*)$/is;\nconst regexpReviewflowCol = /^(\\s*<\\/td>]*>)\\s*(.*)\\s*(<\\/td><\\/tr><\\/table>\\s*)\\s*$/is;\n\ntype Config = Record;\n\nconst parseOptions = (content: string, defaultConfig: Config): Config => {\n return optionsRegexps.reduce(\n (acc, { name, regexp }) => {\n const match = regexp.exec(content);\n acc[name] = !match\n ? defaultConfig[name] || false\n : match[1] === 'x' || match[1] === 'X';\n return acc;\n },\n {} as any,\n ) as Config;\n};\n\ninterface ParseBodyResultWithoutOptions {\n content: string;\n ending: string;\n reviewflowContentCol: string;\n reviewflowContentColPrefix: string;\n reviewflowContentColSuffix: string;\n}\n\ninterface ParseBodyResultWithOptions extends ParseBodyResultWithoutOptions {\n options: Config;\n breakingChanges: string;\n}\n\nexport const parseBody = (\n description: string,\n): ParseBodyResultWithoutOptions | null => {\n const match = regexpCols.exec(description);\n if (!match) return null;\n const [, content, reviewFlowCol, reviewflowContent, ending] = match;\n const reviewFlowColMatch = regexpReviewflowCol.exec(reviewFlowCol);\n if (!reviewFlowColMatch) {\n return {\n content,\n ending,\n reviewflowContentCol: reviewflowContent,\n reviewflowContentColPrefix: commentStart,\n reviewflowContentColSuffix: commentEnd,\n };\n }\n const [\n ,\n reviewflowContentColPrefix,\n reviewflowContentCol,\n reviewflowContentColSuffix,\n ] = reviewFlowColMatch;\n\n return {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n };\n};\n\nexport const parseBodyWithOptions = (\n description: string,\n defaultConfig: Config,\n): ParseBodyResultWithOptions | null => {\n const parsedBody = parseBody(description);\n if (parsedBody === null) return null;\n\n // console.log(parsedBody.reviewflowContentCol);\n let breakingChanges = parsedBody.reviewflowContentCol.replace(\n /^.*#### Commits Notes:(.*)#### Options:.*$/s,\n '$1',\n );\n\n if (breakingChanges === parsedBody.reviewflowContentCol) {\n breakingChanges = '';\n } else {\n breakingChanges = breakingChanges.trim();\n }\n\n return {\n ...parsedBody,\n options: parseOptions(parsedBody.reviewflowContentCol, defaultConfig),\n breakingChanges,\n };\n};\n","import { Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\n\nexport default function hasLabelInPR(\n prLabels: Octokit.PullsGetResponse['labels'],\n label: LabelResponse,\n): boolean {\n if (!label) return false;\n return prLabels.some((l): boolean => l.id === label.id);\n}\n","/* eslint-disable max-lines */\nimport { Context, Octokit } from 'probot';\n// eslint-disable-next-line import/no-cycle\nimport { RepoContext } from '../../context/repoContext';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { parseBodyWithOptions } from './utils/parseBody';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nconst hasFailedStatusOrChecks = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n) => {\n const checks = await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n const failedChecks = checks.data.check_runs.filter(\n (check) => check.conclusion === 'failure',\n );\n\n if (failedChecks.length !== 0) {\n context.log.info(`automerge not possible: failed check pr ${pr.id}`, {\n checks: failedChecks.map((check) => check.name),\n });\n return true;\n }\n\n const combinedStatus = await context.github.repos.getCombinedStatusForRef(\n context.repo({\n ref: pr.head.sha,\n per_page: 100,\n }),\n );\n\n if (combinedStatus.data.state === 'failure') {\n const failedStatuses = combinedStatus.data.statuses.filter(\n (status) => status.state === 'failure' || status.state === 'error',\n );\n\n context.log.info(`automerge not possible: failed status pr ${pr.id}`, {\n statuses: failedStatuses.map((status) => status.context),\n });\n\n return true;\n }\n\n return false;\n};\n\nexport const autoMergeIfPossible = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n prLabels: LabelResponse[] = pr.labels,\n): Promise => {\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n\n if (!hasLabelInPR(prLabels, autoMergeLabel)) {\n context.log.debug('automerge not possible: no label', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const createMergeLockPrFromPr = () => ({\n id: pr.id,\n number: pr.number,\n branch: pr.head.ref,\n });\n\n if (pr.state !== 'open') {\n context.log.debug('automerge not possible: pr is not opened', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n }\n\n if (\n repoContext.hasNeedsReview(prLabels) ||\n repoContext.hasRequestedReview(prLabels)\n ) {\n context.log.debug('automerge not possible: blocking labels', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n }\n\n const lockedPr = repoContext.getMergeLockedPr();\n if (lockedPr && lockedPr.number !== pr.number) {\n context.log.info('automerge not possible: locked pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n repoContext.pushAutomergeQueue(createMergeLockPrFromPr());\n return false;\n }\n\n repoContext.addMergeLockPr(createMergeLockPrFromPr());\n\n if (pr.mergeable === undefined) {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n pr = prResult.data;\n }\n\n if (pr.merged) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info('automerge not possible: already merged pr', {\n prId: pr.id,\n prNumber: pr.number,\n });\n return false;\n }\n\n context.log.info(\n `automerge?: ${pr.id}, #${pr.number}, mergeable=${pr.mergeable} state=${\n pr.mergeable_state\n }`,\n );\n\n // https://github.com/octokit/octokit.net/issues/1763\n if (\n !(\n pr.mergeable_state === 'clean' ||\n pr.mergeable_state === 'has_hooks' ||\n pr.mergeable_state === 'unstable'\n )\n ) {\n if (!pr.mergeable_state || pr.mergeable_state === 'unknown') {\n context.log.info(`automerge not possible: rescheduling ${pr.id}`);\n // GitHub is determining whether the pull request is mergeable\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n\n if (pr.head.ref.startsWith('renovate/')) {\n if (pr.mergeable_state === 'behind' || pr.mergeable_state === 'dirty') {\n context.log.info(\n `automerge not possible: rebase renovate branch pr ${pr.id}`,\n );\n // TODO check if has commits not made by renovate https://github.com/ornikar/shared-configs/pull/47#issuecomment-445767120\n\n if (pr.body.includes('')) {\n if (pr.body.includes('[x] ')) {\n return false;\n }\n\n const renovateRebaseBody = pr.body.replace(\n '[ ] ',\n '[x] ',\n );\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n body: renovateRebaseBody,\n }),\n );\n } else if (!pr.title.startsWith('rebase!')) {\n await context.github.issues.update(\n context.repo({\n number: pr.number,\n title: `rebase!${pr.title}`,\n }),\n );\n }\n\n return false;\n }\n\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else if (pr.mergeable_state === 'blocked') {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n\n context.log.info(\n `automerge not possible: renovate with mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n if (pr.mergeable_state === 'blocked') {\n if (await hasFailedStatusOrChecks(pr, context)) {\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return false;\n } else {\n // waiting for reschedule in status (pr-handler/status.ts)\n return false;\n }\n }\n\n if (pr.mergeable_state === 'behind') {\n context.log.info('automerge not possible: update branch', {\n head: pr.head.ref,\n base: pr.base.ref,\n });\n\n await context.github.repos.merge({\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n head: pr.base.ref,\n base: pr.head.ref,\n });\n\n return false;\n }\n\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n context.log.info(\n `automerge not possible: not mergeable mergeable_state=${\n pr.mergeable_state\n }`,\n );\n return false;\n }\n\n try {\n context.log.info(`automerge pr #${pr.number}`);\n\n const parsedBody = parseBodyWithOptions(\n pr.body,\n repoContext.config.prDefaultOptions,\n );\n const options =\n (parsedBody && parsedBody.options) || repoContext.config.prDefaultOptions;\n\n const mergeResult = await context.github.pulls.merge({\n merge_method: options.featureBranch ? 'merge' : 'squash',\n owner: pr.head.repo.owner.login,\n repo: pr.head.repo.name,\n pull_number: pr.number,\n commit_title: `${pr.title}${\n options.autoMergeWithSkipCi ? ' [skip ci]' : ''\n } (#${pr.number})`,\n commit_message: '', // TODO add BC\n });\n context.log.debug('merge result:', mergeResult.data);\n repoContext.removePrFromAutomergeQueue(context, pr.number);\n return Boolean(mergeResult.data.merged);\n } catch (err) {\n context.log.info('could not merge:', err.message);\n repoContext.reschedule(context, createMergeLockPrFromPr());\n return false;\n }\n};\n","import { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\n\nexport interface LabelResponse {\n id: number;\n node_id: string;\n url: string;\n name: string;\n description: string;\n color: string;\n default: boolean;\n}\n\nexport interface Labels {\n [key: string]: LabelResponse;\n}\n\nexport const getLabelsForRepo = async (\n context: Context,\n): Promise => {\n const { data: labels } = await context.github.issues.listLabelsForRepo(\n context.repo({ per_page: 100 }),\n );\n return labels;\n};\n\nexport const initRepoLabels = async (\n context: Context,\n config: Config,\n): Promise => {\n const labels = await getLabelsForRepo(context);\n const finalLabels: Record = {};\n\n for (const [labelKey, labelConfig] of Object.entries(config.labels.list)) {\n const labelColor = labelConfig.color.slice(1);\n const description = labelConfig.description\n ? `${labelConfig.description} - Synced by reviewflow`\n : `Synced by reviewflow for ${labelKey}`;\n\n let existingLabel = labels.find((label) => label.name === labelConfig.name);\n if (!existingLabel) {\n existingLabel = labels.find((label) => label.description === description);\n }\n if (!existingLabel) {\n if (labelKey === 'design/needs-review') {\n existingLabel = labels.find(\n (label) => label.name === 'needs-design-review',\n );\n }\n if (labelKey === 'design/approved') {\n existingLabel = labels.find(\n (label) => label.name === 'design-reviewed',\n );\n }\n if (labelKey === 'teams/ops') {\n existingLabel = labels.find((label) => label.name === 'archi');\n }\n }\n\n if (!existingLabel) {\n const result = await context.github.issues.createLabel(\n context.repo({\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else if (\n existingLabel.name !== labelConfig.name ||\n existingLabel.color !== labelColor ||\n existingLabel.description !== description\n ) {\n context.log.info('Needs to update label', {\n current_name: existingLabel.name,\n name: existingLabel.name !== labelConfig.name && labelConfig.name,\n color: existingLabel.color !== labelColor && labelColor,\n description: existingLabel.description !== description && description,\n });\n\n const result = await context.github.issues.updateLabel(\n context.repo({\n current_name: existingLabel.name,\n name: labelConfig.name,\n color: labelColor,\n description,\n }),\n );\n finalLabels[labelKey] = result.data;\n } else {\n finalLabels[labelKey] = existingLabel;\n }\n }\n\n return finalLabels;\n};\n","export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n","import Webhooks from '@octokit/webhooks';\nimport { WebClient } from '@slack/web-api';\nimport { Context, Octokit } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { getKeys } from './utils';\n\nexport interface TeamSlack {\n mention: (githubLogin: string) => string;\n postMessage: (githubLogin: string, text: string) => Promise;\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ) => string;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const voidTeamSlack = (): TeamSlack => ({\n mention: (): string => '',\n postMessage: (): Promise => Promise.resolve(),\n prLink: (): string => '',\n});\n\nexport const initTeamSlack = async (\n context: Context,\n config: Config,\n): Promise => {\n if (!config.slackToken) {\n return voidTeamSlack();\n }\n\n const githubLoginToSlackEmail = getKeys(config.groups).reduce<{\n [login: string]: string;\n }>((acc, groupName) => {\n Object.assign(acc, config.groups[groupName]);\n return acc;\n }, {});\n\n const slackClient = new WebClient(config.slackToken);\n const allUsers: any = await slackClient.users.list({ limit: 200 });\n const members: [string, { member: any; im: any }][] = Object.values(\n githubLoginToSlackEmail,\n )\n .map((email) => {\n const member = allUsers.members.find(\n (user: any) => user.profile.email === email,\n );\n if (!member) {\n console.warn(`Could not find user ${email}`);\n return;\n }\n return [email, { member, im: undefined }] as [\n string,\n { member: any; im: any }\n ];\n })\n .filter(ExcludesFalsy);\n\n for (const [, user] of members) {\n try {\n const im: any = await slackClient.im.open({ user: user.member.id });\n user.im = im.channel;\n } catch (err) {\n console.error(err);\n }\n }\n\n const membersMap = new Map(members);\n\n const getUserFromGithubLogin = (githubLogin: string) => {\n const email = githubLoginToSlackEmail[githubLogin];\n if (!email) return null;\n return membersMap.get(email);\n };\n\n return {\n mention: (githubLogin: string): string => {\n const user = getUserFromGithubLogin(githubLogin);\n if (!user) return githubLogin;\n return `<@${user.member.id}>`;\n },\n postMessage: async (githubLogin: string, text: string): Promise => {\n context.log.debug('send slack', { githubLogin, text });\n if (process.env.DRY_RUN) return;\n\n const user = getUserFromGithubLogin(githubLogin);\n if (!user || !user.im) return;\n await slackClient.chat.postMessage({\n username: process.env.REVIEWFLOW_NAME,\n channel: user.im.id,\n text,\n });\n },\n prLink: (\n pr: Octokit.PullsGetResponse,\n context: Context,\n ): string => {\n return `<${pr.html_url}|${context.payload.repository.name}#${pr.number}>`;\n },\n };\n};\n","import { Context } from 'probot';\nimport { Config } from '../orgsConfigs';\nimport { initTeamSlack, TeamSlack } from './initTeamSlack';\nimport { getKeys } from './utils';\n\nexport interface OrgContext<\n GroupNames extends string = any,\n TeamNames extends string = any\n> {\n config: Config;\n slack: TeamSlack;\n getReviewerGroup: (githubLogin: string) => string | undefined;\n getReviewerGroups: (githubLogins: string[]) => string[];\n getTeamsForLogin: (githubLogin: string) => TeamNames[];\n reviewShouldWait: (\n reviewerGroup: GroupNames | undefined,\n requestedReviewers: any[],\n {\n includesReviewerGroup,\n includesWaitForGroups,\n }: { includesReviewerGroup?: boolean; includesWaitForGroups?: boolean },\n ) => boolean;\n}\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nconst initTeamContext = async (\n context: Context,\n config: Config,\n): Promise => {\n const slackPromise = initTeamSlack(context, config);\n\n const githubLoginToGroup = new Map();\n getKeys(config.groups).forEach((groupName) => {\n Object.keys(config.groups[groupName]).forEach((login) => {\n githubLoginToGroup.set(login, groupName);\n });\n });\n\n const githubLoginToTeams = new Map();\n getKeys(config.teams || {}).forEach((teamName) => {\n (config.teams as NonNullable)[teamName].logins.forEach(\n (login) => {\n const teams = githubLoginToTeams.get(login);\n if (teams) {\n teams.push(teamName);\n } else {\n githubLoginToTeams.set(login, [teamName]);\n }\n },\n );\n });\n\n const getReviewerGroups = (githubLogins: string[]) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(Boolean),\n ),\n ];\n\n return {\n config,\n getReviewerGroup: (githubLogin) => githubLoginToGroup.get(githubLogin),\n getReviewerGroups: (githubLogins) => [\n ...new Set(\n githubLogins\n .map((githubLogin) => githubLoginToGroup.get(githubLogin))\n .filter(ExcludesFalsy),\n ),\n ],\n\n getTeamsForLogin: (githubLogin) =>\n githubLoginToTeams.get(githubLogin) || [],\n\n reviewShouldWait: (\n reviewerGroup,\n requestedReviewers,\n { includesReviewerGroup, includesWaitForGroups },\n ) => {\n if (!reviewerGroup) return false;\n\n const requestedReviewerGroups = getReviewerGroups(\n requestedReviewers.map((request) => request.login),\n );\n\n // contains another request of a reviewer in the same group\n if (\n includesReviewerGroup &&\n requestedReviewerGroups.includes(reviewerGroup)\n ) {\n return true;\n }\n\n // contains a request from a dependent group\n if (config.waitForGroups && includesWaitForGroups) {\n const waitForGroups = config.waitForGroups;\n return requestedReviewerGroups.some((group) =>\n waitForGroups[reviewerGroup].includes(group),\n );\n }\n\n return false;\n },\n\n slack: await slackPromise,\n };\n};\n\nconst orgContextsPromise = new Map();\nconst orgContexts = new Map();\n\nexport const obtainOrgContext = (\n context: Context,\n config: Config,\n): Promise => {\n const owner = context.payload.repository.owner;\n\n const existingTeamContext = orgContexts.get(owner.login);\n if (existingTeamContext) return existingTeamContext;\n\n const existingPromise = orgContextsPromise.get(owner.login);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const promise = initTeamContext(context, config);\n orgContextsPromise.set(owner.login, promise);\n\n return promise.then((orgContext) => {\n orgContextsPromise.delete(owner.login);\n orgContexts.set(owner.login, orgContext);\n return orgContext;\n });\n};\n","/* eslint-disable max-lines */\n\nimport { Lock } from 'lock';\nimport { Context } from 'probot';\nimport { orgsConfigs, Config } from '../orgsConfigs';\n// eslint-disable-next-line import/no-cycle\nimport { autoMergeIfPossible } from '../pr-handlers/actions/autoMergeIfPossible';\nimport { initRepoLabels, LabelResponse, Labels } from './initRepoLabels';\nimport { obtainOrgContext, OrgContext } from './orgContext';\n\nexport interface LockedMergePr {\n id: number;\n number: number;\n branch: string;\n}\n\ninterface RepoContextWithoutTeamContext {\n labels: Labels;\n protectedLabelIds: readonly LabelResponse['id'][];\n\n hasNeedsReview: (labels: LabelResponse[]) => boolean;\n hasRequestedReview: (labels: LabelResponse[]) => boolean;\n hasChangesRequestedReview: (labels: LabelResponse[]) => boolean;\n hasApprovesReview: (labels: LabelResponse[]) => boolean;\n getNeedsReviewGroupNames: (labels: LabelResponse[]) => GroupNames[];\n\n lockPROrPRS(\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise;\n\n getMergeLockedPr(): LockedMergePr;\n addMergeLockPr(pr: LockedMergePr): void;\n removePrFromAutomergeQueue(context: Context, prNumber: number): void;\n reschedule(context: Context, pr: LockedMergePr): void;\n pushAutomergeQueue(pr: LockedMergePr): void;\n}\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport type RepoContext = OrgContext<\n GroupNames\n> &\n RepoContextWithoutTeamContext;\n\nasync function initRepoContext(\n context: Context,\n config: Config,\n): Promise> {\n const repo = context.payload.repository;\n const orgContext = await obtainOrgContext(context, config);\n const repoContext = Object.create(orgContext);\n\n const labels = await initRepoLabels(context, config);\n\n const reviewGroupNames = Object.keys(config.groups) as GroupNames[];\n\n const needsReviewLabelIds = reviewGroupNames\n .map((key: GroupNames) => config.labels.review[key].needsReview)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const requestedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].requested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const changesRequestedLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].changesRequested)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const approvedReviewLabelIds = reviewGroupNames\n .map((key) => config.labels.review[key].approved)\n .filter(Boolean)\n .map((name) => labels[name].id);\n\n const protectedLabelIds = [\n ...requestedReviewLabelIds,\n ...changesRequestedLabelIds,\n ...approvedReviewLabelIds,\n ];\n\n const labelIdToGroupName = new Map();\n reviewGroupNames.forEach((key) => {\n const reviewGroupLabels = config.labels.review[key] as any;\n Object.keys(reviewGroupLabels).forEach((labelKey: string) => {\n labelIdToGroupName.set(labels[reviewGroupLabels[labelKey]].id, key);\n });\n });\n\n // const updateStatusCheck = (context, reviewGroup, statusInfo) => {};\n\n const hasNeedsReview = (labels: LabelResponse[]) =>\n labels.some((label) => needsReviewLabelIds.includes(label.id));\n const hasRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => requestedReviewLabelIds.includes(label.id));\n const hasChangesRequestedReview = (labels: LabelResponse[]) =>\n labels.some((label) => changesRequestedLabelIds.includes(label.id));\n const hasApprovesReview = (labels: LabelResponse[]) =>\n labels.some((label) => approvedReviewLabelIds.includes(label.id));\n\n const getNeedsReviewGroupNames = (labels: LabelResponse[]): GroupNames[] =>\n labels\n .filter((label) => needsReviewLabelIds.includes(label.id))\n .map((label) => labelIdToGroupName.get(label.id))\n .filter(ExcludesFalsy);\n\n const lock = Lock();\n let lockMergePr: LockedMergePr | undefined;\n let automergeQueue: LockedMergePr[] = [];\n\n const lockPROrPRS = (\n prIdOrIds: string | string[],\n prNumberOrPrNumbers: number | number[],\n callback: () => Promise | void,\n ): Promise =>\n new Promise((resolve, reject) => {\n const logInfos = {\n repoName: repo.name,\n prIdOrIds,\n prNumberOrPrNumbers,\n };\n context.log.info('lock: try to lock pr', logInfos);\n lock(prIdOrIds, async (createReleaseCallback) => {\n const release = createReleaseCallback(() => {});\n context.log.info('lock: lock acquired', logInfos);\n try {\n await callback();\n } catch (err) {\n context.log.info('lock: release pr (with error)', logInfos);\n release();\n reject(err);\n return;\n }\n context.log.info('lock: release pr', logInfos);\n release();\n resolve();\n });\n });\n\n const reschedule = (context: Context, pr: LockedMergePr) => {\n if (!pr) throw new Error('Cannot reschedule undefined');\n context.log.info('reschedule', pr);\n setTimeout(() => {\n lockPROrPRS('reschedule', pr.number, () => {\n return lockPROrPRS(String(pr.id), pr.number, async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: pr.number,\n }),\n );\n await autoMergeIfPossible(prResult.data, context, repoContext);\n });\n });\n }, 1000);\n };\n\n return Object.assign(repoContext, {\n labels,\n protectedLabelIds,\n hasNeedsReview,\n hasRequestedReview,\n hasChangesRequestedReview,\n hasApprovesReview,\n getNeedsReviewGroupNames,\n\n getMergeLockedPr: () => lockMergePr,\n addMergeLockPr: (pr: LockedMergePr): void => {\n console.log('merge lock: lock', pr);\n if (lockMergePr && String(lockMergePr.number) === String(pr.number)) {\n return;\n }\n if (lockMergePr) throw new Error('Already have lock');\n lockMergePr = pr;\n },\n removePrFromAutomergeQueue: (context, prNumber: number | string): void => {\n context.log('merge lock: remove', { prNumber });\n if (lockMergePr && String(lockMergePr.number) === String(prNumber)) {\n lockMergePr = automergeQueue.shift();\n context.log('merge lock: next', { lockMergePr });\n if (lockMergePr) {\n reschedule(context, lockMergePr);\n }\n } else {\n automergeQueue = automergeQueue.filter(\n (value) => String(value.number) !== String(prNumber),\n );\n }\n },\n pushAutomergeQueue: (pr: LockedMergePr): void => {\n console.log('merge lock: push queue', {\n pr,\n lockMergePr,\n automergeQueue,\n });\n if (!automergeQueue.some((p) => p.number === pr.number)) {\n automergeQueue.push(pr);\n }\n },\n reschedule,\n\n lockPROrPRS,\n } as RepoContextWithoutTeamContext);\n}\n\nconst repoContextsPromise = new Map>();\nconst repoContexts = new Map();\n\nexport const shouldIgnoreRepo = (\n repoName: string,\n orgConfig: Config,\n): boolean => {\n const ignoreRepoRegexp =\n orgConfig.ignoreRepoPattern &&\n new RegExp(`^${orgConfig.ignoreRepoPattern}$`);\n\n if (repoName === 'reviewflow-test') {\n return process.env.REVIEWFLOW_NAME !== 'reviewflow-test';\n }\n\n if (ignoreRepoRegexp) {\n return ignoreRepoRegexp.test(repoName);\n }\n\n return false;\n};\n\nexport const obtainRepoContext = (\n context: Context,\n): Promise | RepoContext | null => {\n const repo = context.payload.repository;\n const owner = repo.owner;\n const key = repo.id;\n\n const existingRepoContext = repoContexts.get(key);\n if (existingRepoContext) return existingRepoContext;\n\n const existingPromise = repoContextsPromise.get(key);\n if (existingPromise) return Promise.resolve(existingPromise);\n\n const orgConfig = orgsConfigs[owner.login];\n\n if (!orgConfig) {\n console.warn(`using default config for ${owner.login}`);\n return null;\n }\n\n if (shouldIgnoreRepo(repo.name, orgConfig)) {\n console.warn('repo ignored', { owner: repo.owner.login, name: repo.name });\n return null;\n }\n\n const promise = initRepoContext(context, orgConfig);\n repoContextsPromise.set(key, promise);\n\n return promise.then((repoContext) => {\n repoContextsPromise.delete(key);\n repoContexts.set(key, repoContext);\n return repoContext;\n });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { obtainRepoContext, RepoContext } from '../context/repoContext';\n\nexport type PRHandler = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n fourthArgument?: FourthArgument,\n) => Promise;\n\nexport type CallbackWithPRAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const handlerPullRequestChange = async <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n callback: CallbackWithPRAndRepoContext,\n): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n return repoContext.lockPROrPRS(\n String(context.payload.pull_request.id),\n context.payload.pull_request.number,\n async () => {\n const prResult = await context.github.pulls.get(\n context.repo({\n pull_number: context.payload.pull_request.number,\n }),\n );\n\n await callback(prResult.data, repoContext);\n },\n );\n};\n\ntype CallbackPRAndContextAndRepoContext = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestChange = <\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n callback: CallbackPRAndContextAndRepoContext,\n) => (context: Context) => {\n return handlerPullRequestChange(context, (pr, repoContext) =>\n callback(pr, context, repoContext),\n );\n};\n\ntype CallbackContextAndRepoContext = (\n context: Context,\n repoContext: RepoContext,\n) => void | Promise;\n\nexport const createHandlerPullRequestsChange = (\n getPullRequests: (\n context: Context,\n repoContext: RepoContext,\n ) => { id: string | number; number: number }[],\n callback: CallbackContextAndRepoContext,\n) => async (context: Context): Promise => {\n const repoContext = await obtainRepoContext(context);\n if (!repoContext) return;\n\n const prs = getPullRequests(context, repoContext);\n if (prs.length === 0) return;\n return repoContext.lockPROrPRS(\n prs.map((pr) => String(pr.id)),\n prs.map((pr) => pr.number),\n () => callback(context, repoContext),\n );\n};\n","import Webhooks from '@octokit/webhooks';\nimport { PRHandler } from '../utils';\n\nexport const autoAssignPRToCreator: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n if (!repoContext.config.autoAssignToCreator) return;\n if (pr.assignees.length !== 0) return;\n if (pr.user.type === 'Bot') return;\n\n await context.github.issues.addAssignees(\n context.issue({\n assignees: [pr.user.login],\n }),\n );\n};\n","export const cleanTitle = (title: string): string =>\n title\n .trim()\n .replace(\n /[\\s-]+\\[?\\s*([A-Za-z][A-Za-z\\d]+)[- ](\\d+)\\s*]?\\s*$/,\n (s, arg1, arg2) => ` ${arg1.toUpperCase()}-${arg2}`,\n )\n .replace(/^([A-Za-z]+)[/:]\\s*/, (s, arg1) => `${arg1.toLowerCase()}: `)\n .replace(/^Revert \"([^\"]+)\"$/, 'revert: $1')\n .replace(/\\s+[[\\]]\\s*no\\s*issue\\s*[[\\]]$/i, ' [no issue]')\n // eslint-disable-next-line unicorn/no-unsafe-regex\n .replace(/^(revert:.*)(\\s+\\(#\\d+\\))$/, '$1');\n","import { StatusInfo } from '../../../orgsConfigs/types';\nimport { parseBodyWithOptions, parseBody } from './parseBody';\nimport { Options, optionsLabels } from './prOptions';\n\nconst toMarkdownOptions = (options: Record) => {\n return optionsLabels\n .map(\n ({ name, label }) =>\n `- [${options[name] ? 'x' : ' '}] ${label}`,\n )\n .join('\\n');\n};\n\nconst toMarkdownInfos = (infos: StatusInfo[]) => {\n return infos\n .map((info) => {\n if (info.url) return `[${info.title}](${info.url})`;\n return info.title;\n })\n .join('\\n');\n};\n\ninterface UpdatedBodyWithOptions {\n body: string;\n options?: Record;\n}\n\nexport const updateBody = (\n body: string,\n defaultConfig: Record,\n infos?: StatusInfo[],\n updateOptions?: Partial>,\n): UpdatedBodyWithOptions => {\n const parsed = parseBodyWithOptions(body, defaultConfig);\n if (!parsed) {\n console.info('could not parse body');\n return { body };\n }\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n options,\n } = parsed;\n\n const infosAndCommitNotesParagraph = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /^\\s*(?:(#### Infos:.*)?(#### Commits Notes:.*)?#### Options:)?.*$/s,\n // eslint-disable-next-line no-nested-ternary\n !infos\n ? '$1$2'\n : infos.length !== 0\n ? `#### Infos:\\n${toMarkdownInfos(infos)}\\n$2`\n : '$2',\n );\n\n const updatedOptions = !updateOptions\n ? options\n : { ...options, ...updateOptions };\n\n return {\n options: updatedOptions,\n body: `${content}${reviewflowContentColPrefix}\n${infosAndCommitNotesParagraph}#### Options:\n${toMarkdownOptions(updatedOptions)}\n${reviewflowContentColSuffix}${ending || ''}`,\n };\n};\n\nexport const updateBodyCommitsNotes = (\n body: string,\n commitNotes?: string,\n): string => {\n const parsed = parseBody(body);\n if (!parsed) {\n console.info('could not parse body');\n return body;\n }\n\n const {\n content,\n ending,\n reviewflowContentCol,\n reviewflowContentColPrefix,\n reviewflowContentColSuffix,\n } = parsed;\n\n const reviewflowContentColReplaced = reviewflowContentCol.replace(\n // eslint-disable-next-line unicorn/no-unsafe-regex\n /(?:#### Commits Notes:.*)?(#### Options:)/s,\n // eslint-disable-next-line no-nested-ternary\n !commitNotes ? '$1' : `#### Commits Notes:\\n\\n${commitNotes}\\n\\n$1`,\n );\n\n return `${content}${reviewflowContentColPrefix}${reviewflowContentColReplaced}${reviewflowContentColSuffix}${ending ||\n ''}`;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\n\ninterface UpdatePr {\n title?: string;\n body?: string;\n}\n\nexport const updatePrIfNeeded = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n update: UpdatePr,\n): Promise => {\n const hasDiffInTitle = update.title && pr.title !== update.title;\n const hasDiffInBody = update.body && pr.body !== update.body;\n\n if (hasDiffInTitle || hasDiffInBody) {\n const diff: Partial> = {};\n if (hasDiffInTitle) {\n diff.title = update.title;\n pr.title = update.title as string;\n }\n if (hasDiffInBody) {\n diff.body = update.body;\n pr.body = update.body as string;\n }\n\n await context.github.issues.update(context.issue(diff));\n }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../../context/initRepoLabels';\nimport hasLabelInPR from './hasLabelInPR';\n\ninterface SyncLabelOptions {\n onRemove?: () => void | Promise;\n onAdd?: (prLabels: LabelResponse[]) => void | Promise;\n}\n\nexport default async function syncLabel<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n shouldHaveLabel: boolean,\n label: LabelResponse,\n prHasLabel = hasLabelInPR(pr.labels, label),\n { onRemove, onAdd }: SyncLabelOptions = {},\n): Promise {\n if (prHasLabel && !shouldHaveLabel) {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n if (onRemove) await onRemove();\n }\n if (shouldHaveLabel && !prHasLabel) {\n const response = await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n if (onAdd) await onAdd(response.data);\n }\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context } from 'probot';\n\nexport default async function createStatus<\n T extends Webhooks.WebhookPayloadPullRequest\n>(\n context: Context,\n name: string,\n sha: string,\n type: 'failure' | 'success',\n description: string,\n url?: string,\n): Promise {\n await context.github.repos.createStatus(\n context.repo({\n context:\n name === ''\n ? process.env.REVIEWFLOW_NAME\n : `${process.env.REVIEWFLOW_NAME}/${name}`,\n sha,\n state: type,\n description,\n target_url: url,\n }),\n );\n}\n","/* eslint-disable max-lines */\nimport Webhooks from '@octokit/webhooks';\nimport { StatusError, StatusInfo } from '../../orgsConfigs/types';\nimport { PRHandler } from '../utils';\nimport { cleanTitle } from './utils/cleanTitle';\nimport { updateBody } from './utils/updateBody';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport { updatePrIfNeeded } from './updatePr';\nimport hasLabelInPR from './utils/hasLabelInPR';\nimport syncLabel from './utils/syncLabel';\nimport createStatus from './utils/createStatus';\n\ninterface StatusWithInfo {\n name: string;\n info: StatusInfo;\n error?: undefined;\n}\n\ninterface StatusWithError {\n name: string;\n error: StatusError;\n info?: undefined;\n}\n\ntype Status = StatusWithInfo | StatusWithError;\n\nconst ExcludesFalsy = (Boolean as any) as (\n x: T | false | null | undefined,\n) => x is T;\n\nexport const editOpenedPR: PRHandler<\n Webhooks.WebhookPayloadPullRequest,\n { skipAutoMerge: boolean },\n string\n> = async (pr, context, repoContext, previousSha) => {\n const repo = context.payload.repository;\n\n // do not lint pr from forks\n if (pr.head.repo.id !== repo.id) return { skipAutoMerge: true };\n\n const title = repoContext.config.trimTitle ? cleanTitle(pr.title) : pr.title;\n\n const isPrFromBot = pr.user.type === 'Bot';\n\n const statuses: Status[] = [];\n\n const errorRule = repoContext.config.parsePR.title.find((rule) => {\n if (rule.bot === false && isPrFromBot) return false;\n\n const match = rule.regExp.exec(title);\n if (match === null) {\n if (rule.status) {\n statuses.push({ name: rule.status, error: rule.error });\n }\n return true;\n }\n\n if (rule.status && rule.statusInfoFromMatch) {\n statuses.push({\n name: rule.status,\n info: rule.statusInfoFromMatch(match),\n });\n return false;\n }\n\n return false;\n });\n\n const date = new Date().toISOString();\n\n const hasLintPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check): boolean => check.name === `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n );\n\n await Promise.all(\n [\n ...statuses.map(\n ({ name, error, info }): Promise =>\n createStatus(\n context,\n name,\n pr.head.sha,\n error ? 'failure' : 'success',\n error ? error.title : (info as StatusInfo).title,\n error ? undefined : (info as StatusInfo).url,\n ),\n ),\n ...(previousSha\n ? statuses\n .map(\n ({ name, error, info }): Promise | undefined =>\n error\n ? createStatus(\n context,\n name,\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n )\n .filter(ExcludesFalsy)\n : []),\n hasLintPrCheck &&\n context.github.checks.create(\n context.repo({\n name: `${process.env.REVIEWFLOW_NAME}/lint-pr`,\n head_sha: pr.head.sha,\n status: 'completed' as 'completed',\n conclusion: (errorRule ? 'failure' : 'success') as\n | 'failure'\n | 'success',\n started_at: date,\n completed_at: date,\n output: errorRule\n ? errorRule.error\n : {\n title: '✓ Your PR is valid',\n summary: '',\n },\n }),\n ),\n !hasLintPrCheck && previousSha && errorRule\n ? createStatus(\n context,\n 'lint-pr',\n previousSha,\n 'success',\n 'New commits have been pushed',\n )\n : undefined,\n !hasLintPrCheck &&\n createStatus(\n context,\n 'lint-pr',\n pr.head.sha,\n errorRule ? 'failure' : 'success',\n errorRule ? errorRule.error.title : '✓ Your PR is valid',\n ),\n ].filter(ExcludesFalsy),\n );\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const prHasFeatureBranchLabel = hasLabelInPR(pr.labels, featureBranchLabel);\n const prHasSkipCiLabel = hasLabelInPR(pr.labels, skipCiLabel);\n const prHasAutoMergeLabel = hasLabelInPR(pr.labels, automergeLabel);\n\n const defaultOptions = {\n ...repoContext.config.prDefaultOptions,\n featureBranch: prHasFeatureBranchLabel,\n autoMergeWithSkipCi: prHasSkipCiLabel,\n autoMerge: prHasAutoMergeLabel,\n };\n\n const { body, options } = updateBody(pr.body, defaultOptions, statuses\n .filter((status) => status.info && status.info.inBody)\n .map((status) => status.info) as StatusInfo[]);\n await updatePrIfNeeded(pr, context, repoContext, { title, body });\n\n if (options && (featureBranchLabel || automergeLabel)) {\n await Promise.all([\n featureBranchLabel &&\n syncLabel(\n pr,\n context,\n options.featureBranch,\n featureBranchLabel,\n prHasFeatureBranchLabel,\n ),\n skipCiLabel &&\n syncLabel(\n pr,\n context,\n options.autoMergeWithSkipCi,\n skipCiLabel,\n prHasSkipCiLabel,\n ),\n automergeLabel &&\n syncLabel(\n pr,\n context,\n options.autoMerge,\n automergeLabel,\n prHasAutoMergeLabel,\n {\n onAdd: async (prLabels) => {\n await autoMergeIfPossible(pr, context, repoContext, prLabels);\n },\n onRemove: async () => {\n await repoContext.removePrFromAutomergeQueue(context, pr.number);\n },\n },\n ),\n ]);\n\n if (!automergeLabel) {\n return { skipAutoMerge: true };\n }\n }\n\n return { skipAutoMerge: false };\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { RepoContext } from '../../context/repoContext';\nimport createStatus from './utils/createStatus';\n\nconst addStatusCheck = async function<\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n { state, description }: { state: 'failure' | 'success'; description: string },\n previousSha?: string,\n): Promise {\n const hasPrCheck = (await context.github.checks.listForRef(\n context.repo({\n ref: pr.head.sha,\n }),\n )).data.check_runs.find(\n (check) => check.name === process.env.REVIEWFLOW_NAME,\n );\n\n context.log.info('add status check', { hasPrCheck, state, description });\n\n if (hasPrCheck) {\n await context.github.checks.create(\n context.repo({\n name: process.env.REVIEWFLOW_NAME as string,\n head_sha: pr.head.sha,\n started_at: pr.created_at,\n status: 'completed',\n conclusion: state,\n completed_at: new Date().toISOString(),\n output: {\n title: description,\n summary: '',\n },\n }),\n );\n } else if (previousSha && state === 'failure') {\n await Promise.all([\n createStatus(\n context,\n '',\n previousSha,\n 'success',\n 'New commits have been pushed',\n ),\n createStatus(context, '', pr.head.sha, state, description),\n ]);\n } else {\n await createStatus(context, '', pr.head.sha, state, description);\n }\n};\n\nexport const updateStatusCheckFromLabels = (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n labels: LabelResponse[] = pr.labels || [],\n previousSha?: string,\n): Promise => {\n context.log.info('updateStatusCheckFromLabels', {\n labels: labels.map((l) => l && l.name),\n hasNeedsReview: repoContext.hasNeedsReview(labels),\n hasApprovesReview: repoContext.hasApprovesReview(labels),\n });\n\n const createFailedStatusCheck = (description: string): Promise =>\n addStatusCheck(\n pr,\n context,\n {\n state: 'failure',\n description,\n },\n previousSha,\n );\n\n if (pr.requested_reviewers.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${pr.requested_reviewers\n .map((rr: any) => rr.login)\n .join(', ')}`,\n );\n }\n\n if (repoContext.hasChangesRequestedReview(labels)) {\n return createFailedStatusCheck(\n 'Changes requested ! Push commits or discuss changes then re-request a review.',\n );\n }\n\n const needsReviewGroupNames = repoContext.getNeedsReviewGroupNames(labels);\n\n if (needsReviewGroupNames.length !== 0) {\n return createFailedStatusCheck(\n `Awaiting review from: ${needsReviewGroupNames.join(\n ', ',\n )}. Perhaps request someone ?`,\n );\n }\n\n if (!repoContext.hasApprovesReview(labels)) {\n if (repoContext.config.requiresReviewRequest) {\n return createFailedStatusCheck(\n 'Awaiting review... Perhaps request someone ?',\n );\n }\n }\n\n // if (\n // repoContext.config.requiresReviewRequest &&\n // !repoContext.hasRequestedReview(labels)\n // ) {\n // return createFailedStatusCheck(\n // context,\n // pr,\n // 'You need to request someone to review the PR',\n // );\n // return;\n // }\n // return createInProgressStatusCheck(context);\n // } else if (repoContext.hasApprovesReview(labels)) {\n return addStatusCheck(\n pr,\n context,\n {\n state: 'success',\n description: '✓ PR ready to merge !',\n },\n previousSha,\n );\n // }\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { LabelResponse } from '../../context/initRepoLabels';\nimport { GroupLabels } from '../../orgsConfigs/types';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateStatusCheckFromLabels } from './updateStatusCheckFromLabels';\n\nexport const updateReviewStatus = async <\n E extends Webhooks.WebhookPayloadPullRequest,\n GroupNames extends string = any\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n reviewGroup: GroupNames,\n {\n add: labelsToAdd,\n remove: labelsToRemove,\n }: {\n add?: (GroupLabels | false | undefined)[];\n remove?: (GroupLabels | false | undefined)[];\n },\n): Promise => {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n labelsToAdd,\n labelsToRemove,\n });\n\n let prLabels: LabelResponse[] = pr.labels || [];\n if (!reviewGroup) return prLabels;\n\n const newLabelNames = new Set(\n prLabels.map((label: LabelResponse) => label.name),\n );\n\n const toAdd = new Set();\n const toAddNames = new Set();\n const toDelete = new Set();\n const toDeleteNames = new Set();\n const labels = repoContext.labels;\n\n const getLabelFromKey = (key: GroupLabels): undefined | LabelResponse => {\n const reviewConfig = repoContext.config.labels.review[reviewGroup];\n if (!reviewConfig) return undefined;\n\n return reviewConfig[key] && labels[reviewConfig[key]]\n ? labels[reviewConfig[key]]\n : undefined;\n };\n\n if (labelsToAdd) {\n labelsToAdd.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label || prLabels.some((prLabel) => prLabel.id === label.id)) {\n return;\n }\n newLabelNames.add(label.name);\n toAdd.add(key);\n toAddNames.add(label.name);\n });\n }\n\n if (labelsToRemove) {\n labelsToRemove.forEach((key) => {\n if (!key) return;\n const label = getLabelFromKey(key);\n if (!label) return;\n const existing = prLabels.find((prLabel) => prLabel.id === label.id);\n if (existing) {\n newLabelNames.delete(existing.name);\n toDelete.add(key);\n toDeleteNames.add(existing.name);\n }\n });\n }\n\n // TODO move that elsewhere\n\n repoContext.getTeamsForLogin(pr.user.login).forEach((teamName) => {\n const team = repoContext.config.teams[teamName];\n if (team.labels) {\n team.labels.forEach((labelKey) => {\n const label = repoContext.labels[labelKey];\n if (label && !prLabels.some((prLabel) => prLabel.id === label.id)) {\n newLabelNames.add(label.name);\n toAdd.add(labelKey);\n toAddNames.add(label.name);\n }\n });\n }\n });\n\n // if (process.env.DRY_RUN) return;\n\n if (toAdd.size !== 0 || toDelete.size !== 0) {\n if (toDelete.size === 0 || toDelete.size < 4) {\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n toAddNames: [...toAddNames],\n toDeleteNames: [...toDeleteNames],\n });\n\n if (toAdd.size !== 0) {\n const result = await context.github.issues.addLabels(\n context.issue({\n labels: [...toAddNames],\n }),\n );\n prLabels = result.data;\n }\n\n if (toDelete.size !== 0) {\n for (const toDeleteName of [...toDeleteNames]) {\n try {\n const result = await context.github.issues.removeLabel(\n context.issue({\n name: toDeleteName,\n }),\n );\n prLabels = result.data;\n } catch (err) {\n context.log.warn('error removing label', {\n err: err && err.message,\n });\n }\n }\n }\n } else {\n const newLabelNamesArray = [...newLabelNames];\n\n context.log.info('updateReviewStatus', {\n reviewGroup,\n toAdd: [...toAdd],\n toDelete: [...toDelete],\n oldLabels: prLabels.map((l: LabelResponse) => l.name),\n newLabelNames: newLabelNamesArray,\n });\n\n const result = await context.github.issues.replaceLabels(\n context.issue({\n labels: newLabelNamesArray,\n }),\n );\n prLabels = result.data;\n }\n }\n\n // if (toAdd.has('needsReview')) {\n // createInProgressStatusCheck(context);\n // } else if (\n // toDelete.has('needsReview') ||\n // (prLabels.length === 0 && toAdd.size === 1 && toAdd.has('approved'))\n // ) {\n await updateStatusCheckFromLabels(pr, context, repoContext, prLabels);\n // }\n\n return prLabels;\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { autoMergeIfPossible } from './autoMergeIfPossible';\nimport hasLabelInPR from './utils/hasLabelInPR';\n\nexport const autoApproveAndAutoMerge = async (\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n): Promise => {\n // const autoMergeLabel = repoContext.labels['merge/automerge'];\n const codeApprovedLabel = repoContext.labels['code/approved'];\n if (hasLabelInPR(pr.labels, codeApprovedLabel)) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n await autoMergeIfPossible(pr, context, repoContext);\n return true;\n }\n\n return false;\n};\n","import Webhooks from '@octokit/webhooks';\nimport parse from '@commitlint/parse';\nimport { PRHandler } from '../utils';\nimport syncLabel from './utils/syncLabel';\nimport { updateBodyCommitsNotes } from './utils/updateBody';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const readCommitsAndUpdateInfos: PRHandler<\n Webhooks.WebhookPayloadPullRequest\n> = async (pr, context, repoContext) => {\n // tmp.data[0].sha\n // tmp.data[0].commit.message\n\n const commits = await context.github.paginate(\n context.github.pulls.listCommits(\n context.issue({\n // A custom page size up to 100. Default is 30.\n per_page: 100,\n }),\n ),\n (res) => res.data,\n );\n\n const conventionalCommits = await Promise.all(\n commits.map((c) => parse(c.commit.message)),\n );\n\n const breakingChangesCommits: any = conventionalCommits.reduce(\n (acc, c, index) => {\n const breakingChangesNotes = c.notes.filter(\n (note: any) => note.title === 'BREAKING CHANGE',\n );\n if (breakingChangesNotes.length !== 0) {\n acc.push({ commit: commits[index], breakingChangesNotes });\n }\n\n return acc;\n },\n [],\n );\n\n const breakingChangesLabel = repoContext.labels['breaking-changes'];\n const newBody = updateBodyCommitsNotes(\n pr.body,\n breakingChangesCommits.length === 0\n ? ''\n : `Breaking Changes:\\n${breakingChangesCommits\n .map(({ commit, breakingChangesNotes }: any) =>\n breakingChangesNotes.map(\n (note: any) =>\n `- ${note.text.replace('\\n', ' ')} (${commit.sha})`,\n ),\n )\n .join('')}`,\n );\n\n await Promise.all([\n syncLabel(\n pr,\n context,\n breakingChangesCommits.length !== 0,\n breakingChangesLabel,\n ),\n updatePrIfNeeded(pr, context, repoContext, { body: newBody }),\n ]);\n\n // TODO auto update ! in front of : to signal a breaking change when https://github.com/conventional-changelog/commitlint/issues/658 is closed\n};\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoAssignPRToCreator } from './actions/autoAssignPRToCreator';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { autoApproveAndAutoMerge } from './actions/autoApproveAndAutoMerge';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function opened(app: Application): void {\n app.on(\n 'pull_request.opened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const fromRenovate = pr.head.ref.startsWith('renovate/');\n\n await Promise.all([\n autoAssignPRToCreator(pr, context, repoContext),\n editOpenedPR(pr, context, repoContext).then(() => {\n return readCommitsAndUpdateInfos(pr, context, repoContext);\n }),\n fromRenovate\n ? autoApproveAndAutoMerge(pr, context, repoContext).then(\n async (approved: boolean): Promise => {\n if (!approved) {\n await updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n });\n }\n },\n )\n : updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved', 'changesRequested'],\n }),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { parseBodyWithOptions } from './actions/utils/parseBody';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.closed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const repo = context.payload.repository;\n\n if (pr.merged) {\n const parsedBody =\n pr.head.repo.id === repo.id &&\n parseBodyWithOptions(pr.body, repoContext.config.prDefaultOptions);\n\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n parsedBody && parsedBody.options.deleteAfterMerge\n ? context.github.git\n .deleteRef(context.repo({ ref: `heads/${pr.head.ref}` }))\n .catch(() => {})\n : undefined,\n ]);\n } else {\n await Promise.all([\n repoContext.removePrFromAutomergeQueue(context, pr.number),\n updateReviewStatus(pr, context, repoContext, 'dev', {\n remove: ['needsReview'],\n }),\n ]);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function closed(app: Application): void {\n app.on(\n 'pull_request.reopened',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n await Promise.all([\n updateReviewStatus(pr, context, repoContext, 'dev', {\n add: ['needsReview'],\n remove: ['approved'],\n }),\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequested(app: Application): void {\n app.on(\n 'pull_request.review_requested',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n\n // ignore if sender is self (dismissed review rerequest review)\n if (sender.type === 'Bot') return;\n\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n const shouldWait = false;\n // repoContext.reviewShouldWait(reviewerGroup, pr.requested_reviewers, { includesWaitForGroups: true });\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup &&\n review.state === 'REQUEST_CHANGES' &&\n // In case this is a rerequest for review\n review.user.login !== reviewer.login,\n );\n\n if (!hasChangesRequestedInReviews) {\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', !shouldWait && 'requested'],\n remove: ['approved', 'changesRequested'],\n });\n }\n }\n\n if (sender.login === reviewer.login) return;\n\n if (!shouldWait && repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:eyes: ${repoContext.slack.mention(\n sender.login,\n )} requests your review on ${repoContext.slack.prLink(\n pr,\n context,\n )} !\\n> ${pr.title}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewRequestRemoved(app: Application): void {\n app.on(\n 'pull_request.review_request_removed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).requested_reviewer;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n },\n );\n\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const hasApprovedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'APPROVED',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n hasApprovedInReviews;\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: [\n // if changes requested by the one which requests was removed\n hasChangesRequestedInReviews && 'changesRequested',\n // if was already approved by another member in the group and has no other requests waiting\n approved && 'approved',\n ],\n // remove labels if has no other requests waiting\n remove: [\n approved && 'needsReview',\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n 'requested',\n ],\n });\n }\n\n if (sender.login === reviewer.login) return;\n\n if (repoContext.slack) {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull_and_crossbones: ${repoContext.slack.mention(\n sender.login,\n )} removed the request for your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewSubmitted(app: Application): void {\n app.on(\n 'pull_request_review.submitted',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const { user: reviewer, state } = (context.payload as any).review;\n if (pr.user.login === reviewer.login) return;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n let merged;\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const hasRequestedReviewsForGroup = repoContext.reviewShouldWait(\n reviewerGroup,\n pr.requested_reviewers,\n {\n includesReviewerGroup: true,\n // TODO reenable this when accepted can notify request review to slack (dev accepted => design requested) and flag to disable for label (approved design ; still waiting for dev ?)\n // includesWaitForGroups: true,\n },\n );\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n const approved =\n !hasRequestedReviewsForGroup &&\n !hasChangesRequestedInReviews &&\n state === 'approved';\n\n const newLabels = await updateReviewStatus(\n pr,\n context,\n repoContext,\n reviewerGroup,\n {\n add: [\n approved && 'approved',\n state === 'changes_requested' && 'changesRequested',\n ],\n remove: [\n approved && 'needsReview',\n !(\n hasRequestedReviewsForGroup || state === 'changes_requested'\n ) && 'requested',\n state === 'approved' &&\n !hasChangesRequestedInReviews &&\n 'changesRequested',\n state === 'changes_requested' && 'approved',\n ],\n },\n );\n\n if (approved && !hasChangesRequestedInReviews) {\n merged = await autoMergeIfPossible(\n pr,\n context,\n repoContext,\n newLabels,\n );\n }\n }\n\n const mention = repoContext.slack.mention(reviewer.login);\n const prUrl = repoContext.slack.prLink(pr, context);\n\n const message = (() => {\n if (state === 'changes_requested') {\n return `:x: ${mention} requests changes on ${prUrl}`;\n }\n if (state === 'approved') {\n return `:clap: :white_check_mark: ${mention} approves ${prUrl}${\n merged ? ' and PR is merged :tada:' : ''\n }`;\n }\n return `:speech_balloon: ${mention} commented on ${prUrl}`;\n })();\n\n repoContext.slack.postMessage(pr.user.login, message);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { updateReviewStatus } from './actions/updateReviewStatus';\n\nexport default function reviewDismissed(app: Application): void {\n app.on(\n 'pull_request_review.dismissed',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n const reviewer = (context.payload as any).review.user;\n\n const reviewerGroup = repoContext.getReviewerGroup(reviewer.login);\n\n if (reviewerGroup && repoContext.config.labels.review[reviewerGroup]) {\n const { data: reviews } = await context.github.pulls.listReviews(\n context.issue({ per_page: 50 }),\n );\n const hasChangesRequestedInReviews = reviews.some(\n (review) =>\n repoContext.getReviewerGroup(review.user.login) ===\n reviewerGroup && review.state === 'REQUEST_CHANGES',\n );\n\n await updateReviewStatus(pr, context, repoContext, reviewerGroup, {\n add: ['needsReview', 'requested'],\n remove: [\n !hasChangesRequestedInReviews && 'changesRequested',\n 'approved',\n ],\n });\n }\n\n if (repoContext.slack) {\n if (sender.login === reviewer.login) {\n repoContext.slack.postMessage(\n pr.user.login,\n `:skull: ${repoContext.slack.mention(\n reviewer.login,\n )} dismissed his review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n } else {\n repoContext.slack.postMessage(\n reviewer.login,\n `:skull: ${repoContext.slack.mention(\n sender.login,\n )} dismissed your review on ${repoContext.slack.prLink(\n pr,\n context,\n )}`,\n );\n }\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestChange } from './utils';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { readCommitsAndUpdateInfos } from './actions/readCommitsAndUpdateInfos';\n\nexport default function synchronize(app: Application): void {\n app.on(\n 'pull_request.synchronize',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n // old and new sha\n // const { before, after } = context.payload;\n const previousSha = (context.payload as any).before as string;\n\n await Promise.all([\n editOpenedPR(pr, context, repoContext, previousSha),\n // addStatusCheckToLatestCommit\n updateStatusCheckFromLabels(\n pr,\n context,\n repoContext,\n pr.labels,\n previousSha,\n ),\n\n readCommitsAndUpdateInfos(pr, context, repoContext),\n ]);\n\n // call autoMergeIfPossible to re-add to the queue when push is fixed\n await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { editOpenedPR } from './actions/editOpenedPR';\nimport { createHandlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function edited(app: Application): void {\n app.on(\n 'pull_request.edited',\n createHandlerPullRequestChange(\n async (pr, context, repoContext): Promise => {\n const sender = context.payload.sender;\n if (\n sender.type === 'Bot' &&\n sender.login === `${process.env.REVIEWFLOW_NAME}[bot]`\n ) {\n return;\n }\n\n const { skipAutoMerge } = await editOpenedPR(pr, context, repoContext);\n if (!skipAutoMerge) await autoMergeIfPossible(pr, context, repoContext);\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Context, Octokit } from 'probot';\nimport { RepoContext } from '../../context/repoContext';\nimport { updateBody } from './utils/updateBody';\nimport { Options } from './utils/prOptions';\nimport { updatePrIfNeeded } from './updatePr';\n\nexport const updatePrBody = async <\n E extends Webhooks.WebhookPayloadPullRequest\n>(\n pr: Octokit.PullsGetResponse,\n context: Context,\n repoContext: RepoContext,\n updateOptions: Partial>,\n): Promise => {\n const { body } = updateBody(\n pr.body,\n repoContext.config.prDefaultOptions,\n undefined,\n updateOptions,\n );\n\n await updatePrIfNeeded(pr, context, repoContext, { body });\n};\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { handlerPullRequestChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\nimport { updateStatusCheckFromLabels } from './actions/updateStatusCheckFromLabels';\nimport { updatePrBody } from './actions/updatePrBody';\nimport hasLabelInPR from './actions/utils/hasLabelInPR';\n\nexport default function labelsChanged(app: Application): void {\n app.on(\n ['pull_request.labeled', 'pull_request.unlabeled'],\n async (context: Context) => {\n const sender = context.payload.sender;\n const fromRenovate =\n sender.type === 'Bot' && sender.login === 'renovate[bot]';\n context.payload.pull_request.head.ref.startsWith('renovate/');\n\n if (sender.type === 'Bot' && !fromRenovate) {\n return;\n }\n\n await handlerPullRequestChange(context, async (pr, repoContext) => {\n const label = (context.payload as any).label;\n if (fromRenovate) {\n const codeApprovedLabel = repoContext.labels['code/approved'];\n const autoMergeLabel = repoContext.labels['merge/automerge'];\n const autoMergeSkipCiLabel = repoContext.labels['merge/skip-ci'];\n if (context.payload.action === 'labeled') {\n if (codeApprovedLabel && label.id === codeApprovedLabel.id) {\n // const { data: reviews } = await context.github.pulls.listReviews(\n // context.issue({ per_page: 1 }),\n // );\n // if (reviews.length !== 0) {\n await context.github.pulls.createReview(\n context.issue({ event: 'APPROVE' }),\n );\n if (autoMergeSkipCiLabel) {\n await context.github.issues.addLabels(\n context.issue({ labels: [autoMergeSkipCiLabel.name] }),\n );\n }\n await updateStatusCheckFromLabels(pr, context, repoContext);\n await updatePrBody(pr, context, repoContext, {\n autoMergeWithSkipCi: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n autoMerge: hasLabelInPR(pr.labels, autoMergeLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMerge,\n });\n // }\n } else if (autoMergeLabel && label.id === autoMergeLabel.id) {\n await updatePrBody(pr, context, repoContext, {\n autoMerge: true,\n // force label to avoid racing events (when both events are sent in the same time, reviewflow treats them one by one but the second event wont have its body updated)\n // Note: si c'est renovate qui ajoute le label autoMerge, le label codeApprovedLabel n'aurait pu etre ajouté que par renovate également (on est a quelques secondes de l'ouverture de la pr par renovate)\n autoMergeWithSkipCi: hasLabelInPR(pr.labels, codeApprovedLabel)\n ? true\n : repoContext.config.prDefaultOptions.autoMergeWithSkipCi,\n });\n }\n await autoMergeIfPossible(pr, context, repoContext);\n }\n return;\n }\n\n if (repoContext.protectedLabelIds.includes(label.id)) {\n if (context.payload.action === 'labeled') {\n await context.github.issues.removeLabel(\n context.issue({ name: label.name }),\n );\n } else {\n await context.github.issues.addLabels(\n context.issue({ labels: [label.name] }),\n );\n }\n return;\n }\n\n await updateStatusCheckFromLabels(pr, context, repoContext);\n\n const featureBranchLabel = repoContext.labels['feature-branch'];\n const automergeLabel = repoContext.labels['merge/automerge'];\n const skipCiLabel = repoContext.labels['merge/skip-ci'];\n\n const option = (() => {\n if (featureBranchLabel && label.id === featureBranchLabel.id)\n return 'featureBranch';\n if (automergeLabel && label.id === automergeLabel.id)\n return 'autoMerge';\n if (skipCiLabel && label.id === skipCiLabel.id)\n return 'autoMergeWithSkipCi';\n return null;\n })();\n\n if (option) {\n await updatePrBody(pr, context, repoContext, {\n [option]: context.payload.action === 'labeled',\n });\n } else if (context.payload.action === 'labeled') {\n if (\n repoContext.labels['merge/automerge'] &&\n label.id === repoContext.labels['merge/automerge'].id\n ) {\n await autoMergeIfPossible(pr, context, repoContext);\n }\n }\n });\n },\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checkrunCompleted(app: Application): void {\n app.on(\n 'check_run.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_run.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_run.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport { createHandlerPullRequestsChange } from './utils';\nimport { autoMergeIfPossible } from './actions/autoMergeIfPossible';\n\nexport default function checksuiteCompleted(app: Application): void {\n app.on(\n 'check_suite.completed',\n createHandlerPullRequestsChange(\n (context) => context.payload.check_suite.pull_requests,\n async (context, repoContext) => {\n await Promise.all(\n context.payload.check_suite.pull_requests.map((pr) =>\n context.github.pulls\n .get(\n context.repo({\n number: pr.number,\n }),\n )\n .then((prResult) => {\n return autoMergeIfPossible(prResult.data, context, repoContext);\n }),\n ),\n );\n },\n ),\n );\n}\n","import Webhooks from '@octokit/webhooks';\nimport { Application, Context } from 'probot';\nimport { LockedMergePr } from '../context/repoContext';\nimport { createHandlerPullRequestsChange } from './utils';\n\nconst isSameBranch = (\n context: Context,\n lockedPr: LockedMergePr,\n): boolean => {\n if (!lockedPr) return false;\n return !!context.payload.branches.find((b) => b.name === lockedPr.branch);\n};\n\nexport default function status(app: Application): void {\n app.on(\n 'status',\n createHandlerPullRequestsChange(\n (context, repoContext): LockedMergePr[] => {\n const lockedPr = repoContext.getMergeLockedPr();\n if (!lockedPr) return [];\n\n if (\n context.payload.state !== 'loading' &&\n isSameBranch(context, lockedPr)\n ) {\n return [lockedPr];\n }\n\n return [];\n },\n (context, repoContext): void => {\n const lockedPr = repoContext.getMergeLockedPr();\n // check if changed\n if (isSameBranch(context, lockedPr)) {\n repoContext.reschedule(context, lockedPr);\n }\n },\n ),\n );\n}\n","import { Application } from 'probot';\nimport openedHandler from './pr-handlers/opened';\nimport closedHandler from './pr-handlers/closed';\nimport reopenedHandler from './pr-handlers/reopened';\nimport reviewRequestedHandler from './pr-handlers/reviewRequested';\nimport reviewRequestRemovedHandler from './pr-handlers/reviewRequestRemoved';\nimport reviewSubmittedHandler from './pr-handlers/reviewSubmitted';\nimport reviewDismissedHandler from './pr-handlers/reviewDismissed';\nimport synchromizeHandler from './pr-handlers/synchronize';\nimport editedHandler from './pr-handlers/edited';\nimport labelsChanged from './pr-handlers/labelsChanged';\nimport checkrunCompleted from './pr-handlers/checkrunCompleted';\nimport checksuiteCompleted from './pr-handlers/checksuiteCompleted';\nimport status from './pr-handlers/status';\n\nexport default function initApp(app: Application): void {\n openedHandler(app);\n closedHandler(app);\n reopenedHandler(app);\n reviewRequestedHandler(app);\n reviewRequestRemovedHandler(app);\n\n // app.on('pull_request.closed', async context => {\n\n // });\n\n // app.on('pull_request.reopened', async context => {\n\n // });\n\n reviewSubmittedHandler(app);\n reviewDismissedHandler(app);\n labelsChanged(app);\n synchromizeHandler(app);\n editedHandler(app);\n\n checkrunCompleted(app);\n checksuiteCompleted(app);\n status(app);\n}\n","import 'dotenv/config';\nimport { Probot, Application } from 'probot';\nimport mongoInit from './mongo';\nimport appRouter from './appRouter';\nimport initApp from './initApp';\n\nif (!process.env.REVIEWFLOW_NAME) process.env.REVIEWFLOW_NAME = 'reviewflow';\nconsole.log({ name: process.env.REVIEWFLOW_NAME });\n\n// const getConfig = require('probot-config')\n// const { MongoClient } = require('mongodb');\n\n// const connect = MongoClient.connect(process.env.MONGO_URL);\n// const db = connect.then(client => client.db(process.env.MONGO_DB));\n\n// let config = await getConfig(context, 'reviewflow.yml');\n\n// eslint-disable-next-line import/no-commonjs\nProbot.run(\n (app: Application): void => {\n const mongoStores = mongoInit();\n appRouter(app, mongoStores);\n initApp(app);\n },\n);\n"],"names":["process","env","MONGO_DB","Error","init","config","Map","MONGO_HOST","MONGO_PORT","MONGO_USER","set","MONGO_PASSWORD","connection","MongoConnection","Layout","lang","title","NAME","children","GITHUB_CLIENT_ID","GITHUB_CLIENT_SECRET","oauth2","create","client","id","secret","auth","tokenHost","tokenPath","authorizePath","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","AUTH_SECRET_KEY","signPromisified","sign","verifyPromisified","verify","secure","SECURE_COOKIE","createRedirectUri","req","strategy","host","hostname","PORT","readAuthCookie","cookie","cookies","algorithm","audience","headers","appRouter","app","router","route","api","use","cookieParser","get","res","redirect","authInfo","octokit","Octokit","accessToken","data","repos","list","per_page","send","renderToStaticMarkup","map","repo","owner","login","name","length","state","maxAge","httpOnly","redirectUri","githubAuth","authorizationCode","authorizeURL","redirect_uri","scope","query","error","error_description","code","cookieName","clearCookie","result","getToken","access_token","user","users","getAuthenticated","token","time","Date","now","expiresIn","params","repository","status","permissions","admin","data2","apps","getRepoInstallation","catch","err","undefined","REVIEWFLOW_NAME","slackToken","ORNIKAR_SLACK_TOKEN","autoAssignToCreator","trimTitle","ignoreRepoPattern","requiresReviewRequest","prDefaultOptions","featureBranch","autoMergeWithSkipCi","autoMerge","deleteAfterMerge","parsePR","regExp","summary","bot","statusInfoFromMatch","match","issue","inBody","url","groups","dev","JulienBreux","ORNIKAR_EMAIL_DOMAIN","CamilSadiki","busser","abarreir","arthurflachs","damienorny","darame07","Pixy","Radyum","christophehurpeau","HugoGarrido","LentnerStefan","CorentinAndre","Mxime","vlbr","mdcarter","design","jperriere","CoralineColasse","Lenamari","teams","ops","logins","labels","backends","frontends","waitForGroups","color","description","duplicate","documentation","rfc","bug","enhancement","question","wontfix","review","ci","inProgress","succeeded","failed","needsReview","requested","changesRequested","approved","tilap","orgsConfigs","ornikar","options","optionsRegexps","option","regexp","RegExp","optionsLabels","label","commentStart","commentEnd","regexpCols","regexpReviewflowCol","parseOptions","content","defaultConfig","reduce","acc","exec","parseBody","reviewFlowCol","reviewflowContent","ending","reviewFlowColMatch","reviewflowContentCol","reviewflowContentColPrefix","reviewflowContentColSuffix","parseBodyWithOptions","parsedBody","breakingChanges","replace","trim","hasLabelInPR","prLabels","some","l","hasFailedStatusOrChecks","pr","context","checks","github","listForRef","ref","head","sha","failedChecks","check_runs","filter","check","conclusion","log","info","combinedStatus","getCombinedStatusForRef","failedStatuses","statuses","autoMergeIfPossible","repoContext","autoMergeLabel","debug","prId","prNumber","number","removePrFromAutomergeQueue","createMergeLockPrFromPr","branch","hasNeedsReview","hasRequestedReview","lockedPr","getMergeLockedPr","pushAutomergeQueue","addMergeLockPr","mergeable","prResult","pulls","pull_number","merged","mergeable_state","reschedule","startsWith","body","includes","renovateRebaseBody","issues","update","base","merge","mergeResult","merge_method","commit_title","commit_message","Boolean","message","getLabelsForRepo","listLabelsForRepo","initRepoLabels","finalLabels","labelKey","labelConfig","Object","entries","labelColor","slice","existingLabel","find","createLabel","current_name","updateLabel","getKeys","o","keys","ExcludesFalsy","voidTeamSlack","mention","postMessage","Promise","resolve","prLink","initTeamSlack","githubLoginToSlackEmail","groupName","assign","slackClient","WebClient","allUsers","limit","members","values","email","member","profile","console","warn","im","open","channel","membersMap","getUserFromGithubLogin","githubLogin","text","DRY_RUN","chat","username","html_url","payload","initTeamContext","slackPromise","githubLoginToGroup","forEach","githubLoginToTeams","teamName","push","getReviewerGroups","githubLogins","Set","getReviewerGroup","getTeamsForLogin","reviewShouldWait","reviewerGroup","requestedReviewers","includesReviewerGroup","includesWaitForGroups","requestedReviewerGroups","request","group","slack","orgContextsPromise","orgContexts","obtainOrgContext","existingTeamContext","existingPromise","promise","then","orgContext","delete","initRepoContext","reviewGroupNames","needsReviewLabelIds","key","requestedReviewLabelIds","changesRequestedLabelIds","approvedReviewLabelIds","protectedLabelIds","labelIdToGroupName","reviewGroupLabels","lock","Lock","lockMergePr","automergeQueue","lockPROrPRS","prIdOrIds","prNumberOrPrNumbers","callback","reject","logInfos","repoName","createReleaseCallback","release","setTimeout","String","hasChangesRequestedReview","hasApprovesReview","getNeedsReviewGroupNames","shift","value","p","repoContextsPromise","repoContexts","shouldIgnoreRepo","orgConfig","ignoreRepoRegexp","test","obtainRepoContext","existingRepoContext","handlerPullRequestChange","pull_request","createHandlerPullRequestChange","createHandlerPullRequestsChange","getPullRequests","prs","autoAssignPRToCreator","assignees","type","addAssignees","cleanTitle","s","arg1","arg2","toUpperCase","toLowerCase","toMarkdownOptions","join","toMarkdownInfos","infos","updateBody","updateOptions","parsed","infosAndCommitNotesParagraph","updatedOptions","updateBodyCommitsNotes","commitNotes","reviewflowContentColReplaced","updatePrIfNeeded","hasDiffInTitle","hasDiffInBody","diff","syncLabel","shouldHaveLabel","prHasLabel","onRemove","onAdd","removeLabel","response","addLabels","createStatus","target_url","editOpenedPR","previousSha","skipAutoMerge","isPrFromBot","errorRule","rule","date","toISOString","hasLintPrCheck","all","head_sha","started_at","completed_at","output","featureBranchLabel","automergeLabel","skipCiLabel","prHasFeatureBranchLabel","prHasSkipCiLabel","prHasAutoMergeLabel","defaultOptions","addStatusCheck","hasPrCheck","created_at","updateStatusCheckFromLabels","createFailedStatusCheck","requested_reviewers","rr","needsReviewGroupNames","updateReviewStatus","reviewGroup","add","labelsToAdd","remove","labelsToRemove","newLabelNames","toAdd","toAddNames","toDelete","toDeleteNames","getLabelFromKey","reviewConfig","prLabel","existing","team","toDeleteName","newLabelNamesArray","oldLabels","replaceLabels","autoApproveAndAutoMerge","codeApprovedLabel","createReview","event","readCommitsAndUpdateInfos","commits","paginate","listCommits","conventionalCommits","c","parse","commit","breakingChangesCommits","index","breakingChangesNotes","notes","note","breakingChangesLabel","newBody","opened","on","fromRenovate","closed","git","deleteRef","reviewRequested","sender","reviewer","requested_reviewer","reviews","listReviews","hasChangesRequestedInReviews","reviewRequestRemoved","hasRequestedReviewsForGroup","hasApprovedInReviews","reviewSubmitted","newLabels","prUrl","reviewDismissed","synchronize","before","edited","updatePrBody","labelsChanged","autoMergeSkipCiLabel","action","checkrunCompleted","check_run","pull_requests","checksuiteCompleted","check_suite","isSameBranch","branches","b","initApp","openedHandler","closedHandler","reopenedHandler","reviewRequestedHandler","reviewRequestRemovedHandler","reviewSubmittedHandler","reviewDismissedHandler","synchromizeHandler","editedHandler","Probot","run","mongoStores","mongoInit"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA,AAGA;;;;;;;AAYA,IAAI,CAACA,OAAO,CAACC,GAAR,CAAYC,QAAjB,EAA2B;QACnB,IAAIC,KAAJ,CAAU,oCAAV,CAAN;;;AAGF,AAAe,SAASC,IAAT,GAA6B;QACpCC,MAAM,GAAG,IAAIC,GAAJ,CAAQ,CACrB,CAAC,MAAD,EAASN,OAAO,CAACC,GAAR,CAAYM,UAAZ,IAA0B,WAAnC,CADqB,EAErB,CAAC,MAAD,EAASP,OAAO,CAACC,GAAR,CAAYO,UAAZ,IAA0B,OAAnC,CAFqB,EAGrB,CAAC,UAAD,EAAaR,OAAO,CAACC,GAAR,CAAYC,QAAzB,CAHqB,CAAR,CAAf;;MAKIF,OAAO,CAACC,GAAR,CAAYQ,UAAhB,EAA4B;IAC1BJ,MAAM,CAACK,GAAP,CAAW,MAAX,EAAmBV,OAAO,CAACC,GAAR,CAAYQ,UAA/B;IACAJ,MAAM,CAACK,GAAP,CAAW,UAAX,EAAuBV,OAAO,CAACC,GAAR,CAAYU,cAAnC;;;QAEIC,UAAU,GAAG,IAAIC,yBAAJ,CAAoBR,MAApB,CAAnB,CAV0C;;;;;;SAkBnC;IAAEO;GAAT;;;AC9Ba,SAASE,MAAT,CAAgB;EAC7BC,IAAI,GAAG,IADsB;EAE7BC,KAAK,GAAGhB,OAAO,CAACC,GAAR,CAAYgB,IAFS;EAG7BC;CAHa,EAIC;SAEZ;IAAM,IAAI,EAAEH;KACV,kCACE;IAAM,OAAO,EAAC;IADhB,EAEE;IAAM,IAAI,EAAC,QAAX;IAAoB,OAAO,EAAC;IAF9B,EAGE,mCAAQC,KAAR,CAHF,EAIE;IACE,GAAG,EAAC,YADN;IAEE,IAAI,EAAC,UAFP;IAGE,IAAI,EAAC;IAPT,EASE,mCAAS;yFAAT,CATF,CADF,EAaE,kCAAOE,QAAP,CAbF,CADF;;;ACXF,IAAI,CAAClB,OAAO,CAACC,GAAR,CAAYkB,gBAAjB,EAAmC;QAC3B,IAAIhB,KAAJ,CAAU,wCAAV,CAAN;;;AAGF,IAAI,CAACH,OAAO,CAACC,GAAR,CAAYmB,oBAAjB,EAAuC;QAC/B,IAAIjB,KAAJ,CAAU,4CAAV,CAAN;;;AAGF,AAAO,MAAMkB,MAAM,GAAGC,mBAAM,CAAC;EAC3BC,MAAM,EAAE;IACNC,EAAE,EAAExB,OAAO,CAACC,GAAR,CAAYkB,gBADV;IAENM,MAAM,EAAEzB,OAAO,CAACC,GAAR,CAAYmB;GAHK;EAK3BM,IAAI,EAAE;IACJC,SAAS,EAAE,oBADP;IAEJC,SAAS,EAAE,2BAFP;IAGJC,aAAa,EAAE;;CARS,CAArB;;ACPP,MAAMC,sBAAsB,GAAGC,cAAS,CAACC,kBAAD,CAAxC;AAEA,AAKO,eAAeC,SAAf,CAAyBC,IAAzB,EAAwD;QACvDC,MAAM,GAAG,MAAML,sBAAsB,CAACI,IAAD,CAA3C;SACOC,MAAM,CAACC,QAAP,CAAgB,KAAhB,CAAP;;;ACZF;AAEA;AAYA,IAAI,CAACpC,OAAO,CAACC,GAAR,CAAYoC,eAAjB,EAAkC;QAC1B,IAAIlC,KAAJ,CAAU,uCAAV,CAAN;;;AAGF,MAAMkC,eAAuB,GAAGrC,OAAO,CAACC,GAAR,CAAYoC,eAA5C;AAEA,MAAMC,eAAoB,GAAGP,cAAS,CAACQ,iBAAD,CAAtC;AACA,MAAMC,iBAAsB,GAAGT,cAAS,CAACU,mBAAD,CAAxC;AAEA,MAAMC,MAAM,GACV,CAAC,CAAC1C,OAAO,CAACC,GAAR,CAAY0C,aAAd,IAA+B3C,OAAO,CAACC,GAAR,CAAY0C,aAAZ,KAA8B,OAD/D;;AAGA,MAAMC,iBAAiB,GAAG,CAACC,GAAD,EAAeC,QAAf,KAAoC;QACtDC,IAAI,GAAI,OAAML,MAAM,GAAG,GAAH,GAAS,EAAG,MAAKG,GAAG,CAACG,QAAS,GACtDH,GAAG,CAACG,QAAJ,KAAiB,WAAjB,GAAgC,IAAGhD,OAAO,CAACC,GAAR,CAAYgD,IAAK,EAApD,GAAwD,EACzD,EAFD;SAGQ,GAAEF,IAAK,QAAOD,QAAS,iBAA/B;CAJF;;AAaA,MAAMI,cAAc,GAAG,CACrBL,GADqB,EAErBC,QAFqB,KAGyB;QACxCK,MAAM,GAAGN,GAAG,CAACO,OAAJ,CAAa,QAAON,QAAS,EAA7B,CAAf;MACI,CAACK,MAAL,EAAa;SAENX,iBAAiB,CAACW,MAAD,EAASd,eAAT,EAA0B;IAChDgB,SAAS,EAAE,OADqC;IAEhDC,QAAQ,EAAET,GAAG,CAACU,OAAJ,CAAY,YAAZ;GAFY,CAAxB;CAPF;;AAaA,AAAe,eAAeC,SAAf,CACbC,GADa,EAGE;QACTC,MAAM,GAAGD,GAAG,CAACE,KAAJ,CAAU,MAAV,CAAf;QACMC,GAAG,GAAG,MAAMH,GAAG,CAAC/B,IAAJ,EAAlB;EACAgC,MAAM,CAACG,GAAP,CAAWC,YAAY,EAAvB;EAEAJ,MAAM,CAACK,GAAP,CAAW,GAAX,EAAgB,CAAClB,GAAD,EAAMmB,GAAN,KAAc;IAC5BA,GAAG,CAACC,QAAJ,CAAa,KAAb;GADF;EAIAP,MAAM,CAACK,GAAP,CAAW,KAAX,EAAkB,OAAOlB,GAAP,EAAYmB,GAAZ,KAAoB;UAE9BE,QAAQ,GAAG,MAAMhB,cAAc,CAACL,GAAD,OAArC;;QACI,CAACqB,QAAL,EAAe;aACNF,GAAG,CAACC,QAAJ,CAAa,eAAb,CAAP;;;UAGIE,OAAO,GAAG,IAAIC,cAAJ,CAAY;MAAE1C,IAAI,EAAG,SAAQwC,QAAQ,CAACG,WAAY;KAAlD,CAAhB;UACM;MAAEC;QAAS,MAAMH,OAAO,CAACI,KAAR,CAAcC,IAAd,CAAmB;MAAEC,QAAQ,EAAE;KAA/B,CAAvB;IAEAT,GAAG,CAACU,IAAJ,CACEC,2BAAoB,CAClB,oBAAC,MAAD,QACE,iCACE,oDADF,EAEE,gCACGL,IAAI,CAACM,GAAL,CAAUC,IAAD,IACR;MAAI,GAAG,EAAEA,IAAI,CAACrD;OACZ;MACE,IAAI,EAAG,sBAAqBqD,IAAI,CAACC,KAAL,CAAWC,KAAM,IAAGF,IAAI,CAACG,IAAK;OAEzDH,IAAI,CAACG,IAHR,CADF,CADD,CADH,CAFF,CADF,EAeGV,IAAI,CAACW,MAAL,KAAgB,GAAhB,IACC,iFAhBJ,CADkB,CADtB;GAVF;EAmCAvB,MAAM,CAACK,GAAP,CAAW,WAAX,EAAwB,OAAOlB,GAAP,EAAqBmB,GAArB,KAAuC;QAEzD,MAAMd,cAAc,CAACL,GAAD,OAAxB,EAAyC;aAChCmB,GAAG,CAACC,QAAJ,CAAa,SAAb,CAAP;;;UAGIiB,KAAK,GAAG,MAAMjD,SAAS,CAAC,CAAD,CAA7B;IACA+B,GAAG,CAACb,MAAJ,CAAY,QAAD,IAAiB,IAAG+B,KAAM,EAArC,QAAkD;MAChDC,MAAM,QAD0C;MAEhDC,QAAQ,EAAE,IAFsC;MAGhD1C;KAHF;UAMM2C,WAAW,GAAGC,MAAA,CAAkBC,iBAAlB,CAAoCC,YAApC,CAAiD;MACnEC,YAAY,EAAE7C,iBAAiB,CAACC,GAAD,OADoC;MAEnE6C,KAAK,EAAE,gBAF4D;MAGnER,KAHmE;;;;;KAAjD,CAApB,CAb6D;;IAyB7DlB,GAAG,CAACC,QAAJ,CAAaoB,WAAb;GAzBF;EA4BA3B,MAAM,CAACK,GAAP,CAAW,oBAAX,EAAiC,OAAOlB,GAAP,EAAYmB,GAAZ,KAAoB;QAC/CnB,GAAG,CAAC8C,KAAJ,CAAUC,KAAd,EAAqB;MACnB5B,GAAG,CAACU,IAAJ,CAAS7B,GAAG,CAAC8C,KAAJ,CAAUE,iBAAnB;;;;UAKIC,IAAI,GAAGjD,GAAG,CAAC8C,KAAJ,CAAUG,IAAvB;UACMZ,KAAK,GAAGrC,GAAG,CAAC8C,KAAJ,CAAUT,KAAxB;UACMa,UAAU,GAAI,QAAD,IAAiB,IAAGb,KAAM,EAA7C;UACM/B,MAAM,GAAGN,GAAG,CAACO,OAAJ,IAAeP,GAAG,CAACO,OAAJ,CAAY2C,UAAZ,CAA9B;;QACI,CAAC5C,MAAL,EAAa;;MAEXa,GAAG,CAACU,IAAJ,CACE,yFADF;;;;IAKFV,GAAG,CAACgC,WAAJ,CAAgBD,UAAhB;UAEME,MAAM,GAAG,MAAMX,MAAA,CAAkBC,iBAAlB,CAAoCW,QAApC,CAA6C;MAChEJ,IADgE;MAEhEL,YAAY,EAAE7C,iBAAiB,CAACC,GAAD;KAFZ,CAArB;;QAKI,CAACoD,MAAL,EAAa;;MAEXjC,GAAG,CAACU,IAAJ,CACEC,2BAAoB,CAClB,oBAAC,MAAD,QACE,iEAC8B;QAAG,IAAI,EAAC;mBADtC,CADF,CADkB,CADtB;;;;UAYIN,WAAW,GAAG4B,MAAM,CAACE,YAA3B;UACMhC,OAAO,GAAG,IAAIC,cAAJ,CAAY;MAAE1C,IAAI,EAAG,SAAQ2C,WAAY;KAAzC,CAAhB;UACM+B,IAAI,GAAG,MAAMjC,OAAO,CAACkC,KAAR,CAAcC,gBAAd,CAA+B,EAA/B,CAAnB;UACMvB,KAAK,GAAGqB,IAAI,CAAC9B,IAAL,CAAUS,KAAxB;UAEMwB,KAAK,GAAG,MAAMjE,eAAe,CACjC;MAAEyC,KAAF;MAASV,WAAT;MAAsBmC,IAAI,EAAEC,IAAI,CAACC,GAAL;KADK,EAEjCrE,eAFiC,EAGjC;MACEgB,SAAS,EAAE,OADb;MAEEC,QAAQ,EAAET,GAAG,CAACU,OAAJ,CAAY,YAAZ,CAFZ;MAGEoD,SAAS,EAAE;KANoB,CAAnC;IAUA3C,GAAG,CAACb,MAAJ,CAAY,QAAD,IAAiB,EAA5B,EAA+BoD,KAA/B,EAAsC;MACpCnB,QAAQ,EAAE,IAD0B;MAEpC1C;KAFF;IAKAsB,GAAG,CAACC,QAAJ,CAAa,KAAb;GA3DF;EA8DAP,MAAM,CAACK,GAAP,CAAW,mCAAX,EAAgD,OAAOlB,GAAP,EAAYmB,GAAZ,KAAoB;UAE5DE,QAAQ,GAAG,MAAMhB,cAAc,CAACL,GAAD,OAArC;;QACI,CAACqB,QAAL,EAAe;aACNF,GAAG,CAACC,QAAJ,CAAa,WAAb,CAAP;;;UAGIE,OAAO,GAAG,IAAIC,cAAJ,CAAY;MAAE1C,IAAI,EAAG,SAAQwC,QAAQ,CAACG,WAAY;KAAlD,CAAhB;UACM;MAAEC;QAAS,MAAMH,OAAO,CAACI,KAAR,CAAcR,GAAd,CAAkB;MACvCe,KAAK,EAAEjC,GAAG,CAAC+D,MAAJ,CAAW9B,KADqB;MAEvCD,IAAI,EAAEhC,GAAG,CAAC+D,MAAJ,CAAWC;KAFI,CAAvB;;QAKI,CAACvC,IAAL,EAAW;aACFN,GAAG,CAAC8C,MAAJ,CAAW,GAAX,EAAgBpC,IAAhB,CACLC,2BAAoB,CAClB,oBAAC,MAAD,QACE,kDADF,CADkB,CADf,CAAP;;;QASE,CAACL,IAAI,CAACyC,WAAL,CAAiBC,KAAtB,EAA6B;aACpBhD,GAAG,CAAC8C,MAAJ,CAAW,GAAX,EAAgBpC,IAAhB,CACLC,2BAAoB,CAClB,oBAAC,MAAD,QACE,sGADF,CADkB,CADf,CAAP;;;UAWI;MAAEL,IAAI,EAAE2C;QAAU,MAAMrD,GAAG,CAACsD,IAAJ,CAC3BC,mBAD2B,CACP;MACnBrC,KAAK,EAAEjC,GAAG,CAAC+D,MAAJ,CAAW9B,KADC;MAEnBD,IAAI,EAAEhC,GAAG,CAAC+D,MAAJ,CAAWC;KAHS,EAK3BO,KAL2B,CAKpBC,GAAD,IAAS;aACP;QAAEP,MAAM,EAAEO,GAAG,CAACP,MAAd;QAAsBxC,IAAI,EAAEgD;OAAnC;KAN0B,CAA9B;;QASI,CAACL,KAAL,EAAY;aACHjD,GAAG,CAACU,IAAJ,CACLC,2BAAoB,CAClB,oBAAC,MAAD,QACE,iCACG3E,OAAO,CAACC,GAAR,CAAYsH,eADf,OACiC,OADjC,oCAEK,GAFL,EAGE;QACE,IAAI,EAAG,2BACLvH,OAAO,CAACC,GAAR,CAAYsH,eACb;gCANL,EASO,GATP,eADF,CADkB,CADf,CAAP;;;IAoBFvD,GAAG,CAACU,IAAJ,CACEC,2BAAoB,CAClB,oBAAC,MAAD,QACE,iCACE,gCAAK9B,GAAG,CAAC+D,MAAJ,CAAWC,UAAhB,CADF,CADF,CADkB,CADtB;GAjEF;;;AC7LF;AAIA,MAAMxG,MAAkE,GAAG;EACzEmH,UAAU,EAAExH,OAAO,CAACC,GAAR,CAAYwH,mBADiD;EAEzEC,mBAAmB,EAAE,IAFoD;EAGzEC,SAAS,EAAE,IAH8D;EAIzEC,iBAAiB,EAAE,mBAJsD;EAKzEC,qBAAqB,EAAE,IALkD;EAMzEC,gBAAgB,EAAE;IAChBC,aAAa,EAAE,KADC;IAEhBC,mBAAmB,EAAE,KAFL;IAGhBC,SAAS,EAAE,KAHK;IAIhBC,gBAAgB,EAAE;GAVqD;EAYzEC,OAAO,EAAE;IACPnH,KAAK,EAAE,CACL;MACEoH,MAAM;gGADR;MAIExC,KAAK,EAAE;QACL5E,KAAK,EAAE,8CADF;QAELqH,OAAO,EACL;;KARD,EAWL;MACEC,GAAG,EAAE,KADP;MAEEF,MAAM,EAAE,sCAFV;MAGExC,KAAK,EAAE;QACL5E,KAAK,EAAE,gCADF;QAELqH,OAAO,EAAE;OALb;MAOEvB,MAAM,EAAE,YAPV;MAQEyB,mBAAmB,EAAGC,KAAD,IAAW;cACxBC,KAAK,GAAGD,KAAK,CAAC,CAAD,CAAnB;;YACIC,KAAK,KAAK,YAAd,EAA4B;iBACnB;YACLzH,KAAK,EAAE,UADF;YAELqH,OAAO,EAAE;WAFX;;;eAKK;UACLK,MAAM,EAAE,IADH;UAELC,GAAG,EAAG,wCAAuCF,KAAM,EAF9C;UAGLzH,KAAK,EAAG,eAAcyH,KAAM,EAHvB;UAILJ,OAAO,EAAG,IAAGI,KAAM,0CAAyCA,KAAM;SAJpE;;KA3BC;GAbgE;EAmDzEG,MAAM,EAAE;IACNC,GAAG,EAAE;;MAEHC,WAAW,EAAG,eAAc9I,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAF1D;kBAGS,IAHT;MAIHC,WAAW,EAAE,IAJV;MAKHC,MAAM,EAAE,IALL;;;MAQHC,QAAQ,EAAG,YAAWlJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EARpD;MASHI,YAAY,EAAG,SAAQnJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EATrD;MAUHK,UAAU,EAAG,cAAapJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAVxD;uBAWe,UAAS/I,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAXzD;MAYHM,QAAQ,EAAG,QAAOrJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAZhD;MAaHO,IAAI,EAAG,gBAAetJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAbpD;MAcHQ,MAAM,EAAG,iBAAgBvJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAdvD;;;MAiBHS,iBAAiB,EAAG,aAAYxJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAjB9D;MAkBHU,WAAW,EAAG,OAAMzJ,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAlBlD;MAmBHW,aAAa,EAAG,SAAQ1J,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAnBtD;MAoBHY,aAAa,EAAG,WAAU3J,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EApBxD;MAqBHa,KAAK,EAAG,SAAQ5J,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EArB9C;MAsBHc,IAAI,EAAG,WAAU7J,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAtB/C;iBAuBS,iBAAgB/I,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAvB1D;MAwBHe,QAAQ,EAAG,gBAAe9J,OAAO,CAACC,GAAR,CAAY8I,oBAAqB;KAzBvD;IA2BNgB,MAAM,EAAE;MACNC,SAAS,EAAG,SAAQhK,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAD/C;MAENkB,eAAe,EAAG,WAAUjK,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAFvD;MAGNmB,QAAQ,EAAG,OAAMlK,OAAO,CAACC,GAAR,CAAY8I,oBAAqB,EAH5C;6BAIkB,eAAc/I,OAAO,CAACC,GAAR,CAAY8I,oBAAqB;;GAlFF;EAsFzEoB,KAAK,EAAE;IACLC,GAAG,EAAE;MACHC,MAAM,EAAE,CAAC,aAAD,EAAgB,UAAhB,EAA4B,aAA5B,EAA2C,QAA3C,CADL;MAEHC,MAAM,EAAE,CAAC,WAAD;KAHL;IAMLC,QAAQ,EAAE;MACRF,MAAM,EAAE,CACN,UADM,EAEN,cAFM,EAGN,YAHM,EAIN,eAJM,EAKN,UALM,EAMN,MANM,EAON,QAPM,CADA;MAURC,MAAM,EAAE,CAAC,eAAD;KAhBL;IAmBLE,SAAS,EAAE;MACTH,MAAM,EAAE,CACN,mBADM,EAEN,aAFM,EAGN,eAHM,EAIN,eAJM,EAKN,OALM,EAMN,MANM,EAON,SAPM,EAQN,UARM,CADC;MAWTC,MAAM,EAAE,CAAC,gBAAD;;GApH6D;EAwHzEG,aAAa,EAAE;IACb5B,GAAG,EAAE,EADQ;IAEbkB,MAAM,EAAE,CAAC,KAAD;GA1H+D;EA4HzEO,MAAM,EAAE;IACN9F,IAAI,EAAE;;;;;;;2BAOiB;QACnBQ,IAAI,EAAE,6BADa;QAEnB0F,KAAK,EAAE;OATL;+BAWqB;QACvB1F,IAAI,EAAE,iCADiB;QAEvB0F,KAAK,EAAE;OAbL;gCAesB;QACxB1F,IAAI,EAAE,kCADkB;QAExB0F,KAAK,EAAE;OAjBL;uBAmBa;QACf1F,IAAI,EAAE,yBADS;QAEf0F,KAAK,EAAE;OArBL;;;6BAyBmB;QACrB1F,IAAI,EAAE,2BADe;QAErB0F,KAAK,EAAE;OA3BL;iCA6BuB;QACzB1F,IAAI,EAAE,+BADmB;QAEzB0F,KAAK,EAAE;OA/BL;kCAiCwB;QAC1B1F,IAAI,EAAE,gCADoB;QAE1B0F,KAAK,EAAE;OAnCL;yBAqCe;QACjB1F,IAAI,EAAE,uBADW;QAEjB0F,KAAK,EAAE;OAvCL;;;mBA2CS;QACX1F,IAAI,EAAE,KADK;QAEX0F,KAAK,EAAE;OA7CL;uBA+Ca;QACf1F,IAAI,EAAE,SADS;QAEf0F,KAAK,EAAE;OAjDL;wBAmDc;QAChB1F,IAAI,EAAE,UADU;QAEhB0F,KAAK,EAAE;OArDL;;;yBAyDe;QACjB1F,IAAI,EAAE,kBADW;QAEjB0F,KAAK,EAAE;OA3DL;uBA6Da;QACf1F,IAAI,EAAE,mBADS;QAEf0F,KAAK,EAAE;OA/DL;;;wBAmEc;QAChB1F,IAAI,EAAE,gBADU;QAEhB0F,KAAK,EAAE;OArEL;;;0BAyEgB;QAClB1F,IAAI,EAAE,4BADY;QAElB2F,WAAW,EAAE,0DAFK;QAGlBD,KAAK,EAAE;OA5EL;MA8EJE,SAAS,EAAE;QACT5F,IAAI,EAAE,WADG;QAET2F,WAAW,EAAE,2CAFJ;QAGTD,KAAK,EAAE;OAjFL;MAmFJG,aAAa,EAAE;QACb7F,IAAI,EAAE,eADO;QAEb2F,WAAW,EAAE,4CAFA;QAGbD,KAAK,EAAE;OAtFL;MAwFJI,GAAG,EAAE;QACH9F,IAAI,EAAE,KADH;QAEH2F,WAAW,EAAE,sBAFV;QAGHD,KAAK,EAAE;OA3FL;MA6FJK,GAAG,EAAE;QACH/F,IAAI,EAAE,KADH;QAEH2F,WAAW,EAAE,yBAFV;QAGHD,KAAK,EAAE;OAhGL;MAkGJM,WAAW,EAAE;QACXhG,IAAI,EAAE,aADK;QAEX2F,WAAW,EAAE,wBAFF;QAGXD,KAAK,EAAE;OArGL;qBAuGW;QACb1F,IAAI,EAAE,aADO;QAEb2F,WAAW,EAAE,2BAFA;QAGbD,KAAK,EAAE;OA1GL;MA4GJO,QAAQ,EAAE;QACRjG,IAAI,EAAE,UADE;QAER2F,WAAW,EAAE,kCAFL;QAGRD,KAAK,EAAE;OA/GL;MAiHJQ,OAAO,EAAE;QACPlG,IAAI,EAAE,SADC;QAEP2F,WAAW,EAAE,4BAFN;QAGPD,KAAK,EAAE;;KArHL;IAyHNS,MAAM,EAAE;MACNC,EAAE,EAAE;QACFC,UAAU,EAAE,gBADV;QAEFC,SAAS,EAAE,YAFT;QAGFC,MAAM,EAAE;OAJJ;MAMN1C,GAAG,EAAE;QACH2C,WAAW,EAAE,mBADV;QAEHC,SAAS,EAAE,uBAFR;QAGHC,gBAAgB,EAAE,wBAHf;QAIHC,QAAQ,EAAE;OAVN;MAYN5B,MAAM,EAAE;QACNyB,WAAW,EAAE,qBADP;QAENC,SAAS,EAAE,yBAFL;QAGNC,gBAAgB,EAAE,0BAHZ;QAINC,QAAQ,EAAE;;;;CArQlB;;ACFA,MAAMtL,QAA4B,GAAG;EACnCqH,mBAAmB,EAAE,IADc;EAEnCC,SAAS,EAAE,IAFwB;EAGnCE,qBAAqB,EAAE,KAHY;EAInCC,gBAAgB,EAAE;IAChBC,aAAa,EAAE,KADC;IAEhBC,mBAAmB,EAAE,KAFL;IAGhBC,SAAS,EAAE,KAHK;IAIhBC,gBAAgB,EAAE;GARe;EAUnCC,OAAO,EAAE;IACPnH,KAAK,EAAE,CACL;MACEoH,MAAM;oGADR;MAIExC,KAAK,EAAE;QACL5E,KAAK,EAAE,8CADF;QAELqH,OAAO,EACL;;KARD;GAX0B;EAwBnCO,MAAM,EAAE;IACNC,GAAG,EAAE;MACHW,iBAAiB,EAAE,wBADhB;0BAEiB,yCAFjB;MAGHoC,KAAK,EAAE;;GA5BwB;EA+BnCnB,aAAa,EAAE;IACb5B,GAAG,EAAE;GAhC4B;EAkCnCsB,KAAK,EAAE,EAlC4B;EAmCnCG,MAAM,EAAE;IACN9F,IAAI,EAAE;;;;;;;2BAOiB;QACnBQ,IAAI,EAAE,6BADa;QAEnB0F,KAAK,EAAE;OATL;+BAWqB;QACvB1F,IAAI,EAAE,iCADiB;QAEvB0F,KAAK,EAAE;OAbL;gCAesB;QACxB1F,IAAI,EAAE,kCADkB;QAExB0F,KAAK,EAAE;OAjBL;uBAmBa;QACf1F,IAAI,EAAE,yBADS;QAEf0F,KAAK,EAAE;OArBL;;;yBAyBe;QACjB1F,IAAI,EAAE,kBADW;QAEjB0F,KAAK,EAAE;OA3BL;uBA6Ba;QACf1F,IAAI,EAAE,mBADS;QAEf0F,KAAK,EAAE;OA/BL;;;wBAmCc;QAChB1F,IAAI,EAAE,gBADU;QAEhB0F,KAAK,EAAE;OArCL;;;0BAyCgB;QAClB1F,IAAI,EAAE,4BADY;QAElB0F,KAAK,EAAE;;KA5CL;IAgDNS,MAAM,EAAE;MACNC,EAAE,EAAE;QACFC,UAAU,EAAE,gBADV;QAEFC,SAAS,EAAE,YAFT;QAGFC,MAAM,EAAE;OAJJ;MAMN1C,GAAG,EAAE;QACH2C,WAAW,EAAE,mBADV;QAEHC,SAAS,EAAE,uBAFR;QAGHC,gBAAgB,EAAE,wBAHf;QAIHC,QAAQ,EAAE;;;;CA7FlB;;ACQO,MAAME,WAAwC,GAAG;WACtDC,MADsD;qBAEtDtC;CAFK;AAKP,AAGA;;;;;;ACZO,MAAMuC,OAAkB,GAAG,CAChC,eADgC,EAEhC,qBAFgC,EAGhC,WAHgC,EAIhC,kBAJgC,CAA3B;AAMP,AAAO,MAAMC,cAAmD,GAAGD,OAAO,CAACnH,GAAR,CAChEqH,MAAD,KAAa;EACXjH,IAAI,EAAEiH,MADK;EAEXC,MAAM,EAAE,IAAIC,MAAJ,CAAY,mCAAkCF,MAAO,MAArD;CAFV,CADiE,CAA5D;AAOP,AAAO,MAAMG,aAAiD,GAAG,CAC/D;EAAEpH,IAAI,EAAE,eAAR;EAAyBqH,KAAK,EAAE;CAD+B,EAE/D;EACErH,IAAI,EAAE,qBADR;EAEEqH,KAAK,EAAE;CAJsD,EAM/D;EACErH,IAAI,EAAE,WADR;EAEEqH,KAAK,EACH;CAT2D,EAW/D;EACErH,IAAI,EAAE,kBADR;EAEEqH,KAAK,EAAE;CAbsD,CAA1D;;ACjBP,MAAMC,YAAY,GAAG,iCAArB;AACA,MAAMC,UAAU,GAAG,8CAAnB;AAEA,MAAMC,UAAU,GAAG,uGAAnB;AACA,MAAMC,mBAAmB,GAAG,qJAA5B;;AAIA,MAAMC,YAAY,GAAG,CAACC,OAAD,EAAkBC,aAAlB,KAAoD;SAChEZ,cAAc,CAACa,MAAf,CACL,CAACC,GAAD,EAAM;IAAE9H,IAAF;IAAQkH;GAAd,KAA2B;UACnB1D,KAAK,GAAG0D,MAAM,CAACa,IAAP,CAAYJ,OAAZ,CAAd;IACAG,GAAG,CAAC9H,IAAD,CAAH,GAAY,CAACwD,KAAD,GACRoE,aAAa,CAAC5H,IAAD,CAAb,IAAuB,KADf,GAERwD,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,IAAoBA,KAAK,CAAC,CAAD,CAAL,KAAa,GAFrC;WAGOsE,GAAP;GANG,EAQL,EARK,CAAP;CADF;;AA0BA,AAAO,MAAME,SAAS,GACpBrC,WADuB,IAEkB;QACnCnC,KAAK,GAAGgE,UAAU,CAACO,IAAX,CAAgBpC,WAAhB,CAAd;MACI,CAACnC,KAAL,EAAY,OAAO,IAAP;QACN,GAAGmE,OAAH,EAAYM,aAAZ,EAA2BC,iBAA3B,EAA8CC,MAA9C,IAAwD3E,KAA9D;QACM4E,kBAAkB,GAAGX,mBAAmB,CAACM,IAApB,CAAyBE,aAAzB,CAA3B;;MACI,CAACG,kBAAL,EAAyB;WAChB;MACLT,OADK;MAELQ,MAFK;MAGLE,oBAAoB,EAAEH,iBAHjB;MAILI,0BAA0B,EAAEhB,YAJvB;MAKLiB,0BAA0B,EAAEhB;KAL9B;;;QAQI,GAEJe,0BAFI,EAGJD,oBAHI,EAIJE,0BAJI,IAKFH,kBALJ;SAOO;IACLT,OADK;IAELQ,MAFK;IAGLE,oBAHK;IAILC,0BAJK;IAKLC;GALF;CAvBK;AAgCP,AAAO,MAAMC,oBAAoB,GAAG,CAClC7C,WADkC,EAElCiC,aAFkC,KAGI;QAChCa,UAAU,GAAGT,SAAS,CAACrC,WAAD,CAA5B;MACI8C,UAAU,KAAK,IAAnB,EAAyB,OAAO,IAAP,CAFa;;MAKlCC,eAAe,GAAGD,UAAU,CAACJ,oBAAX,CAAgCM,OAAhC,CACpB,6CADoB,EAEpB,IAFoB,CAAtB;;MAKID,eAAe,KAAKD,UAAU,CAACJ,oBAAnC,EAAyD;IACvDK,eAAe,GAAG,EAAlB;GADF,MAEO;IACLA,eAAe,GAAGA,eAAe,CAACE,IAAhB,EAAlB;;;SAGK,EACL,GAAGH,UADE;IAEL1B,OAAO,EAAEW,YAAY,CAACe,UAAU,CAACJ,oBAAZ,EAAkCT,aAAlC,CAFhB;IAGLc;GAHF;CAnBK;;ACjEQ,SAASG,YAAT,CACbC,QADa,EAEbzB,KAFa,EAGJ;MACL,CAACA,KAAL,EAAY,OAAO,KAAP;SACLyB,QAAQ,CAACC,IAAT,CAAeC,CAAD,IAAgBA,CAAC,CAACxM,EAAF,KAAS6K,KAAK,CAAC7K,EAA7C,CAAP;;;ACRF;AAEA;AAMA,MAAMyM,uBAAuB,GAAG,OAC9BC,EAD8B,EAE9BC,OAF8B,KAG3B;QACGC,MAAM,GAAG,MAAMD,OAAO,CAACE,MAAR,CAAeD,MAAf,CAAsBE,UAAtB,CACnBH,OAAO,CAACtJ,IAAR,CAAa;IACX0J,GAAG,EAAEL,EAAE,CAACM,IAAH,CAAQC,GADF;IAEXhK,QAAQ,EAAE;GAFZ,CADmB,CAArB;QAOMiK,YAAY,GAAGN,MAAM,CAAC9J,IAAP,CAAYqK,UAAZ,CAAuBC,MAAvB,CAClBC,KAAD,IAAWA,KAAK,CAACC,UAAN,KAAqB,SADb,CAArB;;MAIIJ,YAAY,CAACzJ,MAAb,KAAwB,CAA5B,EAA+B;IAC7BkJ,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAkB,2CAA0Cd,EAAE,CAAC1M,EAAG,EAAlE,EAAqE;MACnE4M,MAAM,EAAEM,YAAY,CAAC9J,GAAb,CAAkBiK,KAAD,IAAWA,KAAK,CAAC7J,IAAlC;KADV;WAGO,IAAP;;;QAGIiK,cAAc,GAAG,MAAMd,OAAO,CAACE,MAAR,CAAe9J,KAAf,CAAqB2K,uBAArB,CAC3Bf,OAAO,CAACtJ,IAAR,CAAa;IACX0J,GAAG,EAAEL,EAAE,CAACM,IAAH,CAAQC,GADF;IAEXhK,QAAQ,EAAE;GAFZ,CAD2B,CAA7B;;MAOIwK,cAAc,CAAC3K,IAAf,CAAoBY,KAApB,KAA8B,SAAlC,EAA6C;UACrCiK,cAAc,GAAGF,cAAc,CAAC3K,IAAf,CAAoB8K,QAApB,CAA6BR,MAA7B,CACpB9H,MAAD,IAAYA,MAAM,CAAC5B,KAAP,KAAiB,SAAjB,IAA8B4B,MAAM,CAAC5B,KAAP,KAAiB,OADtC,CAAvB;IAIAiJ,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAkB,4CAA2Cd,EAAE,CAAC1M,EAAG,EAAnE,EAAsE;MACpE4N,QAAQ,EAAED,cAAc,CAACvK,GAAf,CAAoBkC,MAAD,IAAYA,MAAM,CAACqH,OAAtC;KADZ;WAIO,IAAP;;;SAGK,KAAP;CAzCF;;AA4CA,AAAO,MAAMkB,mBAAmB,GAAG,OACjCnB,EADiC,EAEjCC,OAFiC,EAGjCmB,WAHiC,EAIjCxB,QAAyB,GAAGI,EAAE,CAAC5D,MAJE,KAKZ;QACfiF,cAAc,GAAGD,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,CAAvB;;MAEI,CAACuD,YAAY,CAACC,QAAD,EAAWyB,cAAX,CAAjB,EAA6C;IAC3CpB,OAAO,CAACY,GAAR,CAAYS,KAAZ,CAAkB,kCAAlB,EAAsD;MACpDC,IAAI,EAAEvB,EAAE,CAAC1M,EAD2C;MAEpDkO,QAAQ,EAAExB,EAAE,CAACyB;KAFf;IAIAL,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;WACO,KAAP;;;QAGIE,uBAAuB,GAAG,OAAO;IACrCrO,EAAE,EAAE0M,EAAE,CAAC1M,EAD8B;IAErCmO,MAAM,EAAEzB,EAAE,CAACyB,MAF0B;IAGrCG,MAAM,EAAE5B,EAAE,CAACM,IAAH,CAAQD;GAHc,CAAhC;;MAMIL,EAAE,CAAChJ,KAAH,KAAa,MAAjB,EAAyB;IACvBiJ,OAAO,CAACY,GAAR,CAAYS,KAAZ,CAAkB,0CAAlB,EAA8D;MAC5DC,IAAI,EAAEvB,EAAE,CAAC1M,EADmD;MAE5DkO,QAAQ,EAAExB,EAAE,CAACyB;KAFf;IAIAL,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;;;MAIAL,WAAW,CAACS,cAAZ,CAA2BjC,QAA3B,KACAwB,WAAW,CAACU,kBAAZ,CAA+BlC,QAA/B,CAFF,EAGE;IACAK,OAAO,CAACY,GAAR,CAAYS,KAAZ,CAAkB,yCAAlB,EAA6D;MAC3DC,IAAI,EAAEvB,EAAE,CAAC1M,EADkD;MAE3DkO,QAAQ,EAAExB,EAAE,CAACyB;KAFf;IAIAL,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;WACO,KAAP;;;QAGIM,QAAQ,GAAGX,WAAW,CAACY,gBAAZ,EAAjB;;MACID,QAAQ,IAAIA,QAAQ,CAACN,MAAT,KAAoBzB,EAAE,CAACyB,MAAvC,EAA+C;IAC7CxB,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,mCAAjB,EAAsD;MACpDS,IAAI,EAAEvB,EAAE,CAAC1M,EAD2C;MAEpDkO,QAAQ,EAAExB,EAAE,CAACyB;KAFf;IAIAL,WAAW,CAACa,kBAAZ,CAA+BN,uBAAuB,EAAtD;WACO,KAAP;;;EAGFP,WAAW,CAACc,cAAZ,CAA2BP,uBAAuB,EAAlD;;MAEI3B,EAAE,CAACmC,SAAH,KAAiB/I,SAArB,EAAgC;UACxBgJ,QAAQ,GAAG,MAAMnC,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBxM,GAArB,CACrBoK,OAAO,CAACtJ,IAAR,CAAa;MACX2L,WAAW,EAAEtC,EAAE,CAACyB;KADlB,CADqB,CAAvB;IAKAzB,EAAE,GAAGoC,QAAQ,CAAChM,IAAd;;;MAGE4J,EAAE,CAACuC,MAAP,EAAe;IACbnB,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;IACAxB,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,2CAAjB,EAA8D;MAC5DS,IAAI,EAAEvB,EAAE,CAAC1M,EADmD;MAE5DkO,QAAQ,EAAExB,EAAE,CAACyB;KAFf;WAIO,KAAP;;;EAGFxB,OAAO,CAACY,GAAR,CAAYC,IAAZ,CACG,eAAcd,EAAE,CAAC1M,EAAG,MAAK0M,EAAE,CAACyB,MAAO,eAAczB,EAAE,CAACmC,SAAU,UAC7DnC,EAAE,CAACwC,eACJ,EAHH,EApEqB;;MA4EnB,EACExC,EAAE,CAACwC,eAAH,KAAuB,OAAvB,IACAxC,EAAE,CAACwC,eAAH,KAAuB,WADvB,IAEAxC,EAAE,CAACwC,eAAH,KAAuB,UAHzB,CADF,EAME;QACI,CAACxC,EAAE,CAACwC,eAAJ,IAAuBxC,EAAE,CAACwC,eAAH,KAAuB,SAAlD,EAA6D;MAC3DvC,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAkB,wCAAuCd,EAAE,CAAC1M,EAAG,EAA/D,EAD2D;;MAG3D8N,WAAW,CAACqB,UAAZ,CAAuBxC,OAAvB,EAAgC0B,uBAAuB,EAAvD;aACO,KAAP;;;QAGE3B,EAAE,CAACM,IAAH,CAAQD,GAAR,CAAYqC,UAAZ,CAAuB,WAAvB,CAAJ,EAAyC;UACnC1C,EAAE,CAACwC,eAAH,KAAuB,QAAvB,IAAmCxC,EAAE,CAACwC,eAAH,KAAuB,OAA9D,EAAuE;QACrEvC,OAAO,CAACY,GAAR,CAAYC,IAAZ,CACG,qDAAoDd,EAAE,CAAC1M,EAAG,EAD7D,EADqE;;YAMjE0M,EAAE,CAAC2C,IAAH,CAAQC,QAAR,CAAiB,0BAAjB,CAAJ,EAAkD;cAC5C5C,EAAE,CAAC2C,IAAH,CAAQC,QAAR,CAAiB,8BAAjB,CAAJ,EAAsD;mBAC7C,KAAP;;;gBAGIC,kBAAkB,GAAG7C,EAAE,CAAC2C,IAAH,CAAQlD,OAAR,CACzB,8BADyB,EAEzB,8BAFyB,CAA3B;gBAIMQ,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBC,MAAtB,CACJ9C,OAAO,CAACtJ,IAAR,CAAa;YACX8K,MAAM,EAAEzB,EAAE,CAACyB,MADA;YAEXkB,IAAI,EAAEE;WAFR,CADI,CAAN;SATF,MAeO,IAAI,CAAC7C,EAAE,CAAClN,KAAH,CAAS4P,UAAT,CAAoB,SAApB,CAAL,EAAqC;gBACpCzC,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBC,MAAtB,CACJ9C,OAAO,CAACtJ,IAAR,CAAa;YACX8K,MAAM,EAAEzB,EAAE,CAACyB,MADA;YAEX3O,KAAK,EAAG,UAASkN,EAAE,CAAClN,KAAM;WAF5B,CADI,CAAN;;;eAQK,KAAP;;;UAGE,MAAMiN,uBAAuB,CAACC,EAAD,EAAKC,OAAL,CAAjC,EAAgD;QAC9CmB,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;eACO,KAAP;OAFF,MAGO,IAAIzB,EAAE,CAACwC,eAAH,KAAuB,SAA3B,EAAsC;;eAEpC,KAAP;;;MAGFvC,OAAO,CAACY,GAAR,CAAYC,IAAZ,CACG,yDACCd,EAAE,CAACwC,eACJ,EAHH;aAKO,KAAP;;;QAGExC,EAAE,CAACwC,eAAH,KAAuB,SAA3B,EAAsC;UAChC,MAAMzC,uBAAuB,CAACC,EAAD,EAAKC,OAAL,CAAjC,EAAgD;QAC9CmB,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;eACO,KAAP;OAFF,MAGO;;eAEE,KAAP;;;;QAIAzB,EAAE,CAACwC,eAAH,KAAuB,QAA3B,EAAqC;MACnCvC,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,uCAAjB,EAA0D;QACxDR,IAAI,EAAEN,EAAE,CAACM,IAAH,CAAQD,GAD0C;QAExD2C,IAAI,EAAEhD,EAAE,CAACgD,IAAH,CAAQ3C;OAFhB;YAKMJ,OAAO,CAACE,MAAR,CAAe9J,KAAf,CAAqB4M,KAArB,CAA2B;QAC/BrM,KAAK,EAAEoJ,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAaC,KAAb,CAAmBC,KADK;QAE/BF,IAAI,EAAEqJ,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAaG,IAFY;QAG/BwJ,IAAI,EAAEN,EAAE,CAACgD,IAAH,CAAQ3C,GAHiB;QAI/B2C,IAAI,EAAEhD,EAAE,CAACM,IAAH,CAAQD;OAJV,CAAN;aAOO,KAAP;;;IAGFe,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;IACAxB,OAAO,CAACY,GAAR,CAAYC,IAAZ,CACG,yDACCd,EAAE,CAACwC,eACJ,EAHH;WAKO,KAAP;;;MAGE;IACFvC,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAkB,iBAAgBd,EAAE,CAACyB,MAAO,EAA5C;UAEMlC,UAAU,GAAGD,oBAAoB,CACrCU,EAAE,CAAC2C,IADkC,EAErCvB,WAAW,CAACjP,MAAZ,CAAmByH,gBAFkB,CAAvC;UAIMiE,OAAO,GACV0B,UAAU,IAAIA,UAAU,CAAC1B,OAA1B,IAAsCuD,WAAW,CAACjP,MAAZ,CAAmByH,gBAD3D;UAGMsJ,WAAW,GAAG,MAAMjD,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBY,KAArB,CAA2B;MACnDE,YAAY,EAAEtF,OAAO,CAAChE,aAAR,GAAwB,OAAxB,GAAkC,QADG;MAEnDjD,KAAK,EAAEoJ,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAaC,KAAb,CAAmBC,KAFyB;MAGnDF,IAAI,EAAEqJ,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAaG,IAHgC;MAInDwL,WAAW,EAAEtC,EAAE,CAACyB,MAJmC;MAKnD2B,YAAY,EAAG,GAAEpD,EAAE,CAAClN,KAAM,GACxB+K,OAAO,CAAC/D,mBAAR,GAA8B,YAA9B,GAA6C,EAC9C,MAAKkG,EAAE,CAACyB,MAAO,GAPmC;MAQnD4B,cAAc,EAAE,EARmC;;KAA3B,CAA1B;IAUApD,OAAO,CAACY,GAAR,CAAYS,KAAZ,CAAkB,eAAlB,EAAmC4B,WAAW,CAAC9M,IAA/C;IACAgL,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD;WACO6B,OAAO,CAACJ,WAAW,CAAC9M,IAAZ,CAAiBmM,MAAlB,CAAd;GAtBF,CAuBE,OAAOpJ,GAAP,EAAY;IACZ8G,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,kBAAjB,EAAqC3H,GAAG,CAACoK,OAAzC;IACAnC,WAAW,CAACqB,UAAZ,CAAuBxC,OAAvB,EAAgC0B,uBAAuB,EAAvD;WACO,KAAP;;CA7MG;;ACnCA,MAAM6B,gBAAgB,GAAG,MAC9BvD,OAD8B,IAEuB;QAC/C;IAAE7J,IAAI,EAAEgG;MAAW,MAAM6D,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBW,iBAAtB,CAC7BxD,OAAO,CAACtJ,IAAR,CAAa;IAAEJ,QAAQ,EAAE;GAAzB,CAD6B,CAA/B;SAGO6F,MAAP;CANK;AASP,AAAO,MAAMsH,cAAc,GAAG,OAC5BzD,OAD4B,EAE5B9N,MAF4B,KAGR;QACdiK,MAAM,GAAG,MAAMoH,gBAAgB,CAACvD,OAAD,CAArC;QACM0D,WAA0C,GAAG,EAAnD;;OAEK,MAAM,CAACC,QAAD,EAAWC,WAAX,CAAX,IAAsCC,MAAM,CAACC,OAAP,CAAe5R,MAAM,CAACiK,MAAP,CAAc9F,IAA7B,CAAtC,EAA0E;UAClE0N,UAAU,GAAGH,WAAW,CAACrH,KAAZ,CAAkByH,KAAlB,CAAwB,CAAxB,CAAnB;UACMxH,WAAW,GAAGoH,WAAW,CAACpH,WAAZ,GACf,GAAEoH,WAAW,CAACpH,WAAY,yBADX,GAEf,4BAA2BmH,QAAS,EAFzC;QAIIM,aAAa,GAAG9H,MAAM,CAAC+H,IAAP,CAAahG,KAAD,IAAWA,KAAK,CAACrH,IAAN,KAAe+M,WAAW,CAAC/M,IAAlD,CAApB;;QACI,CAACoN,aAAL,EAAoB;MAClBA,aAAa,GAAG9H,MAAM,CAAC+H,IAAP,CAAahG,KAAD,IAAWA,KAAK,CAAC1B,WAAN,KAAsBA,WAA7C,CAAhB;;;QAEE,CAACyH,aAAL,EAAoB;UACdN,QAAQ,KAAK,qBAAjB,EAAwC;QACtCM,aAAa,GAAG9H,MAAM,CAAC+H,IAAP,CACbhG,KAAD,IAAWA,KAAK,CAACrH,IAAN,KAAe,qBADZ,CAAhB;;;UAIE8M,QAAQ,KAAK,iBAAjB,EAAoC;QAClCM,aAAa,GAAG9H,MAAM,CAAC+H,IAAP,CACbhG,KAAD,IAAWA,KAAK,CAACrH,IAAN,KAAe,iBADZ,CAAhB;;;UAIE8M,QAAQ,KAAK,WAAjB,EAA8B;QAC5BM,aAAa,GAAG9H,MAAM,CAAC+H,IAAP,CAAahG,KAAD,IAAWA,KAAK,CAACrH,IAAN,KAAe,OAAtC,CAAhB;;;;QAIA,CAACoN,aAAL,EAAoB;YACZnM,MAAM,GAAG,MAAMkI,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBsB,WAAtB,CACnBnE,OAAO,CAACtJ,IAAR,CAAa;QACXG,IAAI,EAAE+M,WAAW,CAAC/M,IADP;QAEX0F,KAAK,EAAEwH,UAFI;QAGXvH;OAHF,CADmB,CAArB;MAOAkH,WAAW,CAACC,QAAD,CAAX,GAAwB7L,MAAM,CAAC3B,IAA/B;KARF,MASO,IACL8N,aAAa,CAACpN,IAAd,KAAuB+M,WAAW,CAAC/M,IAAnC,IACAoN,aAAa,CAAC1H,KAAd,KAAwBwH,UADxB,IAEAE,aAAa,CAACzH,WAAd,KAA8BA,WAHzB,EAIL;MACAwD,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,uBAAjB,EAA0C;QACxCuD,YAAY,EAAEH,aAAa,CAACpN,IADY;QAExCA,IAAI,EAAEoN,aAAa,CAACpN,IAAd,KAAuB+M,WAAW,CAAC/M,IAAnC,IAA2C+M,WAAW,CAAC/M,IAFrB;QAGxC0F,KAAK,EAAE0H,aAAa,CAAC1H,KAAd,KAAwBwH,UAAxB,IAAsCA,UAHL;QAIxCvH,WAAW,EAAEyH,aAAa,CAACzH,WAAd,KAA8BA,WAA9B,IAA6CA;OAJ5D;YAOM1E,MAAM,GAAG,MAAMkI,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBwB,WAAtB,CACnBrE,OAAO,CAACtJ,IAAR,CAAa;QACX0N,YAAY,EAAEH,aAAa,CAACpN,IADjB;QAEXA,IAAI,EAAE+M,WAAW,CAAC/M,IAFP;QAGX0F,KAAK,EAAEwH,UAHI;QAIXvH;OAJF,CADmB,CAArB;MAQAkH,WAAW,CAACC,QAAD,CAAX,GAAwB7L,MAAM,CAAC3B,IAA/B;KApBK,MAqBA;MACLuN,WAAW,CAACC,QAAD,CAAX,GAAwBM,aAAxB;;;;SAIGP,WAAP;CApEK;;AC1BA,MAAMY,OAAO,GAAkBC,CAAf,IACrBV,MAAM,CAACW,IAAP,CAAYD,CAAZ,CADK;;ACeP,MAAME,aAAa,GAAIpB,OAAvB;AAIA,AAAO,MAAMqB,aAAa,GAAG,OAAkB;EAC7CC,OAAO,EAAE,MAAc,EADsB;EAE7CC,WAAW,EAAE,MAAqBC,OAAO,CAACC,OAAR,EAFW;EAG7CC,MAAM,EAAE,MAAc;CAHK,CAAtB;AAMP,AAAO,MAAMC,aAAa,GAAG,OAC3BhF,OAD2B,EAE3B9N,MAF2B,KAGJ;MACnB,CAACA,MAAM,CAACmH,UAAZ,EAAwB;WACfqL,aAAa,EAApB;;;QAGIO,uBAAuB,GAAGX,OAAO,CAACpS,MAAM,CAACuI,MAAR,CAAP,CAAuBiE,MAAvB,CAE7B,CAACC,GAAD,EAAMuG,SAAN,KAAoB;IACrBrB,MAAM,CAACsB,MAAP,CAAcxG,GAAd,EAAmBzM,MAAM,CAACuI,MAAP,CAAcyK,SAAd,CAAnB;WACOvG,GAAP;GAJ8B,EAK7B,EAL6B,CAAhC;QAOMyG,WAAW,GAAG,IAAIC,gBAAJ,CAAcnT,MAAM,CAACmH,UAArB,CAApB;QACMiM,QAAa,GAAG,MAAMF,WAAW,CAAClN,KAAZ,CAAkB7B,IAAlB,CAAuB;IAAEkP,KAAK,EAAE;GAAhC,CAA5B;QACMC,OAA6C,GAAG3B,MAAM,CAAC4B,MAAP,CACpDR,uBADoD,EAGnDxO,GAHmD,CAG9CiP,KAAD,IAAW;UACRC,MAAM,GAAGL,QAAQ,CAACE,OAAT,CAAiBtB,IAAjB,CACZjM,IAAD,IAAeA,IAAI,CAAC2N,OAAL,CAAaF,KAAb,KAAuBA,KADzB,CAAf;;QAGI,CAACC,MAAL,EAAa;MACXE,OAAO,CAACC,IAAR,CAAc,uBAAsBJ,KAAM,EAA1C;;;;WAGK,CAACA,KAAD,EAAQ;MAAEC,MAAF;MAAUI,EAAE,EAAE5M;KAAtB,CAAP;GAXkD,EAgBnDsH,MAhBmD,CAgB5CgE,aAhB4C,CAAtD;;OAkBK,MAAM,GAAGxM,IAAH,CAAX,IAAuBuN,OAAvB,EAAgC;QAC1B;YACIO,EAAO,GAAG,MAAMX,WAAW,CAACW,EAAZ,CAAeC,IAAf,CAAoB;QAAE/N,IAAI,EAAEA,IAAI,CAAC0N,MAAL,CAAYtS;OAAxC,CAAtB;MACA4E,IAAI,CAAC8N,EAAL,GAAUA,EAAE,CAACE,OAAb;KAFF,CAGE,OAAO/M,GAAP,EAAY;MACZ2M,OAAO,CAACpO,KAAR,CAAcyB,GAAd;;;;QAIEgN,UAAU,GAAG,IAAI/T,GAAJ,CAAQqT,OAAR,CAAnB;;QAEMW,sBAAsB,GAAIC,WAAD,IAAyB;UAChDV,KAAK,GAAGT,uBAAuB,CAACmB,WAAD,CAArC;QACI,CAACV,KAAL,EAAY,OAAO,IAAP;WACLQ,UAAU,CAACtQ,GAAX,CAAe8P,KAAf,CAAP;GAHF;;SAMO;IACLf,OAAO,EAAGyB,WAAD,IAAiC;YAClCnO,IAAI,GAAGkO,sBAAsB,CAACC,WAAD,CAAnC;UACI,CAACnO,IAAL,EAAW,OAAOmO,WAAP;aACH,KAAInO,IAAI,CAAC0N,MAAL,CAAYtS,EAAG,GAA3B;KAJG;IAMLuR,WAAW,EAAE,OAAOwB,WAAP,EAA4BC,IAA5B,KAA4D;MACvErG,OAAO,CAACY,GAAR,CAAYS,KAAZ,CAAkB,YAAlB,EAAgC;QAAE+E,WAAF;QAAeC;OAA/C;UACIxU,OAAO,CAACC,GAAR,CAAYwU,OAAhB,EAAyB;YAEnBrO,IAAI,GAAGkO,sBAAsB,CAACC,WAAD,CAAnC;UACI,CAACnO,IAAD,IAAS,CAACA,IAAI,CAAC8N,EAAnB,EAAuB;YACjBX,WAAW,CAACmB,IAAZ,CAAiB3B,WAAjB,CAA6B;QACjC4B,QAAQ,EAAE3U,OAAO,CAACC,GAAR,CAAYsH,eADW;QAEjC6M,OAAO,EAAEhO,IAAI,CAAC8N,EAAL,CAAQ1S,EAFgB;QAGjCgT;OAHI,CAAN;KAZG;IAkBLtB,MAAM,EAAE,CACNhF,EADM,EAENC,OAFM,KAGK;aACH,IAAGD,EAAE,CAAC0G,QAAS,IAAGzG,OAAO,CAAC0G,OAAR,CAAgBhO,UAAhB,CAA2B7B,IAAK,IAAGkJ,EAAE,CAACyB,MAAO,GAAvE;;GAtBJ;CApDK;;ACFP,MAAMiD,eAAa,GAAIpB,OAAvB;;AAIA,MAAMsD,eAAe,GAAG,OACtB3G,OADsB,EAEtB9N,MAFsB,KAGE;QAClB0U,YAAY,GAAG5B,aAAa,CAAChF,OAAD,EAAU9N,MAAV,CAAlC;QAEM2U,kBAAkB,GAAG,IAAI1U,GAAJ,EAA3B;EACAmS,OAAO,CAACpS,MAAM,CAACuI,MAAR,CAAP,CAAuBqM,OAAvB,CAAgC5B,SAAD,IAAe;IAC5CrB,MAAM,CAACW,IAAP,CAAYtS,MAAM,CAACuI,MAAP,CAAcyK,SAAd,CAAZ,EAAsC4B,OAAtC,CAA+ClQ,KAAD,IAAW;MACvDiQ,kBAAkB,CAACtU,GAAnB,CAAuBqE,KAAvB,EAA8BsO,SAA9B;KADF;GADF;QAMM6B,kBAAkB,GAAG,IAAI5U,GAAJ,EAA3B;EACAmS,OAAO,CAACpS,MAAM,CAAC8J,KAAP,IAAgB,EAAjB,CAAP,CAA4B8K,OAA5B,CAAqCE,QAAD,IAAc;IAC/C9U,MAAM,CAAC8J,KAAR,CAAmDgL,QAAnD,EAA6D9K,MAA7D,CAAoE4K,OAApE,CACGlQ,KAAD,IAAW;YACHoF,KAAK,GAAG+K,kBAAkB,CAACnR,GAAnB,CAAuBgB,KAAvB,CAAd;;UACIoF,KAAJ,EAAW;QACTA,KAAK,CAACiL,IAAN,CAAWD,QAAX;OADF,MAEO;QACLD,kBAAkB,CAACxU,GAAnB,CAAuBqE,KAAvB,EAA8B,CAACoQ,QAAD,CAA9B;;KANN;GADF;;QAaME,iBAAiB,GAAIC,YAAD,IAA4B,CACpD,GAAG,IAAIC,GAAJ,CACDD,YAAY,CACT1Q,GADH,CACQ2P,WAAD,IAAiBS,kBAAkB,CAACjR,GAAnB,CAAuBwQ,WAAvB,CADxB,EAEG3F,MAFH,CAEU4C,OAFV,CADC,CADiD,CAAtD;;SAQO;IACLnR,MADK;IAELmV,gBAAgB,EAAGjB,WAAD,IAAiBS,kBAAkB,CAACjR,GAAnB,CAAuBwQ,WAAvB,CAF9B;IAGLc,iBAAiB,EAAGC,YAAD,IAAkB,CACnC,GAAG,IAAIC,GAAJ,CACDD,YAAY,CACT1Q,GADH,CACQ2P,WAAD,IAAiBS,kBAAkB,CAACjR,GAAnB,CAAuBwQ,WAAvB,CADxB,EAEG3F,MAFH,CAEUgE,eAFV,CADC,CADgC,CAHhC;IAWL6C,gBAAgB,EAAGlB,WAAD,IAChBW,kBAAkB,CAACnR,GAAnB,CAAuBwQ,WAAvB,KAAuC,EAZpC;IAcLmB,gBAAgB,EAAE,CAChBC,aADgB,EAEhBC,kBAFgB,EAGhB;MAAEC,qBAAF;MAAyBC;KAHT,KAIb;UACC,CAACH,aAAL,EAAoB,OAAO,KAAP;YAEdI,uBAAuB,GAAGV,iBAAiB,CAC/CO,kBAAkB,CAAChR,GAAnB,CAAwBoR,OAAD,IAAaA,OAAO,CAACjR,KAA5C,CAD+C,CAAjD,CAHG;;UASD8Q,qBAAqB,IACrBE,uBAAuB,CAACjF,QAAxB,CAAiC6E,aAAjC,CAFF,EAGE;eACO,IAAP;OAZC;;;UAgBCtV,MAAM,CAACoK,aAAP,IAAwBqL,qBAA5B,EAAmD;cAC3CrL,aAAa,GAAGpK,MAAM,CAACoK,aAA7B;eACOsL,uBAAuB,CAAChI,IAAxB,CAA8BkI,KAAD,IAClCxL,aAAa,CAACkL,aAAD,CAAb,CAA6B7E,QAA7B,CAAsCmF,KAAtC,CADK,CAAP;;;aAKK,KAAP;KAzCG;IA4CLC,KAAK,EAAE,MAAMnB;GA5Cf;CAnCF;;AAmFA,MAAMoB,kBAAkB,GAAG,IAAI7V,GAAJ,EAA3B;AACA,MAAM8V,WAAW,GAAG,IAAI9V,GAAJ,EAApB;AAEA,AAAO,MAAM+V,gBAAgB,GAAG,CAC9BlI,OAD8B,EAE9B9N,MAF8B,KAGN;QAClByE,KAAK,GAAGqJ,OAAO,CAAC0G,OAAR,CAAgBhO,UAAhB,CAA2B/B,KAAzC;QAEMwR,mBAAmB,GAAGF,WAAW,CAACrS,GAAZ,CAAgBe,KAAK,CAACC,KAAtB,CAA5B;MACIuR,mBAAJ,EAAyB,OAAOA,mBAAP;QAEnBC,eAAe,GAAGJ,kBAAkB,CAACpS,GAAnB,CAAuBe,KAAK,CAACC,KAA7B,CAAxB;MACIwR,eAAJ,EAAqB,OAAOvD,OAAO,CAACC,OAAR,CAAgBsD,eAAhB,CAAP;QAEfC,OAAO,GAAG1B,eAAe,CAAC3G,OAAD,EAAU9N,MAAV,CAA/B;EACA8V,kBAAkB,CAACzV,GAAnB,CAAuBoE,KAAK,CAACC,KAA7B,EAAoCyR,OAApC;SAEOA,OAAO,CAACC,IAAR,CAAcC,UAAD,IAAgB;IAClCP,kBAAkB,CAACQ,MAAnB,CAA0B7R,KAAK,CAACC,KAAhC;IACAqR,WAAW,CAAC1V,GAAZ,CAAgBoE,KAAK,CAACC,KAAtB,EAA6B2R,UAA7B;WACOA,UAAP;GAHK,CAAP;CAfK;;ACjHP;AAEA,AAqCA,MAAM9D,eAAa,GAAIpB,OAAvB;;AASA,eAAeoF,eAAf,CACEzI,OADF,EAEE9N,MAFF,EAGoC;QAC5BwE,IAAI,GAAGsJ,OAAO,CAAC0G,OAAR,CAAgBhO,UAA7B;QACM6P,UAAU,GAAG,MAAML,gBAAgB,CAAClI,OAAD,EAAU9N,MAAV,CAAzC;QACMiP,WAAW,GAAG0C,MAAM,CAAC1Q,MAAP,CAAcoV,UAAd,CAApB;QAEMpM,MAAM,GAAG,MAAMsH,cAAc,CAACzD,OAAD,EAAU9N,MAAV,CAAnC;QAEMwW,gBAAgB,GAAG7E,MAAM,CAACW,IAAP,CAAYtS,MAAM,CAACuI,MAAnB,CAAzB;QAEMkO,mBAAmB,GAAGD,gBAAgB,CACzCjS,GADyB,CACpBmS,GAAD,IAAqB1W,MAAM,CAACiK,MAAP,CAAca,MAAd,CAAqB4L,GAArB,EAA0BvL,WAD1B,EAEzBoD,MAFyB,CAElB4C,OAFkB,EAGzB5M,GAHyB,CAGpBI,IAAD,IAAUsF,MAAM,CAACtF,IAAD,CAAN,CAAaxD,EAHF,CAA5B;QAKMwV,uBAAuB,GAAGH,gBAAgB,CAC7CjS,GAD6B,CACxBmS,GAAD,IAAS1W,MAAM,CAACiK,MAAP,CAAca,MAAd,CAAqB4L,GAArB,EAA0BtL,SADV,EAE7BmD,MAF6B,CAEtB4C,OAFsB,EAG7B5M,GAH6B,CAGxBI,IAAD,IAAUsF,MAAM,CAACtF,IAAD,CAAN,CAAaxD,EAHE,CAAhC;QAKMyV,wBAAwB,GAAGJ,gBAAgB,CAC9CjS,GAD8B,CACzBmS,GAAD,IAAS1W,MAAM,CAACiK,MAAP,CAAca,MAAd,CAAqB4L,GAArB,EAA0BrL,gBADT,EAE9BkD,MAF8B,CAEvB4C,OAFuB,EAG9B5M,GAH8B,CAGzBI,IAAD,IAAUsF,MAAM,CAACtF,IAAD,CAAN,CAAaxD,EAHG,CAAjC;QAKM0V,sBAAsB,GAAGL,gBAAgB,CAC5CjS,GAD4B,CACvBmS,GAAD,IAAS1W,MAAM,CAACiK,MAAP,CAAca,MAAd,CAAqB4L,GAArB,EAA0BpL,QADX,EAE5BiD,MAF4B,CAErB4C,OAFqB,EAG5B5M,GAH4B,CAGvBI,IAAD,IAAUsF,MAAM,CAACtF,IAAD,CAAN,CAAaxD,EAHC,CAA/B;QAKM2V,iBAAiB,GAAG,CACxB,GAAGH,uBADqB,EAExB,GAAGC,wBAFqB,EAGxB,GAAGC,sBAHqB,CAA1B;QAMME,kBAAkB,GAAG,IAAI9W,GAAJ,EAA3B;EACAuW,gBAAgB,CAAC5B,OAAjB,CAA0B8B,GAAD,IAAS;UAC1BM,iBAAiB,GAAGhX,MAAM,CAACiK,MAAP,CAAca,MAAd,CAAqB4L,GAArB,CAA1B;IACA/E,MAAM,CAACW,IAAP,CAAY0E,iBAAZ,EAA+BpC,OAA/B,CAAwCnD,QAAD,IAAsB;MAC3DsF,kBAAkB,CAAC1W,GAAnB,CAAuB4J,MAAM,CAAC+M,iBAAiB,CAACvF,QAAD,CAAlB,CAAN,CAAoCtQ,EAA3D,EAA+DuV,GAA/D;KADF;GAFF,EApCkC;;QA4D5BO,MAAI,GAAGC,SAAI,EAAjB;MACIC,WAAJ;MACIC,cAA+B,GAAG,EAAtC;;QAEMC,WAAW,GAAG,CAClBC,SADkB,EAElBC,mBAFkB,EAGlBC,QAHkB,KAKlB,IAAI7E,OAAJ,CAAY,CAACC,OAAD,EAAU6E,MAAV,KAAqB;UACzBC,QAAQ,GAAG;MACfC,QAAQ,EAAEnT,IAAI,CAACG,IADA;MAEf2S,SAFe;MAGfC;KAHF;IAKAzJ,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,sBAAjB,EAAyC+I,QAAzC;IACAT,MAAI,CAACK,SAAD,EAAY,MAAOM,qBAAP,IAAiC;YACzCC,OAAO,GAAGD,qBAAqB,CAAC,MAAM,EAAP,CAArC;MACA9J,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,qBAAjB,EAAwC+I,QAAxC;;UACI;cACIF,QAAQ,EAAd;OADF,CAEE,OAAOxQ,GAAP,EAAY;QACZ8G,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,+BAAjB,EAAkD+I,QAAlD;QACAG,OAAO;QACPJ,MAAM,CAACzQ,GAAD,CAAN;;;;MAGF8G,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,kBAAjB,EAAqC+I,QAArC;MACAG,OAAO;MACPjF,OAAO;KAbL,CAAJ;GAPF,CALF;;QA6BMtC,UAAU,GAAG,CAACxC,OAAD,EAAwBD,EAAxB,KAA8C;QAC3D,CAACA,EAAL,EAAS,MAAM,IAAI/N,KAAJ,CAAU,6BAAV,CAAN;IACTgO,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,YAAjB,EAA+Bd,EAA/B;IACAiK,UAAU,CAAC,MAAM;MACfT,WAAW,CAAC,YAAD,EAAexJ,EAAE,CAACyB,MAAlB,EAA0B,MAAM;eAClC+H,WAAW,CAACU,MAAM,CAAClK,EAAE,CAAC1M,EAAJ,CAAP,EAAgB0M,EAAE,CAACyB,MAAnB,EAA2B,YAAY;gBACjDW,QAAQ,GAAG,MAAMnC,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBxM,GAArB,CACrBoK,OAAO,CAACtJ,IAAR,CAAa;YACX2L,WAAW,EAAEtC,EAAE,CAACyB;WADlB,CADqB,CAAvB;gBAKMN,mBAAmB,CAACiB,QAAQ,CAAChM,IAAV,EAAgB6J,OAAhB,EAAyBmB,WAAzB,CAAzB;SANgB,CAAlB;OADS,CAAX;KADQ,EAWP,IAXO,CAAV;GAHF;;SAiBO0C,MAAM,CAACsB,MAAP,CAAchE,WAAd,EAA2B;IAChChF,MADgC;IAEhC6M,iBAFgC;IAGhCpH,cAAc,EApEQzF,MAAD,IACrBA,MAAM,CAACyD,IAAP,CAAa1B,KAAD,IAAWyK,mBAAmB,CAAChG,QAApB,CAA6BzE,KAAK,CAAC7K,EAAnC,CAAvB,CAgEgC;IAIhCwO,kBAAkB,EAnEQ1F,MAAD,IACzBA,MAAM,CAACyD,IAAP,CAAa1B,KAAD,IAAW2K,uBAAuB,CAAClG,QAAxB,CAAiCzE,KAAK,CAAC7K,EAAvC,CAAvB,CA8DgC;IAKhC6W,yBAAyB,EAlEQ/N,MAAD,IAChCA,MAAM,CAACyD,IAAP,CAAa1B,KAAD,IAAW4K,wBAAwB,CAACnG,QAAzB,CAAkCzE,KAAK,CAAC7K,EAAxC,CAAvB,CA4DgC;IAMhC8W,iBAAiB,EAjEQhO,MAAD,IACxBA,MAAM,CAACyD,IAAP,CAAa1B,KAAD,IAAW6K,sBAAsB,CAACpG,QAAvB,CAAgCzE,KAAK,CAAC7K,EAAtC,CAAvB,CA0DgC;IAOhC+W,wBAAwB,EA/DQjO,MAAD,IAC/BA,MAAM,CACHsE,MADH,CACWvC,KAAD,IAAWyK,mBAAmB,CAAChG,QAApB,CAA6BzE,KAAK,CAAC7K,EAAnC,CADrB,EAEGoD,GAFH,CAEQyH,KAAD,IAAW+K,kBAAkB,CAACrT,GAAnB,CAAuBsI,KAAK,CAAC7K,EAA7B,CAFlB,EAGGoN,MAHH,CAGUgE,eAHV,CAuDgC;IAShC1C,gBAAgB,EAAE,MAAMsH,WATQ;IAUhCpH,cAAc,EAAGlC,EAAD,IAA6B;MAC3C8F,OAAO,CAACjF,GAAR,CAAY,kBAAZ,EAAgCb,EAAhC;;UACIsJ,WAAW,IAAIY,MAAM,CAACZ,WAAW,CAAC7H,MAAb,CAAN,KAA+ByI,MAAM,CAAClK,EAAE,CAACyB,MAAJ,CAAxD,EAAqE;;;;UAGjE6H,WAAJ,EAAiB,MAAM,IAAIrX,KAAJ,CAAU,mBAAV,CAAN;MACjBqX,WAAW,GAAGtJ,EAAd;KAhB8B;IAkBhC0B,0BAA0B,EAAE,CAACzB,OAAD,EAAUuB,QAAV,KAA8C;MACxEvB,OAAO,CAACY,GAAR,CAAY,oBAAZ,EAAkC;QAAEW;OAApC;;UACI8H,WAAW,IAAIY,MAAM,CAACZ,WAAW,CAAC7H,MAAb,CAAN,KAA+ByI,MAAM,CAAC1I,QAAD,CAAxD,EAAoE;QAClE8H,WAAW,GAAGC,cAAc,CAACe,KAAf,EAAd;QACArK,OAAO,CAACY,GAAR,CAAY,kBAAZ,EAAgC;UAAEyI;SAAlC;;YACIA,WAAJ,EAAiB;UACf7G,UAAU,CAACxC,OAAD,EAAUqJ,WAAV,CAAV;;OAJJ,MAMO;QACLC,cAAc,GAAGA,cAAc,CAAC7I,MAAf,CACd6J,KAAD,IAAWL,MAAM,CAACK,KAAK,CAAC9I,MAAP,CAAN,KAAyByI,MAAM,CAAC1I,QAAD,CAD3B,CAAjB;;KA3B4B;IAgChCS,kBAAkB,EAAGjC,EAAD,IAA6B;MAC/C8F,OAAO,CAACjF,GAAR,CAAY,wBAAZ,EAAsC;QACpCb,EADoC;QAEpCsJ,WAFoC;QAGpCC;OAHF;;UAKI,CAACA,cAAc,CAAC1J,IAAf,CAAqB2K,CAAD,IAAOA,CAAC,CAAC/I,MAAF,KAAazB,EAAE,CAACyB,MAA3C,CAAL,EAAyD;QACvD8H,cAAc,CAACrC,IAAf,CAAoBlH,EAApB;;KAvC4B;IA0ChCyC,UA1CgC;IA4ChC+G;GA5CK,CAAP;;;AAgDF,MAAMiB,mBAAmB,GAAG,IAAIrY,GAAJ,EAA5B;AACA,MAAMsY,YAAY,GAAG,IAAItY,GAAJ,EAArB;AAEA,AAAO,MAAMuY,gBAAgB,GAAG,CAC9Bb,QAD8B,EAE9Bc,SAF8B,KAGlB;QACNC,gBAAgB,GACpBD,SAAS,CAAClR,iBAAV,IACA,IAAIuE,MAAJ,CAAY,IAAG2M,SAAS,CAAClR,iBAAkB,GAA3C,CAFF;;MAIIoQ,QAAQ,KAAK,iBAAjB,EAAoC;WAC3BhY,OAAO,CAACC,GAAR,CAAYsH,eAAZ,KAAgC,iBAAvC;;;MAGEwR,gBAAJ,EAAsB;WACbA,gBAAgB,CAACC,IAAjB,CAAsBhB,QAAtB,CAAP;;;SAGK,KAAP;CAhBK;AAmBP,AAAO,MAAMiB,iBAAiB,GAC5B9K,OAD+B,IAEe;QACxCtJ,IAAI,GAAGsJ,OAAO,CAAC0G,OAAR,CAAgBhO,UAA7B;QACM/B,KAAK,GAAGD,IAAI,CAACC,KAAnB;QACMiS,GAAG,GAAGlS,IAAI,CAACrD,EAAjB;QAEM0X,mBAAmB,GAAGN,YAAY,CAAC7U,GAAb,CAAiBgT,GAAjB,CAA5B;MACImC,mBAAJ,EAAyB,OAAOA,mBAAP;QAEnB3C,eAAe,GAAGoC,mBAAmB,CAAC5U,GAApB,CAAwBgT,GAAxB,CAAxB;MACIR,eAAJ,EAAqB,OAAOvD,OAAO,CAACC,OAAR,CAAgBsD,eAAhB,CAAP;QAEfuC,SAAS,GAAGjN,WAAW,CAAC/G,KAAK,CAACC,KAAP,CAA7B;;MAEI,CAAC+T,SAAL,EAAgB;IACd9E,OAAO,CAACC,IAAR,CAAc,4BAA2BnP,KAAK,CAACC,KAAM,EAArD;WACO,IAAP;;;MAGE8T,gBAAgB,CAAChU,IAAI,CAACG,IAAN,EAAY8T,SAAZ,CAApB,EAA4C;IAC1C9E,OAAO,CAACC,IAAR,CAAa,cAAb,EAA6B;MAAEnP,KAAK,EAAED,IAAI,CAACC,KAAL,CAAWC,KAApB;MAA2BC,IAAI,EAAEH,IAAI,CAACG;KAAnE;WACO,IAAP;;;QAGIwR,OAAO,GAAGI,eAAe,CAACzI,OAAD,EAAU2K,SAAV,CAA/B;EACAH,mBAAmB,CAACjY,GAApB,CAAwBqW,GAAxB,EAA6BP,OAA7B;SAEOA,OAAO,CAACC,IAAR,CAAcnH,WAAD,IAAiB;IACnCqJ,mBAAmB,CAAChC,MAApB,CAA2BI,GAA3B;IACA6B,YAAY,CAAClY,GAAb,CAAiBqW,GAAjB,EAAsBzH,WAAtB;WACOA,WAAP;GAHK,CAAP;CA5BK;;ACvNA,MAAM6J,wBAAwB,GAAG,OAGtChL,OAHsC,EAItC0J,QAJsC,KAKpB;QACZvI,WAAW,GAAG,MAAM2J,iBAAiB,CAAC9K,OAAD,CAA3C;MACI,CAACmB,WAAL,EAAkB;SAEXA,WAAW,CAACoI,WAAZ,CACLU,MAAM,CAACjK,OAAO,CAAC0G,OAAR,CAAgBuE,YAAhB,CAA6B5X,EAA9B,CADD,EAEL2M,OAAO,CAAC0G,OAAR,CAAgBuE,YAAhB,CAA6BzJ,MAFxB,EAGL,YAAY;UACJW,QAAQ,GAAG,MAAMnC,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBxM,GAArB,CACrBoK,OAAO,CAACtJ,IAAR,CAAa;MACX2L,WAAW,EAAErC,OAAO,CAAC0G,OAAR,CAAgBuE,YAAhB,CAA6BzJ;KAD5C,CADqB,CAAvB;UAMMkI,QAAQ,CAACvH,QAAQ,CAAChM,IAAV,EAAgBgL,WAAhB,CAAd;GAVG,CAAP;CATK;AA8BP,AAAO,MAAM+J,8BAA8B,GAGzCxB,QAH4C,IAIxC1J,OAAD,IAAyB;SACrBgL,wBAAwB,CAAChL,OAAD,EAAU,CAACD,EAAD,EAAKoB,WAAL,KACvCuI,QAAQ,CAAC3J,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CADqB,CAA/B;CALK;AAeP,AAAO,MAAMgK,+BAA+B,GAAG,CAC7CC,eAD6C,EAK7C1B,QAL6C,KAM1C,MAAO1J,OAAP,IAA8C;QAC3CmB,WAAW,GAAG,MAAM2J,iBAAiB,CAAC9K,OAAD,CAA3C;MACI,CAACmB,WAAL,EAAkB;QAEZkK,GAAG,GAAGD,eAAe,CAACpL,OAAD,EAAUmB,WAAV,CAA3B;MACIkK,GAAG,CAACvU,MAAJ,KAAe,CAAnB,EAAsB;SACfqK,WAAW,CAACoI,WAAZ,CACL8B,GAAG,CAAC5U,GAAJ,CAASsJ,EAAD,IAAQkK,MAAM,CAAClK,EAAE,CAAC1M,EAAJ,CAAtB,CADK,EAELgY,GAAG,CAAC5U,GAAJ,CAASsJ,EAAD,IAAQA,EAAE,CAACyB,MAAnB,CAFK,EAGL,MAAMkI,QAAQ,CAAC1J,OAAD,EAAUmB,WAAV,CAHT,CAAP;CAZK;;AC1DA,MAAMmK,qBAEZ,GAAG,OAAOvL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAoC;MAClC,CAACA,WAAW,CAACjP,MAAZ,CAAmBqH,mBAAxB,EAA6C;MACzCwG,EAAE,CAACwL,SAAH,CAAazU,MAAb,KAAwB,CAA5B,EAA+B;MAC3BiJ,EAAE,CAAC9H,IAAH,CAAQuT,IAAR,KAAiB,KAArB,EAA4B;QAEtBxL,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB4I,YAAtB,CACJzL,OAAO,CAAC1F,KAAR,CAAc;IACZiR,SAAS,EAAE,CAACxL,EAAE,CAAC9H,IAAH,CAAQrB,KAAT;GADb,CADI,CAAN;CAPK;;ACHA,MAAM8U,UAAU,GAAI7Y,KAAD,IACxBA,KAAK,CACF4M,IADH,GAEGD,OAFH,CAGI,qDAHJ,EAII,CAACmM,CAAD,EAAIC,IAAJ,EAAUC,IAAV,KAAoB,IAAGD,IAAI,CAACE,WAAL,EAAmB,IAAGD,IAAK,EAJtD,EAMGrM,OANH,CAMW,qBANX,EAMkC,CAACmM,CAAD,EAAIC,IAAJ,KAAc,GAAEA,IAAI,CAACG,WAAL,EAAmB,IANrE,EAOGvM,OAPH,CAOW,oBAPX,EAOiC,YAPjC,EAQGA,OARH,CAQW,iCARX,EAQ8C,aAR9C;CAUGA,OAVH,CAUW,4BAVX,EAUyC,IAVzC,CADK;;ACIP,MAAMwM,iBAAiB,GAAIpO,OAAD,IAAuC;SACxDK,aAAa,CACjBxH,GADI,CAEH,CAAC;IAAEI,IAAF;IAAQqH;GAAT,KACG,MAAKN,OAAO,CAAC/G,IAAD,CAAP,GAAgB,GAAhB,GAAsB,GAAI,qBAAoBA,IAAK,OAAMqH,KAAM,EAHpE,EAKJ+N,IALI,CAKC,IALD,CAAP;CADF;;AASA,MAAMC,eAAe,GAAIC,KAAD,IAAyB;SACxCA,KAAK,CACT1V,GADI,CACCoK,IAAD,IAAU;QACTA,IAAI,CAACrG,GAAT,EAAc,OAAQ,IAAGqG,IAAI,CAAChO,KAAM,KAAIgO,IAAI,CAACrG,GAAI,GAAnC;WACPqG,IAAI,CAAChO,KAAZ;GAHG,EAKJoZ,IALI,CAKC,IALD,CAAP;CADF;;AAcA,AAAO,MAAMG,UAAU,GAAG,CACxB1J,IADwB,EAExBjE,aAFwB,EAGxB0N,KAHwB,EAIxBE,aAJwB,KAKG;QACrBC,MAAM,GAAGjN,oBAAoB,CAACqD,IAAD,EAAOjE,aAAP,CAAnC;;MACI,CAAC6N,MAAL,EAAa;IACXzG,OAAO,CAAChF,IAAR,CAAa,sBAAb;WACO;MAAE6B;KAAT;;;QAEI;IACJlE,OADI;IAEJQ,MAFI;IAGJE,oBAHI;IAIJC,0BAJI;IAKJC,0BALI;IAMJxB;MACE0O,MAPJ;QASMC,4BAA4B,GAAGrN,oBAAoB,CAACM,OAArB;sEAAA;GAIlC2M,KAAD,GACI,MADJ,GAEIA,KAAK,CAACrV,MAAN,KAAiB,CAAjB,GACC,gBAAeoV,eAAe,CAACC,KAAD,CAAQ,MADvC,GAEA,IAR+B,CAArC;QAWMK,cAAc,GAAG,CAACH,aAAD,GACnBzO,OADmB,GAEnB,EAAE,GAAGA,OAAL;OAAiByO;GAFrB;SAIO;IACLzO,OAAO,EAAE4O,cADJ;IAEL9J,IAAI,EAAG,GAAElE,OAAQ,GAAEW,0BAA2B;EAChDoN,4BAA6B;EAC7BP,iBAAiB,CAACQ,cAAD,CAAiB;EAClCpN,0BAA2B,GAAEJ,MAAM,IAAI,EAAG;GAL1C;CAnCK;AA4CP,AAAO,MAAMyN,sBAAsB,GAAG,CACpC/J,IADoC,EAEpCgK,WAFoC,KAGzB;QACLJ,MAAM,GAAGzN,SAAS,CAAC6D,IAAD,CAAxB;;MACI,CAAC4J,MAAL,EAAa;IACXzG,OAAO,CAAChF,IAAR,CAAa,sBAAb;WACO6B,IAAP;;;QAGI;IACJlE,OADI;IAEJQ,MAFI;IAGJE,oBAHI;IAIJC,0BAJI;IAKJC;MACEkN,MANJ;QAQMK,4BAA4B,GAAGzN,oBAAoB,CAACM,OAArB;8CAAA;GAIlCkN,WAAD,GAAe,IAAf,GAAuB,0BAAyBA,WAAY,QAJzB,CAArC;SAOQ,GAAElO,OAAQ,GAAEW,0BAA2B,GAAEwN,4BAA6B,GAAEvN,0BAA2B,GAAEJ,MAAM,IACjH,EAAG,EADL;CAzBK;;AC9DA,MAAM4N,gBAAgB,GAAG,OAG9B7M,EAH8B,EAI9BC,OAJ8B,EAK9BmB,WAL8B,EAM9B2B,MAN8B,KAOZ;QACZ+J,cAAc,GAAG/J,MAAM,CAACjQ,KAAP,IAAgBkN,EAAE,CAAClN,KAAH,KAAaiQ,MAAM,CAACjQ,KAA3D;QACMia,aAAa,GAAGhK,MAAM,CAACJ,IAAP,IAAe3C,EAAE,CAAC2C,IAAH,KAAYI,MAAM,CAACJ,IAAxD;;MAEImK,cAAc,IAAIC,aAAtB,EAAqC;UAC7BC,IAA+C,GAAG,EAAxD;;QACIF,cAAJ,EAAoB;MAClBE,IAAI,CAACla,KAAL,GAAaiQ,MAAM,CAACjQ,KAApB;MACAkN,EAAE,CAAClN,KAAH,GAAWiQ,MAAM,CAACjQ,KAAlB;;;QAEEia,aAAJ,EAAmB;MACjBC,IAAI,CAACrK,IAAL,GAAYI,MAAM,CAACJ,IAAnB;MACA3C,EAAE,CAAC2C,IAAH,GAAUI,MAAM,CAACJ,IAAjB;;;UAGI1C,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBC,MAAtB,CAA6B9C,OAAO,CAAC1F,KAAR,CAAcyS,IAAd,CAA7B,CAAN;;CAtBG;;ACCQ,eAAeC,SAAf,CAGbjN,EAHa,EAIbC,OAJa,EAKbiN,eALa,EAMb/O,KANa,EAObgP,UAAU,GAAGxN,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAY+B,KAAZ,CAPZ,EAQb;EAAEiP,QAAF;EAAYC;IAA4B,EAR3B,EASE;MACXF,UAAU,IAAI,CAACD,eAAnB,EAAoC;UAC5BjN,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBwK,WAAtB,CACJrN,OAAO,CAAC1F,KAAR,CAAc;MAAEzD,IAAI,EAAEqH,KAAK,CAACrH;KAA5B,CADI,CAAN;QAGIsW,QAAJ,EAAc,MAAMA,QAAQ,EAAd;;;MAEZF,eAAe,IAAI,CAACC,UAAxB,EAAoC;UAC5BI,QAAQ,GAAG,MAAMtN,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB0K,SAAtB,CACrBvN,OAAO,CAAC1F,KAAR,CAAc;MAAE6B,MAAM,EAAE,CAAC+B,KAAK,CAACrH,IAAP;KAAxB,CADqB,CAAvB;QAGIuW,KAAJ,EAAW,MAAMA,KAAK,CAACE,QAAQ,CAACnX,IAAV,CAAX;;;;AC3BA,eAAeqX,YAAf,CAGbxN,OAHa,EAIbnJ,IAJa,EAKbyJ,GALa,EAMbkL,IANa,EAObhP,WAPa,EAQbhC,GARa,EASE;QACTwF,OAAO,CAACE,MAAR,CAAe9J,KAAf,CAAqBoX,YAArB,CACJxN,OAAO,CAACtJ,IAAR,CAAa;IACXsJ,OAAO,EACLnJ,IAAI,KAAK,EAAT,GACIhF,OAAO,CAACC,GAAR,CAAYsH,eADhB,GAEK,GAAEvH,OAAO,CAACC,GAAR,CAAYsH,eAAgB,IAAGvC,IAAK,EAJlC;IAKXyJ,GALW;IAMXvJ,KAAK,EAAEyU,IANI;IAOXhP,WAPW;IAQXiR,UAAU,EAAEjT;GARd,CADI,CAAN;;;ACbF;AAIA,AAsBA,MAAMiK,eAAa,GAAIpB,OAAvB;AAIA,AAAO,MAAMqK,YAIZ,GAAG,OAAO3N,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,EAAiCwM,WAAjC,KAAiD;QAC7CjX,IAAI,GAAGsJ,OAAO,CAAC0G,OAAR,CAAgBhO,UAA7B,CADmD;;MAI/CqH,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAarD,EAAb,KAAoBqD,IAAI,CAACrD,EAA7B,EAAiC,OAAO;IAAEua,aAAa,EAAE;GAAxB;QAE3B/a,KAAK,GAAGsO,WAAW,CAACjP,MAAZ,CAAmBsH,SAAnB,GAA+BkS,UAAU,CAAC3L,EAAE,CAAClN,KAAJ,CAAzC,GAAsDkN,EAAE,CAAClN,KAAvE;QAEMgb,WAAW,GAAG9N,EAAE,CAAC9H,IAAH,CAAQuT,IAAR,KAAiB,KAArC;QAEMvK,QAAkB,GAAG,EAA3B;QAEM6M,SAAS,GAAG3M,WAAW,CAACjP,MAAZ,CAAmB8H,OAAnB,CAA2BnH,KAA3B,CAAiCqR,IAAjC,CAAuC6J,IAAD,IAAU;QAC5DA,IAAI,CAAC5T,GAAL,KAAa,KAAb,IAAsB0T,WAA1B,EAAuC,OAAO,KAAP;UAEjCxT,KAAK,GAAG0T,IAAI,CAAC9T,MAAL,CAAY2E,IAAZ,CAAiB/L,KAAjB,CAAd;;QACIwH,KAAK,KAAK,IAAd,EAAoB;UACd0T,IAAI,CAACpV,MAAT,EAAiB;QACfsI,QAAQ,CAACgG,IAAT,CAAc;UAAEpQ,IAAI,EAAEkX,IAAI,CAACpV,MAAb;UAAqBlB,KAAK,EAAEsW,IAAI,CAACtW;SAA/C;;;aAEK,IAAP;;;QAGEsW,IAAI,CAACpV,MAAL,IAAeoV,IAAI,CAAC3T,mBAAxB,EAA6C;MAC3C6G,QAAQ,CAACgG,IAAT,CAAc;QACZpQ,IAAI,EAAEkX,IAAI,CAACpV,MADC;QAEZkI,IAAI,EAAEkN,IAAI,CAAC3T,mBAAL,CAAyBC,KAAzB;OAFR;aAIO,KAAP;;;WAGK,KAAP;GAnBgB,CAAlB;QAsBM2T,IAAI,GAAG,IAAI1V,IAAJ,GAAW2V,WAAX,EAAb;QAEMC,cAAc,GAAG,CAAC,MAAMlO,OAAO,CAACE,MAAR,CAAeD,MAAf,CAAsBE,UAAtB,CAC5BH,OAAO,CAACtJ,IAAR,CAAa;IACX0J,GAAG,EAAEL,EAAE,CAACM,IAAH,CAAQC;GADf,CAD4B,CAAP,EAIpBnK,IAJoB,CAIfqK,UAJe,CAIJ0D,IAJI,CAKpBxD,KAAD,IAAoBA,KAAK,CAAC7J,IAAN,KAAgB,GAAEhF,OAAO,CAACC,GAAR,CAAYsH,eAAgB,UAL7C,CAAvB;QAQMyL,OAAO,CAACsJ,GAAR,CACJ,CACE,GAAGlN,QAAQ,CAACxK,GAAT,CACD,CAAC;IAAEI,IAAF;IAAQY,KAAR;IAAeoJ;GAAhB,KACE2M,YAAY,CACVxN,OADU,EAEVnJ,IAFU,EAGVkJ,EAAE,CAACM,IAAH,CAAQC,GAHE,EAIV7I,KAAK,GAAG,SAAH,GAAe,SAJV,EAKVA,KAAK,GAAGA,KAAK,CAAC5E,KAAT,GAAkBgO,IAAD,CAAqBhO,KALjC,EAMV4E,KAAK,GAAG0B,SAAH,GAAgB0H,IAAD,CAAqBrG,GAN/B,CAFb,CADL,EAYE,IAAImT,WAAW,GACX1M,QAAQ,CACLxK,GADH,CAEI,CAAC;IAAEI,IAAF;IAAQY,KAAR;IAAeoJ;GAAhB,KACEpJ,KAAK,GACD+V,YAAY,CACVxN,OADU,EAEVnJ,IAFU,EAGV8W,WAHU,EAIV,SAJU,EAKV,8BALU,CADX,GAQDxU,SAXV,EAaGsH,MAbH,CAaUgE,eAbV,CADW,GAeX,EAfJ,CAZF,EA4BEyJ,cAAc,IACZlO,OAAO,CAACE,MAAR,CAAeD,MAAf,CAAsB9M,MAAtB,CACE6M,OAAO,CAACtJ,IAAR,CAAa;IACXG,IAAI,EAAG,GAAEhF,OAAO,CAACC,GAAR,CAAYsH,eAAgB,UAD1B;IAEXgV,QAAQ,EAAErO,EAAE,CAACM,IAAH,CAAQC,GAFP;IAGX3H,MAAM,EAAE,WAHG;IAIXgI,UAAU,EAAGmN,SAAS,GAAG,SAAH,GAAe,SAJ1B;IAOXO,UAAU,EAAEL,IAPD;IAQXM,YAAY,EAAEN,IARH;IASXO,MAAM,EAAET,SAAS,GACbA,SAAS,CAACrW,KADG,GAEb;MACE5E,KAAK,EAAE,oBADT;MAEEqH,OAAO,EAAE;;GAbjB,CADF,CA7BJ,EA+CE,CAACgU,cAAD,IAAmBP,WAAnB,IAAkCG,SAAlC,GACIN,YAAY,CACVxN,OADU,EAEV,SAFU,EAGV2N,WAHU,EAIV,SAJU,EAKV,8BALU,CADhB,GAQIxU,SAvDN,EAwDE,CAAC+U,cAAD,IACEV,YAAY,CACVxN,OADU,EAEV,SAFU,EAGVD,EAAE,CAACM,IAAH,CAAQC,GAHE,EAIVwN,SAAS,GAAG,SAAH,GAAe,SAJd,EAKVA,SAAS,GAAGA,SAAS,CAACrW,KAAV,CAAgB5E,KAAnB,GAA2B,oBAL1B,CAzDhB,EAgEE4N,MAhEF,CAgESgE,eAhET,CADI,CAAN;QAoEM+J,kBAAkB,GAAGrN,WAAW,CAAChF,MAAZ,CAAmB,gBAAnB,CAA3B;QACMsS,cAAc,GAAGtN,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,CAAvB;QACMuS,WAAW,GAAGvN,WAAW,CAAChF,MAAZ,CAAmB,eAAnB,CAApB;QAEMwS,uBAAuB,GAAGjP,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYqS,kBAAZ,CAA5C;QACMI,gBAAgB,GAAGlP,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYuS,WAAZ,CAArC;QACMG,mBAAmB,GAAGnP,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYsS,cAAZ,CAAxC;QAEMK,cAAc,GAAG,EACrB,GAAG3N,WAAW,CAACjP,MAAZ,CAAmByH,gBADD;IAErBC,aAAa,EAAE+U,uBAFM;IAGrB9U,mBAAmB,EAAE+U,gBAHA;IAIrB9U,SAAS,EAAE+U;GAJb;QAOM;IAAEnM,IAAF;IAAQ9E;MAAYwO,UAAU,CAACrM,EAAE,CAAC2C,IAAJ,EAAUoM,cAAV,EAA0B7N,QAAQ,CACnER,MAD2D,CACnD9H,MAAD,IAAYA,MAAM,CAACkI,IAAP,IAAelI,MAAM,CAACkI,IAAP,CAAYtG,MADa,EAE3D9D,GAF2D,CAEtDkC,MAAD,IAAYA,MAAM,CAACkI,IAFoC,CAA1B,CAApC;QAGM+L,gBAAgB,CAAC7M,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;IAAEtO,KAAF;IAAS6P;GAApC,CAAtB;;MAEI9E,OAAO,KAAK4Q,kBAAkB,IAAIC,cAA3B,CAAX,EAAuD;UAC/C5J,OAAO,CAACsJ,GAAR,CAAY,CAChBK,kBAAkB,IAChBxB,SAAS,CACPjN,EADO,EAEPC,OAFO,EAGPpC,OAAO,CAAChE,aAHD,EAIP4U,kBAJO,EAKPG,uBALO,CAFK,EAShBD,WAAW,IACT1B,SAAS,CACPjN,EADO,EAEPC,OAFO,EAGPpC,OAAO,CAAC/D,mBAHD,EAIP6U,WAJO,EAKPE,gBALO,CAVK,EAiBhBH,cAAc,IACZzB,SAAS,CACPjN,EADO,EAEPC,OAFO,EAGPpC,OAAO,CAAC9D,SAHD,EAIP2U,cAJO,EAKPI,mBALO,EAMP;MACEzB,KAAK,EAAE,MAAOzN,QAAP,IAAoB;cACnBuB,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BxB,QAA3B,CAAzB;OAFJ;MAIEwN,QAAQ,EAAE,YAAY;cACdhM,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD,CAAN;;KAXG,CAlBK,CAAZ,CAAN;;QAmCI,CAACiN,cAAL,EAAqB;aACZ;QAAEb,aAAa,EAAE;OAAxB;;;;SAIG;IAAEA,aAAa,EAAE;GAAxB;CAjLK;;ACxBP,MAAMmB,cAAc,GAAG,gBAGrBhP,EAHqB,EAIrBC,OAJqB,EAKrB;EAAEjJ,KAAF;EAASyF;CALY,EAMrBmR,WANqB,EAON;QACTqB,UAAU,GAAG,CAAC,MAAMhP,OAAO,CAACE,MAAR,CAAeD,MAAf,CAAsBE,UAAtB,CACxBH,OAAO,CAACtJ,IAAR,CAAa;IACX0J,GAAG,EAAEL,EAAE,CAACM,IAAH,CAAQC;GADf,CADwB,CAAP,EAIhBnK,IAJgB,CAIXqK,UAJW,CAIA0D,IAJA,CAKhBxD,KAAD,IAAWA,KAAK,CAAC7J,IAAN,KAAehF,OAAO,CAACC,GAAR,CAAYsH,eALrB,CAAnB;EAQA4G,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,kBAAjB,EAAqC;IAAEmO,UAAF;IAAcjY,KAAd;IAAqByF;GAA1D;;MAEIwS,UAAJ,EAAgB;UACRhP,OAAO,CAACE,MAAR,CAAeD,MAAf,CAAsB9M,MAAtB,CACJ6M,OAAO,CAACtJ,IAAR,CAAa;MACXG,IAAI,EAAEhF,OAAO,CAACC,GAAR,CAAYsH,eADP;MAEXgV,QAAQ,EAAErO,EAAE,CAACM,IAAH,CAAQC,GAFP;MAGX+N,UAAU,EAAEtO,EAAE,CAACkP,UAHJ;MAIXtW,MAAM,EAAE,WAJG;MAKXgI,UAAU,EAAE5J,KALD;MAMXuX,YAAY,EAAE,IAAIhW,IAAJ,GAAW2V,WAAX,EANH;MAOXM,MAAM,EAAE;QACN1b,KAAK,EAAE2J,WADD;QAENtC,OAAO,EAAE;;KATb,CADI,CAAN;GADF,MAeO,IAAIyT,WAAW,IAAI5W,KAAK,KAAK,SAA7B,EAAwC;UACvC8N,OAAO,CAACsJ,GAAR,CAAY,CAChBX,YAAY,CACVxN,OADU,EAEV,EAFU,EAGV2N,WAHU,EAIV,SAJU,EAKV,8BALU,CADI,EAQhBH,YAAY,CAACxN,OAAD,EAAU,EAAV,EAAcD,EAAE,CAACM,IAAH,CAAQC,GAAtB,EAA2BvJ,KAA3B,EAAkCyF,WAAlC,CARI,CAAZ,CAAN;GADK,MAWA;UACCgR,YAAY,CAACxN,OAAD,EAAU,EAAV,EAAcD,EAAE,CAACM,IAAH,CAAQC,GAAtB,EAA2BvJ,KAA3B,EAAkCyF,WAAlC,CAAlB;;CA7CJ;;AAiDA,AAAO,MAAM0S,2BAA2B,GAAG,CACzCnP,EADyC,EAEzCC,OAFyC,EAGzCmB,WAHyC,EAIzChF,MAAuB,GAAG4D,EAAE,CAAC5D,MAAH,IAAa,EAJE,EAKzCwR,WALyC,KAMvB;EAClB3N,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,6BAAjB,EAAgD;IAC9C1E,MAAM,EAAEA,MAAM,CAAC1F,GAAP,CAAYoJ,CAAD,IAAOA,CAAC,IAAIA,CAAC,CAAChJ,IAAzB,CADsC;IAE9C+K,cAAc,EAAET,WAAW,CAACS,cAAZ,CAA2BzF,MAA3B,CAF8B;IAG9CgO,iBAAiB,EAAEhJ,WAAW,CAACgJ,iBAAZ,CAA8BhO,MAA9B;GAHrB;;QAMMgT,uBAAuB,GAAI3S,WAAD,IAC9BuS,cAAc,CACZhP,EADY,EAEZC,OAFY,EAGZ;IACEjJ,KAAK,EAAE,SADT;IAEEyF;GALU,EAOZmR,WAPY,CADhB;;MAWI5N,EAAE,CAACqP,mBAAH,CAAuBtY,MAAvB,KAAkC,CAAtC,EAAyC;WAChCqY,uBAAuB,CAC3B,yBAAwBpP,EAAE,CAACqP,mBAAH,CACtB3Y,GADsB,CACjB4Y,EAAD,IAAaA,EAAE,CAACzY,KADE,EAEtBqV,IAFsB,CAEjB,IAFiB,CAEX,EAHc,CAA9B;;;MAOE9K,WAAW,CAAC+I,yBAAZ,CAAsC/N,MAAtC,CAAJ,EAAmD;WAC1CgT,uBAAuB,CAC5B,+EAD4B,CAA9B;;;QAKIG,qBAAqB,GAAGnO,WAAW,CAACiJ,wBAAZ,CAAqCjO,MAArC,CAA9B;;MAEImT,qBAAqB,CAACxY,MAAtB,KAAiC,CAArC,EAAwC;WAC/BqY,uBAAuB,CAC3B,yBAAwBG,qBAAqB,CAACrD,IAAtB,CACvB,IADuB,CAEvB,6BAH0B,CAA9B;;;MAOE,CAAC9K,WAAW,CAACgJ,iBAAZ,CAA8BhO,MAA9B,CAAL,EAA4C;QACtCgF,WAAW,CAACjP,MAAZ,CAAmBwH,qBAAvB,EAA8C;aACrCyV,uBAAuB,CAC5B,8CAD4B,CAA9B;;GA5Cc;;;;;;;;;;;;;;;SA+DXJ,cAAc,CACnBhP,EADmB,EAEnBC,OAFmB,EAGnB;IACEjJ,KAAK,EAAE,SADT;IAEEyF,WAAW,EAAE;GALI,EAOnBmR,WAPmB,CAArB,CA/DkB;CANb;;AChDA,MAAM4B,kBAAkB,GAAG,OAIhCxP,EAJgC,EAKhCC,OALgC,EAMhCmB,WANgC,EAOhCqO,WAPgC,EAQhC;EACEC,GAAG,EAAEC,WADP;EAEEC,MAAM,EAAEC;CAVsB,KAeH;EAC7B5P,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,oBAAjB,EAAuC;IACrC2O,WADqC;IAErCE,WAFqC;IAGrCE;GAHF;MAMIjQ,QAAyB,GAAGI,EAAE,CAAC5D,MAAH,IAAa,EAA7C;MACI,CAACqT,WAAL,EAAkB,OAAO7P,QAAP;QAEZkQ,aAAa,GAAG,IAAIzI,GAAJ,CACpBzH,QAAQ,CAAClJ,GAAT,CAAcyH,KAAD,IAA0BA,KAAK,CAACrH,IAA7C,CADoB,CAAtB;QAIMiZ,KAAK,GAAG,IAAI1I,GAAJ,EAAd;QACM2I,UAAU,GAAG,IAAI3I,GAAJ,EAAnB;QACM4I,QAAQ,GAAG,IAAI5I,GAAJ,EAAjB;QACM6I,aAAa,GAAG,IAAI7I,GAAJ,EAAtB;QACMjL,MAAM,GAAGgF,WAAW,CAAChF,MAA3B;;QAEM+T,eAAe,GAAItH,GAAD,IAAiD;UACjEuH,YAAY,GAAGhP,WAAW,CAACjP,MAAZ,CAAmBiK,MAAnB,CAA0Ba,MAA1B,CAAiCwS,WAAjC,CAArB;QACI,CAACW,YAAL,EAAmB,OAAOhX,SAAP;WAEZgX,YAAY,CAACvH,GAAD,CAAZ,IAAqBzM,MAAM,CAACgU,YAAY,CAACvH,GAAD,CAAb,CAA3B,GACHzM,MAAM,CAACgU,YAAY,CAACvH,GAAD,CAAb,CADH,GAEHzP,SAFJ;GAJF;;MASIuW,WAAJ,EAAiB;IACfA,WAAW,CAAC5I,OAAZ,CAAqB8B,GAAD,IAAS;UACvB,CAACA,GAAL,EAAU;YACJ1K,KAAK,GAAGgS,eAAe,CAACtH,GAAD,CAA7B;;UACI,CAAC1K,KAAD,IAAUyB,QAAQ,CAACC,IAAT,CAAewQ,OAAD,IAAaA,OAAO,CAAC/c,EAAR,KAAe6K,KAAK,CAAC7K,EAAhD,CAAd,EAAmE;;;;MAGnEwc,aAAa,CAACJ,GAAd,CAAkBvR,KAAK,CAACrH,IAAxB;MACAiZ,KAAK,CAACL,GAAN,CAAU7G,GAAV;MACAmH,UAAU,CAACN,GAAX,CAAevR,KAAK,CAACrH,IAArB;KARF;;;MAYE+Y,cAAJ,EAAoB;IAClBA,cAAc,CAAC9I,OAAf,CAAwB8B,GAAD,IAAS;UAC1B,CAACA,GAAL,EAAU;YACJ1K,KAAK,GAAGgS,eAAe,CAACtH,GAAD,CAA7B;UACI,CAAC1K,KAAL,EAAY;YACNmS,QAAQ,GAAG1Q,QAAQ,CAACuE,IAAT,CAAekM,OAAD,IAAaA,OAAO,CAAC/c,EAAR,KAAe6K,KAAK,CAAC7K,EAAhD,CAAjB;;UACIgd,QAAJ,EAAc;QACZR,aAAa,CAACrH,MAAd,CAAqB6H,QAAQ,CAACxZ,IAA9B;QACAmZ,QAAQ,CAACP,GAAT,CAAa7G,GAAb;QACAqH,aAAa,CAACR,GAAd,CAAkBY,QAAQ,CAACxZ,IAA3B;;KARJ;GA3C2B;;;EA0D7BsK,WAAW,CAACmG,gBAAZ,CAA6BvH,EAAE,CAAC9H,IAAH,CAAQrB,KAArC,EAA4CkQ,OAA5C,CAAqDE,QAAD,IAAc;UAC1DsJ,IAAI,GAAGnP,WAAW,CAACjP,MAAZ,CAAmB8J,KAAnB,CAAyBgL,QAAzB,CAAb;;QACIsJ,IAAI,CAACnU,MAAT,EAAiB;MACfmU,IAAI,CAACnU,MAAL,CAAY2K,OAAZ,CAAqBnD,QAAD,IAAc;cAC1BzF,KAAK,GAAGiD,WAAW,CAAChF,MAAZ,CAAmBwH,QAAnB,CAAd;;YACIzF,KAAK,IAAI,CAACyB,QAAQ,CAACC,IAAT,CAAewQ,OAAD,IAAaA,OAAO,CAAC/c,EAAR,KAAe6K,KAAK,CAAC7K,EAAhD,CAAd,EAAmE;UACjEwc,aAAa,CAACJ,GAAd,CAAkBvR,KAAK,CAACrH,IAAxB;UACAiZ,KAAK,CAACL,GAAN,CAAU9L,QAAV;UACAoM,UAAU,CAACN,GAAX,CAAevR,KAAK,CAACrH,IAArB;;OALJ;;GAHJ,EA1D6B;;MA0EzBiZ,KAAK,CAAC/b,IAAN,KAAe,CAAf,IAAoBic,QAAQ,CAACjc,IAAT,KAAkB,CAA1C,EAA6C;QACvCic,QAAQ,CAACjc,IAAT,KAAkB,CAAlB,IAAuBic,QAAQ,CAACjc,IAAT,GAAgB,CAA3C,EAA8C;MAC5CiM,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,oBAAjB,EAAuC;QACrC2O,WADqC;QAErCM,KAAK,EAAE,CAAC,GAAGA,KAAJ,CAF8B;QAGrCE,QAAQ,EAAE,CAAC,GAAGA,QAAJ,CAH2B;QAIrCD,UAAU,EAAE,CAAC,GAAGA,UAAJ,CAJyB;QAKrCE,aAAa,EAAE,CAAC,GAAGA,aAAJ;OALjB;;UAQIH,KAAK,CAAC/b,IAAN,KAAe,CAAnB,EAAsB;cACd+D,MAAM,GAAG,MAAMkI,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB0K,SAAtB,CACnBvN,OAAO,CAAC1F,KAAR,CAAc;UACZ6B,MAAM,EAAE,CAAC,GAAG4T,UAAJ;SADV,CADmB,CAArB;QAKApQ,QAAQ,GAAG7H,MAAM,CAAC3B,IAAlB;;;UAGE6Z,QAAQ,CAACjc,IAAT,KAAkB,CAAtB,EAAyB;aAClB,MAAMwc,YAAX,IAA2B,CAAC,GAAGN,aAAJ,CAA3B,EAA+C;cACzC;kBACInY,MAAM,GAAG,MAAMkI,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBwK,WAAtB,CACnBrN,OAAO,CAAC1F,KAAR,CAAc;cACZzD,IAAI,EAAE0Z;aADR,CADmB,CAArB;YAKA5Q,QAAQ,GAAG7H,MAAM,CAAC3B,IAAlB;WANF,CAOE,OAAO+C,GAAP,EAAY;YACZ8G,OAAO,CAACY,GAAR,CAAYkF,IAAZ,CAAiB,sBAAjB,EAAyC;cACvC5M,GAAG,EAAEA,GAAG,IAAIA,GAAG,CAACoK;aADlB;;;;KA5BR,MAkCO;YACCkN,kBAAkB,GAAG,CAAC,GAAGX,aAAJ,CAA3B;MAEA7P,OAAO,CAACY,GAAR,CAAYC,IAAZ,CAAiB,oBAAjB,EAAuC;QACrC2O,WADqC;QAErCM,KAAK,EAAE,CAAC,GAAGA,KAAJ,CAF8B;QAGrCE,QAAQ,EAAE,CAAC,GAAGA,QAAJ,CAH2B;QAIrCS,SAAS,EAAE9Q,QAAQ,CAAClJ,GAAT,CAAcoJ,CAAD,IAAsBA,CAAC,CAAChJ,IAArC,CAJ0B;QAKrCgZ,aAAa,EAAEW;OALjB;YAQM1Y,MAAM,GAAG,MAAMkI,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB6N,aAAtB,CACnB1Q,OAAO,CAAC1F,KAAR,CAAc;QACZ6B,MAAM,EAAEqU;OADV,CADmB,CAArB;MAKA7Q,QAAQ,GAAG7H,MAAM,CAAC3B,IAAlB;;GA7HyB;;;;;;;;QAuIvB+Y,2BAA2B,CAACnP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BxB,QAA3B,CAAjC,CAvI6B;;SA0ItBA,QAAP;CAzJK;;ACDA,MAAMgR,uBAAuB,GAAG,OACrC5Q,EADqC,EAErCC,OAFqC,EAGrCmB,WAHqC,KAIhB;;QAEfyP,iBAAiB,GAAGzP,WAAW,CAAChF,MAAZ,CAAmB,eAAnB,CAA1B;;MACIuD,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYyU,iBAAZ,CAAhB,EAAgD;UACxC5Q,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqByO,YAArB,CACJ7Q,OAAO,CAAC1F,KAAR,CAAc;MAAEwW,KAAK,EAAE;KAAvB,CADI,CAAN;UAGM5P,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAzB;WACO,IAAP;;;SAGK,KAAP;CAfK;;ACCA,MAAM4P,yBAEZ,GAAG,OAAOhR,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAoC;;;QAIhC6P,OAAO,GAAG,MAAMhR,OAAO,CAACE,MAAR,CAAe+Q,QAAf,CACpBjR,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqB8O,WAArB,CACElR,OAAO,CAAC1F,KAAR,CAAc;;IAEZhE,QAAQ,EAAE;GAFZ,CADF,CADoB,EAOnBT,GAAD,IAASA,GAAG,CAACM,IAPO,CAAtB;QAUMgb,mBAAmB,GAAG,MAAMtM,OAAO,CAACsJ,GAAR,CAChC6C,OAAO,CAACva,GAAR,CAAa2a,CAAD,IAAOC,KAAK,CAACD,CAAC,CAACE,MAAF,CAAShO,OAAV,CAAxB,CADgC,CAAlC;QAIMiO,sBAA2B,GAAGJ,mBAAmB,CAACzS,MAApB,CAClC,CAACC,GAAD,EAAMyS,CAAN,EAASI,KAAT,KAAmB;UACXC,oBAAoB,GAAGL,CAAC,CAACM,KAAF,CAAQjR,MAAR,CAC1BkR,IAAD,IAAeA,IAAI,CAAC9e,KAAL,KAAe,iBADH,CAA7B;;QAGI4e,oBAAoB,CAAC3a,MAArB,KAAgC,CAApC,EAAuC;MACrC6H,GAAG,CAACsI,IAAJ,CAAS;QAAEqK,MAAM,EAAEN,OAAO,CAACQ,KAAD,CAAjB;QAA0BC;OAAnC;;;WAGK9S,GAAP;GATgC,EAWlC,EAXkC,CAApC;QAcMiT,oBAAoB,GAAGzQ,WAAW,CAAChF,MAAZ,CAAmB,kBAAnB,CAA7B;QACM0V,OAAO,GAAGpF,sBAAsB,CACpC1M,EAAE,CAAC2C,IADiC,EAEpC6O,sBAAsB,CAACza,MAAvB,KAAkC,CAAlC,GACI,EADJ,GAEK,sBAAqBya,sBAAsB,CACzC9a,GADmB,CACf,CAAC;IAAE6a,MAAF;IAAUG;GAAX,KACHA,oBAAoB,CAAChb,GAArB,CACGkb,IAAD,IACG,KAAIA,IAAI,CAACtL,IAAL,CAAU7G,OAAV,CAAkB,IAAlB,EAAwB,GAAxB,CAA6B,KAAI8R,MAAM,CAAChR,GAAI,GAFrD,CAFkB,EAOnB2L,IAPmB,CAOd,EAPc,CAOV,EAXoB,CAAtC;QAcMpH,OAAO,CAACsJ,GAAR,CAAY,CAChBnB,SAAS,CACPjN,EADO,EAEPC,OAFO,EAGPuR,sBAAsB,CAACza,MAAvB,KAAkC,CAH3B,EAIP8a,oBAJO,CADO,EAOhBhF,gBAAgB,CAAC7M,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;IAAEuB,IAAI,EAAEmP;GAAnC,CAPA,CAAZ,CAAN,CA/CsC;CAFjC;;ACCQ,SAASC,MAAT,CAAgBxc,GAAhB,EAAwC;EACrDA,GAAG,CAACyc,EAAJ,CACE,qBADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3C6Q,YAAY,GAAGjS,EAAE,CAACM,IAAH,CAAQD,GAAR,CAAYqC,UAAZ,CAAuB,WAAvB,CAArB;UAEMoC,OAAO,CAACsJ,GAAR,CAAqB,CACzB7C,qBAAqB,CAACvL,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CADI,EAEzBuM,YAAY,CAAC3N,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAZ,CAAuCmH,IAAvC,CAA4C,MAAM;aACzCyI,yBAAyB,CAAChR,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAhC;KADF,CAFyB,EAKzB6Q,YAAY,GACRrB,uBAAuB,CAAC5Q,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAvB,CAAkDmH,IAAlD,CACE,MAAO9K,QAAP,IAA4C;UACtC,CAACA,QAAL,EAAe;cACP+R,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B,KAA3B,EAAkC;UACxDsO,GAAG,EAAE,CAAC,aAAD;SADiB,CAAxB;;KAHN,CADQ,GAURF,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B,KAA3B,EAAkC;MAClDsO,GAAG,EAAE,CAAC,aAAD,CAD6C;MAElDE,MAAM,EAAE,CAAC,UAAD,EAAa,kBAAb;KAFQ,CAfG,CAArB,CAAN;GAJ0B,CAFhC;;;ACJa,SAASsC,MAAT,CAAgB3c,GAAhB,EAAwC;EACrDA,GAAG,CAACyc,EAAJ,CACE,qBADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3CzK,IAAI,GAAGsJ,OAAO,CAAC0G,OAAR,CAAgBhO,UAA7B;;QAEIqH,EAAE,CAACuC,MAAP,EAAe;YACPhD,UAAU,GACdS,EAAE,CAACM,IAAH,CAAQ3J,IAAR,CAAarD,EAAb,KAAoBqD,IAAI,CAACrD,EAAzB,IACAgM,oBAAoB,CAACU,EAAE,CAAC2C,IAAJ,EAAUvB,WAAW,CAACjP,MAAZ,CAAmByH,gBAA7B,CAFtB;YAIMkL,OAAO,CAACsJ,GAAR,CAAY,CAChBhN,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD,CADgB,EAEhBlC,UAAU,IAAIA,UAAU,CAAC1B,OAAX,CAAmB7D,gBAAjC,GACIiG,OAAO,CAACE,MAAR,CAAegS,GAAf,CACGC,SADH,CACanS,OAAO,CAACtJ,IAAR,CAAa;QAAE0J,GAAG,EAAG,SAAQL,EAAE,CAACM,IAAH,CAAQD,GAAI;OAAzC,CADb,EAEGnH,KAFH,CAES,MAAM,EAFf,CADJ,GAIIE,SANY,CAAZ,CAAN;KALF,MAaO;YACC0L,OAAO,CAACsJ,GAAR,CAAY,CAChBhN,WAAW,CAACM,0BAAZ,CAAuCzB,OAAvC,EAAgDD,EAAE,CAACyB,MAAnD,CADgB,EAEhB+N,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B,KAA3B,EAAkC;QAClDwO,MAAM,EAAE,CAAC,aAAD;OADQ,CAFF,CAAZ,CAAN;;GAlBwB,CAFhC;;;ACDa,SAASsC,QAAT,CAAgB3c,GAAhB,EAAwC;EACrDA,GAAG,CAACyc,EAAJ,CACE,uBADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3C0D,OAAO,CAACsJ,GAAR,CAAY,CAChBoB,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B,KAA3B,EAAkC;MAClDsO,GAAG,EAAE,CAAC,aAAD,CAD6C;MAElDE,MAAM,EAAE,CAAC,UAAD;KAFQ,CADF,EAKhBoB,yBAAyB,CAAChR,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CALT,CAAZ,CAAN;GAF0B,CAFhC;;;ACFa,SAASiR,eAAT,CAAyB9c,GAAzB,EAAiD;EAC9DA,GAAG,CAACyc,EAAJ,CACE,+BADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3CkR,MAAM,GAAGrS,OAAO,CAAC0G,OAAR,CAAgB2L,MAA/B,CADiD;;QAI7CA,MAAM,CAAC7G,IAAP,KAAgB,KAApB,EAA2B;UAErB8G,QAAQ,GAAItS,OAAO,CAAC0G,OAAT,CAAyB6L,kBAA1C;UAEM/K,aAAa,GAAGrG,WAAW,CAACkG,gBAAZ,CAA6BiL,QAAQ,CAAC1b,KAAtC,CAAtB;;;QAII4Q,aAAa,IAAIrG,WAAW,CAACjP,MAAZ,CAAmBiK,MAAnB,CAA0Ba,MAA1B,CAAiCwK,aAAjC,CAArB,EAAsE;YAC9D;QAAErR,IAAI,EAAEqc;UAAY,MAAMxS,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBqQ,WAArB,CAC9BzS,OAAO,CAAC1F,KAAR,CAAc;QAAEhE,QAAQ,EAAE;OAA1B,CAD8B,CAAhC;YAGMoc,4BAA4B,GAAGF,OAAO,CAAC5S,IAAR,CAClC5C,MAAD,IACEmE,WAAW,CAACkG,gBAAZ,CAA6BrK,MAAM,CAAC/E,IAAP,CAAYrB,KAAzC,MACE4Q,aADF,IAEAxK,MAAM,CAACjG,KAAP,KAAiB,iBAFjB;MAIAiG,MAAM,CAAC/E,IAAP,CAAYrB,KAAZ,KAAsB0b,QAAQ,CAAC1b,KANE,CAArC;;UASI,CAAC8b,4BAAL,EAAmC;cAC3BnD,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BqG,aAA3B,EAA0C;UAChEiI,GAAG,EAAE,CAAC,aAAD,cAD2D;UAEhEE,MAAM,EAAE,CAAC,UAAD,EAAa,kBAAb;SAFc,CAAxB;;;;QAOA0C,MAAM,CAACzb,KAAP,KAAiB0b,QAAQ,CAAC1b,KAA9B,EAAqC;;QAElBuK,WAAW,CAAC4G,KAA/B,EAAsC;MACpC5G,WAAW,CAAC4G,KAAZ,CAAkBnD,WAAlB,CACE0N,QAAQ,CAAC1b,KADX,EAEG,UAASuK,WAAW,CAAC4G,KAAZ,CAAkBpD,OAAlB,CACR0N,MAAM,CAACzb,KADC,CAER,4BAA2BuK,WAAW,CAAC4G,KAAZ,CAAkBhD,MAAlB,CAC3BhF,EAD2B,EAE3BC,OAF2B,CAG3B,SAAQD,EAAE,CAAClN,KAAM,EAPrB;;GArCwB,CAFhC;;;ACDa,SAAS8f,oBAAT,CAA8Brd,GAA9B,EAAsD;EACnEA,GAAG,CAACyc,EAAJ,CACE,qCADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3CkR,MAAM,GAAGrS,OAAO,CAAC0G,OAAR,CAAgB2L,MAA/B;UACMC,QAAQ,GAAItS,OAAO,CAAC0G,OAAT,CAAyB6L,kBAA1C;UAEM/K,aAAa,GAAGrG,WAAW,CAACkG,gBAAZ,CAA6BiL,QAAQ,CAAC1b,KAAtC,CAAtB;;QAEI4Q,aAAa,IAAIrG,WAAW,CAACjP,MAAZ,CAAmBiK,MAAnB,CAA0Ba,MAA1B,CAAiCwK,aAAjC,CAArB,EAAsE;YAC9DoL,2BAA2B,GAAGzR,WAAW,CAACoG,gBAAZ,CAClCC,aADkC,EAElCzH,EAAE,CAACqP,mBAF+B,EAGlC;QACE1H,qBAAqB,EAAE;OAJS,CAApC;YAQM;QAAEvR,IAAI,EAAEqc;UAAY,MAAMxS,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBqQ,WAArB,CAC9BzS,OAAO,CAAC1F,KAAR,CAAc;QAAEhE,QAAQ,EAAE;OAA1B,CAD8B,CAAhC;YAIMoc,4BAA4B,GAAGF,OAAO,CAAC5S,IAAR,CAClC5C,MAAD,IACEmE,WAAW,CAACkG,gBAAZ,CAA6BrK,MAAM,CAAC/E,IAAP,CAAYrB,KAAzC,MACE4Q,aADF,IACmBxK,MAAM,CAACjG,KAAP,KAAiB,iBAHH,CAArC;YAMM8b,oBAAoB,GAAGL,OAAO,CAAC5S,IAAR,CAC1B5C,MAAD,IACEmE,WAAW,CAACkG,gBAAZ,CAA6BrK,MAAM,CAAC/E,IAAP,CAAYrB,KAAzC,MACE4Q,aADF,IACmBxK,MAAM,CAACjG,KAAP,KAAiB,UAHX,CAA7B;YAMMyG,QAAQ,GACZ,CAACoV,2BAAD,IACA,CAACF,4BADD,IAEAG,oBAHF;YAIMtD,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BqG,aAA3B,EAA0C;QAChEiI,GAAG,EAAE;QAEHiD,4BAA4B,IAAI,kBAF7B;QAIHlV,QAAQ,IAAI,UAJT,CAD2D;;QAQhEmS,MAAM,EAAE,CACNnS,QAAQ,IAAI,aADN,EAEN,CAACoV,2BAAD,IACE,CAACF,4BADH,IAEE,WAJI;OARc,CAAxB;;;QAiBEL,MAAM,CAACzb,KAAP,KAAiB0b,QAAQ,CAAC1b,KAA9B,EAAqC;;QAEjCuK,WAAW,CAAC4G,KAAhB,EAAuB;MACrB5G,WAAW,CAAC4G,KAAZ,CAAkBnD,WAAlB,CACE0N,QAAQ,CAAC1b,KADX,EAEG,0BAAyBuK,WAAW,CAAC4G,KAAZ,CAAkBpD,OAAlB,CACxB0N,MAAM,CAACzb,KADiB,CAExB,2CAA0CuK,WAAW,CAAC4G,KAAZ,CAAkBhD,MAAlB,CAC1ChF,EAD0C,EAE1CC,OAF0C,CAG1C,EAPJ;;GAxDwB,CAFhC;;;ACAa,SAAS8S,eAAT,CAAyBxd,GAAzB,EAAiD;EAC9DA,GAAG,CAACyc,EAAJ,CACE,+BADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3C;MAAElJ,IAAI,EAAEqa,QAAR;MAAkBvb;QAAWiJ,OAAO,CAAC0G,OAAT,CAAyB1J,MAA3D;QACI+C,EAAE,CAAC9H,IAAH,CAAQrB,KAAR,KAAkB0b,QAAQ,CAAC1b,KAA/B,EAAsC;UAEhC4Q,aAAa,GAAGrG,WAAW,CAACkG,gBAAZ,CAA6BiL,QAAQ,CAAC1b,KAAtC,CAAtB;QACI0L,MAAJ;;QAEIkF,aAAa,IAAIrG,WAAW,CAACjP,MAAZ,CAAmBiK,MAAnB,CAA0Ba,MAA1B,CAAiCwK,aAAjC,CAArB,EAAsE;YAC9DoL,2BAA2B,GAAGzR,WAAW,CAACoG,gBAAZ,CAClCC,aADkC,EAElCzH,EAAE,CAACqP,mBAF+B,EAGlC;QACE1H,qBAAqB,EAAE,IADzB;;;OAHkC,CAApC;YASM;QAAEvR,IAAI,EAAEqc;UAAY,MAAMxS,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBqQ,WAArB,CAC9BzS,OAAO,CAAC1F,KAAR,CAAc;QAAEhE,QAAQ,EAAE;OAA1B,CAD8B,CAAhC;YAGMoc,4BAA4B,GAAGF,OAAO,CAAC5S,IAAR,CAClC5C,MAAD,IACEmE,WAAW,CAACkG,gBAAZ,CAA6BrK,MAAM,CAAC/E,IAAP,CAAYrB,KAAzC,MACE4Q,aADF,IACmBxK,MAAM,CAACjG,KAAP,KAAiB,iBAHH,CAArC;YAMMyG,QAAQ,GACZ,CAACoV,2BAAD,IACA,CAACF,4BADD,IAEA3b,KAAK,KAAK,UAHZ;YAKMgc,SAAS,GAAG,MAAMxD,kBAAkB,CACxCxP,EADwC,EAExCC,OAFwC,EAGxCmB,WAHwC,EAIxCqG,aAJwC,EAKxC;QACEiI,GAAG,EAAE,CACHjS,QAAQ,IAAI,UADT,EAEHzG,KAAK,KAAK,mBAAV,IAAiC,kBAF9B,CADP;QAKE4Y,MAAM,EAAE,CACNnS,QAAQ,IAAI,aADN,EAEN,EACEoV,2BAA2B,IAAI7b,KAAK,KAAK,mBAD3C,KAEK,WAJC,EAKNA,KAAK,KAAK,UAAV,IACE,CAAC2b,4BADH,IAEE,kBAPI,EAQN3b,KAAK,KAAK,mBAAV,IAAiC,UAR3B;OAV8B,CAA1C;;UAuBIyG,QAAQ,IAAI,CAACkV,4BAAjB,EAA+C;QAC7CpQ,MAAM,GAAG,MAAMpB,mBAAmB,CAChCnB,EADgC,EAEhCC,OAFgC,EAGhCmB,WAHgC,EAIhC4R,SAJgC,CAAlC;;;;UASEpO,OAAO,GAAGxD,WAAW,CAAC4G,KAAZ,CAAkBpD,OAAlB,CAA0B2N,QAAQ,CAAC1b,KAAnC,CAAhB;UACMoc,KAAK,GAAG7R,WAAW,CAAC4G,KAAZ,CAAkBhD,MAAlB,CAAyBhF,EAAzB,EAA6BC,OAA7B,CAAd;;UAEMsD,OAAO,GAAG,CAAC,MAAM;UACjBvM,KAAK,KAAK,mBAAd,EAAmC;eACzB,OAAM4N,OAAQ,wBAAuBqO,KAAM,EAAnD;;;UAEEjc,KAAK,KAAK,UAAd,EAA0B;eAChB,6BAA4B4N,OAAQ,aAAYqO,KAAM,GAC5D1Q,MAAM,GAAG,0BAAH,GAAgC,EACvC,EAFD;;;aAIM,oBAAmBqC,OAAQ,iBAAgBqO,KAAM,EAAzD;KATc,GAAhB;;IAYA7R,WAAW,CAAC4G,KAAZ,CAAkBnD,WAAlB,CAA8B7E,EAAE,CAAC9H,IAAH,CAAQrB,KAAtC,EAA6C0M,OAA7C;GAhF0B,CAFhC;;;ACFa,SAAS2P,eAAT,CAAyB3d,GAAzB,EAAiD;EAC9DA,GAAG,CAACyc,EAAJ,CACE,+BADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3CkR,MAAM,GAAGrS,OAAO,CAAC0G,OAAR,CAAgB2L,MAA/B;UACMC,QAAQ,GAAItS,OAAO,CAAC0G,OAAT,CAAyB1J,MAAzB,CAAgC/E,IAAjD;UAEMuP,aAAa,GAAGrG,WAAW,CAACkG,gBAAZ,CAA6BiL,QAAQ,CAAC1b,KAAtC,CAAtB;;QAEI4Q,aAAa,IAAIrG,WAAW,CAACjP,MAAZ,CAAmBiK,MAAnB,CAA0Ba,MAA1B,CAAiCwK,aAAjC,CAArB,EAAsE;YAC9D;QAAErR,IAAI,EAAEqc;UAAY,MAAMxS,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqBqQ,WAArB,CAC9BzS,OAAO,CAAC1F,KAAR,CAAc;QAAEhE,QAAQ,EAAE;OAA1B,CAD8B,CAAhC;YAGMoc,4BAA4B,GAAGF,OAAO,CAAC5S,IAAR,CAClC5C,MAAD,IACEmE,WAAW,CAACkG,gBAAZ,CAA6BrK,MAAM,CAAC/E,IAAP,CAAYrB,KAAzC,MACE4Q,aADF,IACmBxK,MAAM,CAACjG,KAAP,KAAiB,iBAHH,CAArC;YAMMwY,kBAAkB,CAACxP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BqG,aAA3B,EAA0C;QAChEiI,GAAG,EAAE,CAAC,aAAD,EAAgB,WAAhB,CAD2D;QAEhEE,MAAM,EAAE,CACN,CAAC+C,4BAAD,IAAiC,kBAD3B,EAEN,UAFM;OAFc,CAAxB;;;QASEvR,WAAW,CAAC4G,KAAhB,EAAuB;UACjBsK,MAAM,CAACzb,KAAP,KAAiB0b,QAAQ,CAAC1b,KAA9B,EAAqC;QACnCuK,WAAW,CAAC4G,KAAZ,CAAkBnD,WAAlB,CACE7E,EAAE,CAAC9H,IAAH,CAAQrB,KADV,EAEG,WAAUuK,WAAW,CAAC4G,KAAZ,CAAkBpD,OAAlB,CACT2N,QAAQ,CAAC1b,KADA,CAET,4BAA2BuK,WAAW,CAAC4G,KAAZ,CAAkBhD,MAAlB,CAC3BhF,EAD2B,EAE3BC,OAF2B,CAG3B,EAPJ;OADF,MAUO;QACLmB,WAAW,CAAC4G,KAAZ,CAAkBnD,WAAlB,CACE0N,QAAQ,CAAC1b,KADX,EAEG,WAAUuK,WAAW,CAAC4G,KAAZ,CAAkBpD,OAAlB,CACT0N,MAAM,CAACzb,KADE,CAET,6BAA4BuK,WAAW,CAAC4G,KAAZ,CAAkBhD,MAAlB,CAC5BhF,EAD4B,EAE5BC,OAF4B,CAG5B,EAPJ;;;GAtCsB,CAFhC;;;ACEa,SAASkT,WAAT,CAAqB5d,GAArB,EAA6C;EAC1DA,GAAG,CAACyc,EAAJ,CACE,0BADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;;;UAG3CwM,WAAW,GAAI3N,OAAO,CAAC0G,OAAT,CAAyByM,MAA7C;UAEMtO,OAAO,CAACsJ,GAAR,CAAY,CAChBT,YAAY,CAAC3N,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2BwM,WAA3B,CADI;IAGhBuB,2BAA2B,CACzBnP,EADyB,EAEzBC,OAFyB,EAGzBmB,WAHyB,EAIzBpB,EAAE,CAAC5D,MAJsB,EAKzBwR,WALyB,CAHX,EAWhBoD,yBAAyB,CAAChR,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAXT,CAAZ,CAAN,CALiD;;UAoB3CD,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAzB;GArB0B,CAFhC;;;ACHa,SAASiS,MAAT,CAAgB9d,GAAhB,EAAwC;EACrDA,GAAG,CAACyc,EAAJ,CACE,qBADF,EAEE7G,8BAA8B,CAC5B,OAAOnL,EAAP,EAAWC,OAAX,EAAoBmB,WAApB,KAAmD;UAC3CkR,MAAM,GAAGrS,OAAO,CAAC0G,OAAR,CAAgB2L,MAA/B;;QAEEA,MAAM,CAAC7G,IAAP,KAAgB,KAAhB,IACA6G,MAAM,CAACzb,KAAP,KAAkB,GAAE/E,OAAO,CAACC,GAAR,CAAYsH,eAAgB,OAFlD,EAGE;;;;UAII;MAAEwU;QAAkB,MAAMF,YAAY,CAAC3N,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAA5C;QACI,CAACyM,aAAL,EAAoB,MAAM1M,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAzB;GAXM,CAFhC;;;ACCK,MAAMkS,YAAY,GAAG,OAG1BtT,EAH0B,EAI1BC,OAJ0B,EAK1BmB,WAL0B,EAM1BkL,aAN0B,KAOR;QACZ;IAAE3J;MAAS0J,UAAU,CACzBrM,EAAE,CAAC2C,IADsB,EAEzBvB,WAAW,CAACjP,MAAZ,CAAmByH,gBAFM,EAGzBR,SAHyB,EAIzBkT,aAJyB,CAA3B;QAOMO,gBAAgB,CAAC7M,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;IAAEuB;GAA7B,CAAtB;CAfK;;ACCQ,SAAS4Q,aAAT,CAAuBhe,GAAvB,EAA+C;EAC5DA,GAAG,CAACyc,EAAJ,CACE,CAAC,sBAAD,EAAyB,wBAAzB,CADF,EAEE,MAAO/R,OAAP,IAAgE;UACxDqS,MAAM,GAAGrS,OAAO,CAAC0G,OAAR,CAAgB2L,MAA/B;UACML,YAAY,GAChBK,MAAM,CAAC7G,IAAP,KAAgB,KAAhB,IAAyB6G,MAAM,CAACzb,KAAP,KAAiB,eAD5C;IAEAoJ,OAAO,CAAC0G,OAAR,CAAgBuE,YAAhB,CAA6B5K,IAA7B,CAAkCD,GAAlC,CAAsCqC,UAAtC,CAAiD,WAAjD;;QAEI4P,MAAM,CAAC7G,IAAP,KAAgB,KAAhB,IAAyB,CAACwG,YAA9B,EAA4C;;;;UAItChH,wBAAwB,CAAChL,OAAD,EAAU,OAAOD,EAAP,EAAWoB,WAAX,KAA2B;YAC3DjD,KAAK,GAAI8B,OAAO,CAAC0G,OAAT,CAAyBxI,KAAvC;;UACI8T,YAAJ,EAAkB;cACVpB,iBAAiB,GAAGzP,WAAW,CAAChF,MAAZ,CAAmB,eAAnB,CAA1B;cACMiF,cAAc,GAAGD,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,CAAvB;cACMoX,oBAAoB,GAAGpS,WAAW,CAAChF,MAAZ,CAAmB,eAAnB,CAA7B;;YACI6D,OAAO,CAAC0G,OAAR,CAAgB8M,MAAhB,KAA2B,SAA/B,EAA0C;cACpC5C,iBAAiB,IAAI1S,KAAK,CAAC7K,EAAN,KAAaud,iBAAiB,CAACvd,EAAxD,EAA4D;;;;;kBAKpD2M,OAAO,CAACE,MAAR,CAAekC,KAAf,CAAqByO,YAArB,CACJ7Q,OAAO,CAAC1F,KAAR,CAAc;cAAEwW,KAAK,EAAE;aAAvB,CADI,CAAN;;gBAGIyC,oBAAJ,EAA0B;oBAClBvT,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB0K,SAAtB,CACJvN,OAAO,CAAC1F,KAAR,CAAc;gBAAE6B,MAAM,EAAE,CAACoX,oBAAoB,CAAC1c,IAAtB;eAAxB,CADI,CAAN;;;kBAIIqY,2BAA2B,CAACnP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAjC;kBACMkS,YAAY,CAACtT,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;cAC3CtH,mBAAmB,EAAE,IADsB;;cAG3CC,SAAS,EAAE4F,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYiF,cAAZ,CAAZ,GACP,IADO,GAEPD,WAAW,CAACjP,MAAZ,CAAmByH,gBAAnB,CAAoCG;aALxB,CAAlB,CAd0D;WAA5D,MAsBO,IAAIsH,cAAc,IAAIlD,KAAK,CAAC7K,EAAN,KAAa+N,cAAc,CAAC/N,EAAlD,EAAsD;kBACrDggB,YAAY,CAACtT,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;cAC3CrH,SAAS,EAAE,IADgC;;;cAI3CD,mBAAmB,EAAE6F,YAAY,CAACK,EAAE,CAAC5D,MAAJ,EAAYyU,iBAAZ,CAAZ,GACjB,IADiB,GAEjBzP,WAAW,CAACjP,MAAZ,CAAmByH,gBAAnB,CAAoCE;aANxB,CAAlB;;;gBASIqH,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAzB;;;;;;UAKAA,WAAW,CAAC6H,iBAAZ,CAA8BrG,QAA9B,CAAuCzE,KAAK,CAAC7K,EAA7C,CAAJ,EAAsD;YAChD2M,OAAO,CAAC0G,OAAR,CAAgB8M,MAAhB,KAA2B,SAA/B,EAA0C;gBAClCxT,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsBwK,WAAtB,CACJrN,OAAO,CAAC1F,KAAR,CAAc;YAAEzD,IAAI,EAAEqH,KAAK,CAACrH;WAA5B,CADI,CAAN;SADF,MAIO;gBACCmJ,OAAO,CAACE,MAAR,CAAe2C,MAAf,CAAsB0K,SAAtB,CACJvN,OAAO,CAAC1F,KAAR,CAAc;YAAE6B,MAAM,EAAE,CAAC+B,KAAK,CAACrH,IAAP;WAAxB,CADI,CAAN;;;;;;YAOEqY,2BAA2B,CAACnP,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAjC;YAEMqN,kBAAkB,GAAGrN,WAAW,CAAChF,MAAZ,CAAmB,gBAAnB,CAA3B;YACMsS,cAAc,GAAGtN,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,CAAvB;YACMuS,WAAW,GAAGvN,WAAW,CAAChF,MAAZ,CAAmB,eAAnB,CAApB;;YAEM2B,MAAM,GAAG,CAAC,MAAM;YAChB0Q,kBAAkB,IAAItQ,KAAK,CAAC7K,EAAN,KAAamb,kBAAkB,CAACnb,EAA1D,EACE,OAAO,eAAP;YACEob,cAAc,IAAIvQ,KAAK,CAAC7K,EAAN,KAAaob,cAAc,CAACpb,EAAlD,EACE,OAAO,WAAP;YACEqb,WAAW,IAAIxQ,KAAK,CAAC7K,EAAN,KAAaqb,WAAW,CAACrb,EAA5C,EACE,OAAO,qBAAP;eACK,IAAP;OAPa,GAAf;;UAUIyK,MAAJ,EAAY;cACJuV,YAAY,CAACtT,EAAD,EAAKC,OAAL,EAAcmB,WAAd,EAA2B;WAC1CrD,MAAD,GAAUkC,OAAO,CAAC0G,OAAR,CAAgB8M,MAAhB,KAA2B;SADrB,CAAlB;OADF,MAIO,IAAIxT,OAAO,CAAC0G,OAAR,CAAgB8M,MAAhB,KAA2B,SAA/B,EAA0C;YAE7CrS,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,KACA+B,KAAK,CAAC7K,EAAN,KAAa8N,WAAW,CAAChF,MAAZ,CAAmB,iBAAnB,EAAsC9I,EAFrD,EAGE;gBACM6N,mBAAmB,CAACnB,EAAD,EAAKC,OAAL,EAAcmB,WAAd,CAAzB;;;KAlFwB,CAA9B;GAZJ;;;ACLa,SAASsS,iBAAT,CAA2Bne,GAA3B,EAAmD;EAChEA,GAAG,CAACyc,EAAJ,CACE,qBADF,EAEE5G,+BAA+B,CAC5BnL,OAAD,IAAaA,OAAO,CAAC0G,OAAR,CAAgBgN,SAAhB,CAA0BC,aADV,EAE7B,OAAO3T,OAAP,EAAgBmB,WAAhB,KAAgC;UACxB0D,OAAO,CAACsJ,GAAR,CACJnO,OAAO,CAAC0G,OAAR,CAAgBgN,SAAhB,CAA0BC,aAA1B,CAAwCld,GAAxC,CAA6CsJ,EAAD,IAC1CC,OAAO,CAACE,MAAR,CAAekC,KAAf,CACGxM,GADH,CAEIoK,OAAO,CAACtJ,IAAR,CAAa;MACX8K,MAAM,EAAEzB,EAAE,CAACyB;KADb,CAFJ,EAMG8G,IANH,CAMSnG,QAAD,IAAc;aACXjB,mBAAmB,CAACiB,QAAQ,CAAChM,IAAV,EAAgB6J,OAAhB,EAAyBmB,WAAzB,CAA1B;KAPJ,CADF,CADI,CAAN;GAH2B,CAFjC;;;ACDa,SAASyS,mBAAT,CAA6Bte,GAA7B,EAAqD;EAClEA,GAAG,CAACyc,EAAJ,CACE,uBADF,EAEE5G,+BAA+B,CAC5BnL,OAAD,IAAaA,OAAO,CAAC0G,OAAR,CAAgBmN,WAAhB,CAA4BF,aADZ,EAE7B,OAAO3T,OAAP,EAAgBmB,WAAhB,KAAgC;UACxB0D,OAAO,CAACsJ,GAAR,CACJnO,OAAO,CAAC0G,OAAR,CAAgBmN,WAAhB,CAA4BF,aAA5B,CAA0Cld,GAA1C,CAA+CsJ,EAAD,IAC5CC,OAAO,CAACE,MAAR,CAAekC,KAAf,CACGxM,GADH,CAEIoK,OAAO,CAACtJ,IAAR,CAAa;MACX8K,MAAM,EAAEzB,EAAE,CAACyB;KADb,CAFJ,EAMG8G,IANH,CAMSnG,QAAD,IAAc;aACXjB,mBAAmB,CAACiB,QAAQ,CAAChM,IAAV,EAAgB6J,OAAhB,EAAyBmB,WAAzB,CAA1B;KAPJ,CADF,CADI,CAAN;GAH2B,CAFjC;;;ACAF,MAAM2S,YAAY,GAAG,CACnB9T,OADmB,EAEnB8B,QAFmB,KAGP;MACR,CAACA,QAAL,EAAe,OAAO,KAAP;SACR,CAAC,CAAC9B,OAAO,CAAC0G,OAAR,CAAgBqN,QAAhB,CAAyB7P,IAAzB,CAA+B8P,CAAD,IAAOA,CAAC,CAACnd,IAAF,KAAWiL,QAAQ,CAACH,MAAzD,CAAT;CALF;;AAQA,AAAe,SAAShJ,MAAT,CAAgBrD,GAAhB,EAAwC;EACrDA,GAAG,CAACyc,EAAJ,CACE,QADF,EAEE5G,+BAA+B,CAC7B,CAACnL,OAAD,EAAUmB,WAAV,KAA2C;UACnCW,QAAQ,GAAGX,WAAW,CAACY,gBAAZ,EAAjB;QACI,CAACD,QAAL,EAAe,OAAO,EAAP;;QAGb9B,OAAO,CAAC0G,OAAR,CAAgB3P,KAAhB,KAA0B,SAA1B,IACA+c,YAAY,CAAC9T,OAAD,EAAU8B,QAAV,CAFd,EAGE;aACO,CAACA,QAAD,CAAP;;;WAGK,EAAP;GAZ2B,EAc7B,CAAC9B,OAAD,EAAUmB,WAAV,KAAgC;UACxBW,QAAQ,GAAGX,WAAW,CAACY,gBAAZ,EAAjB,CAD8B;;QAG1B+R,YAAY,CAAC9T,OAAD,EAAU8B,QAAV,CAAhB,EAAqC;MACnCX,WAAW,CAACqB,UAAZ,CAAuBxC,OAAvB,EAAgC8B,QAAhC;;GAlByB,CAFjC;;;ACCa,SAASmS,OAAT,CAAiB3e,GAAjB,EAAyC;EACtD4e,MAAa,CAAC5e,GAAD,CAAb;EACA6e,MAAa,CAAC7e,GAAD,CAAb;EACA8e,QAAe,CAAC9e,GAAD,CAAf;EACA+e,eAAsB,CAAC/e,GAAD,CAAtB;EACAgf,oBAA2B,CAAChf,GAAD,CAA3B,CALsD;;;;;EAetDif,eAAsB,CAACjf,GAAD,CAAtB;EACAkf,eAAsB,CAAClf,GAAD,CAAtB;EACAge,aAAa,CAAChe,GAAD,CAAb;EACAmf,WAAkB,CAACnf,GAAD,CAAlB;EACAof,MAAa,CAACpf,GAAD,CAAb;EAEAme,iBAAiB,CAACne,GAAD,CAAjB;EACAse,mBAAmB,CAACte,GAAD,CAAnB;EACAqD,MAAM,CAACrD,GAAD,CAAN;;;AChCF,IAAI,CAACzD,OAAO,CAACC,GAAR,CAAYsH,eAAjB,EAAkCvH,OAAO,CAACC,GAAR,CAAYsH,eAAZ,GAA8B,YAA9B;AAClCyM,OAAO,CAACjF,GAAR,CAAY;EAAE/J,IAAI,EAAEhF,OAAO,CAACC,GAAR,CAAYsH;CAAhC;;;;;;;AAWAub,aAAM,CAACC,GAAP,CACGtf,GAAD,IAA4B;QACpBuf,WAAW,GAAGC,IAAS,EAA7B;EACAzf,SAAS,CAACC,GAAD,EAAMuf,WAAN,CAAT;EACAZ,OAAO,CAAC3e,GAAD,CAAP;CAJJ"} \ No newline at end of file diff --git a/src/context/repoContext.ts b/src/context/repoContext.ts index eaf3a947f..1330a3ab7 100644 --- a/src/context/repoContext.ts +++ b/src/context/repoContext.ts @@ -245,7 +245,7 @@ export const obtainRepoContext = ( const orgConfig = orgsConfigs[owner.login]; if (!orgConfig) { - console.warn(owner.login, Object.keys(orgsConfigs)); + console.warn(`using default config for ${owner.login}`); return null; } diff --git a/src/orgsConfigs/defaultConfig.ts b/src/orgsConfigs/defaultConfig.ts new file mode 100644 index 000000000..2a29f361f --- /dev/null +++ b/src/orgsConfigs/defaultConfig.ts @@ -0,0 +1,43 @@ +import { Config } from './types'; + +const config: Config = { + autoAssignToCreator: true, + trimTitle: true, + requiresReviewRequest: false, + prDefaultOptions: { + featureBranch: false, + autoMergeWithSkipCi: false, + autoMerge: false, + deleteAfterMerge: true, + }, + parsePR: { + title: [], + }, + groups: {}, + waitForGroups: {}, + teams: {}, + labels: { + list: { + // /* ci */ + // 'ci/in-progress': { name: ':green_heart: ci/in-progress', color: '#0052cc' }, + // 'ci/fail': { name: ':green_heart: ci/fail', color: '#e11d21' }, + // 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' }, + + /* infos */ + 'breaking-changes': { + name: ':warning: Breaking Changes', + color: '#ef7934', + }, + }, + + review: { + ci: { + inProgress: 'ci/in-progress', + succeeded: 'ci/success', + failed: 'ci/fail', + }, + }, + }, +}; + +export default config; diff --git a/src/orgsConfigs/index.ts b/src/orgsConfigs/index.ts index 9788d0ee0..d20eb5b0d 100644 --- a/src/orgsConfigs/index.ts +++ b/src/orgsConfigs/index.ts @@ -1,4 +1,5 @@ import { Config as ConfigType } from './types'; +import defaultConfig from './defaultConfig'; import ornikar from './ornikar'; import christophehurpeau from './christophehurpeau'; @@ -12,6 +13,8 @@ export const orgsConfigs: { [owner: string]: Config } = { christophehurpeau, }; +export { defaultConfig }; + // flat requires node 11 // export const getMembers = ( // groups: Record,