用JS删除仓库的所有PR
背景
之前参加过一个小游戏项目,出过让新人操作的教程,结果提了一堆Pull Requests,写个脚本全删了。
步骤
-
先去申请一个Token,默认的就行,粘贴下来: https://github.com/settings/tokens/new?scopes=repo
-
下载一个JS库,用来操作Github API:
1
> pnpm add @octokit/core
-
看Github API Docs,关掉PR其实就是把它的状态更新成
closed
。参见这里:-
https://docs.github.com/en/rest/pulls/pulls#list-pull-requests
-
https://docs.github.com/en/rest/pulls/pulls#update-a-pull-request
所以我们要用这个逻辑来关掉一个PR:
1
2
3
4
5
6octokit.request('PATCH /repos/{owner}/{repo}/pulls/{pull_number}', {
owner: 'OWNER',
repo: 'REPO',
pull_number: '123',
state: 'closed',
}) -
-
开写,都是基本的语法,用了一下
Promise.all
把一个Promise<T>[]
包装成Promise<T[]>
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18const { Octokit } = require('@octokit/core')
async function main() {
const octokit = new Octokit({ auth: 'TOKEN' })
const response = await octokit.request('GET /repos/{owner}/{repo}/pulls', {
owner: 'OWNER',
repo: 'REPO'
})
await Promise.all(response.data.map(item => item.number).map(pullNumber => octokit.request('PATCH /repos/{owner}/{repo}/pulls/{pull_number}', {
owner: 'OWNER',
repo: 'REPO',
pull_number: pullNumber.toString(),
state: 'closed',
})))
}
main()我不确定这里的
pullNumber
是否需要加toString
,但出于写静态类型语言的洁癖,我给加上了。
就这样。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵小窝!