mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
39fea292b9
* Tool: Bring back mergefreeze API integration Context: https://github.com/fleetdm/fleet/pull/5628#issuecomment-1196175485 Unfortunately, the API doesn't work. * Lay out how this would work in the database - but instead, do it ephemerally for now * Remove model * Maintain state (the easy way for now)
90 lines
3.9 KiB
JavaScript
Vendored
90 lines
3.9 KiB
JavaScript
Vendored
module.exports = {
|
|
|
|
friendlyName: 'Freeze open pull requests',
|
|
|
|
|
|
description: 'Freeze existing pull requests open on https://github.com/fleetdm/fleet, except those that consist exclusively of changes to files where the author is the DRI, according to auto-approval rules.',
|
|
|
|
|
|
extendedDescription: `# Usage
|
|
|
|
## Dry run
|
|
sails_custom__githubAccessToken=YOUR_TOKEN_HERE sails run scripts/freeze-open-pull-requests.js --dry
|
|
|
|
## The real deal
|
|
sails_custom__githubAccessToken=YOUR_TOKEN_HERE sails run scripts/freeze-open-pull-requests.js --limit=100`,
|
|
|
|
|
|
inputs: {
|
|
dry: { type: 'boolean', defaultsTo: false, description: 'Whether to do a dry run, and not actually freeze anything.' },
|
|
limit: { type: 'number', defaultsTo: 100, description: 'The max number of PRs to examine and potentially freeze. (Useful for testing.)' },
|
|
},
|
|
|
|
|
|
fn: async function () {
|
|
// Is this in use?
|
|
// > For context on the history of this bit of code, which has gone been
|
|
// > implemented a couple of different ways, and gone back and forth, check out:
|
|
// > https://github.com/fleetdm/fleet/pull/5628#issuecomment-1196175485
|
|
throw new Error('Not currently in use. See comments in this script for more information.');
|
|
}
|
|
|
|
// fn: async function ({dry: isDryRun, limit: maxNumPullRequestsToCheck }) {
|
|
|
|
// sails.log('Running custom shell script... (`sails run freeze-open-pull-requests`)');
|
|
|
|
// let owner = 'fleetdm';
|
|
// let repo = 'fleet';
|
|
// let baseHeaders = {
|
|
// 'User-Agent': 'sails run freeze-open-pull-requests',
|
|
// 'Authorization': `token ${sails.config.custom.githubAccessToken}`
|
|
// };
|
|
|
|
// // Fetch open pull requests
|
|
// // [?] https://docs.github.com/en/rest/pulls/pulls#list-pull-requests
|
|
// let openPullRequests = await sails.helpers.http.get(`https://api.github.com/repos/${owner}/${repo}/pulls`, {
|
|
// state: 'open',
|
|
// per_page: maxNumPullRequestsToCheck,//eslint-disable-line camelcase
|
|
// }, baseHeaders);
|
|
|
|
// if (openPullRequests.length > maxNumPullRequestsToCheck) {
|
|
// openPullRequests = openPullRequests.slice(0,maxNumPullRequestsToCheck);
|
|
// }
|
|
|
|
// let SECONDS_TO_WAIT = 5;
|
|
// sails.log(`Examining and potentially freezing ${openPullRequests.length} PRs very soon… (To cancel, press CTRL+C quickly within ${SECONDS_TO_WAIT}s!)`);
|
|
// await sails.helpers.flow.pause(SECONDS_TO_WAIT*1000);
|
|
|
|
// // For all open pull requests…
|
|
// await sails.helpers.flow.simultaneouslyForEach(openPullRequests, async(pullRequest)=>{
|
|
|
|
// let prNumber = pullRequest.number;
|
|
// let prAuthor = pullRequest.user.login;
|
|
// require('assert')(prAuthor !== undefined);
|
|
|
|
// // Freeze, if appropriate.
|
|
// // (Check versus the intersection of DRIs for all changed files to make sure SOMEONE is preapproved for all of them.)
|
|
// let isAuthorPreapproved = await sails.helpers.githubAutomations.getIsPrPreapproved.with({
|
|
// prNumber: prNumber,
|
|
// isGithubUserMaintainerOrDoesntMatter: true// « doesn't matter here because no auto-approval is happening. Worst case, a community PR to an area with a "*" in the DRI mapping remains unfrozen.
|
|
// });
|
|
|
|
// if (isDryRun) {
|
|
// sails.log(`#${prNumber} by @${prAuthor}:`, isAuthorPreapproved ? 'Would have skipped freeze…' : 'Would have frozen…');
|
|
// } else {
|
|
// sails.log(`#${prNumber} by @${prAuthor}:`, isAuthorPreapproved ? 'Skipping freeze…' : 'Freezing…');
|
|
// if (!isAuthorPreapproved) {
|
|
// // [?] https://docs.github.com/en/rest/reference/pulls#create-a-review-for-a-pull-request
|
|
// await sails.helpers.http.post(`https://api.github.com/repos/${owner}/${repo}/pulls/${prNumber}/reviews`, {
|
|
// event: 'REQUEST_CHANGES',
|
|
// body: 'The repository has been frozen for an upcoming release. In case of emergency, you can dismiss this review and merge.'
|
|
// }, baseHeaders);
|
|
// }//fi
|
|
// }
|
|
// });
|
|
|
|
// }
|
|
|
|
};
|
|
|