背景

之前参加过一个小游戏项目,出过让新人操作的教程,结果提了一堆Pull Requests,写个脚本全删了。

步骤

  1. 先去申请一个Token,默认的就行,粘贴下来: https://github.com/settings/tokens/new?scopes=repo

  2. 下载一个JS库,用来操作Github API:

    1
    > pnpm add @octokit/core
  3. 看Github API Docs,关掉PR其实就是把它的状态更新成closed。参见这里:

    所以我们要用这个逻辑来关掉一个PR:

    1
    2
    3
    4
    5
    6
    octokit.request('PATCH /repos/{owner}/{repo}/pulls/{pull_number}', {
    owner: 'OWNER',
    repo: 'REPO',
    pull_number: '123',
    state: 'closed',
    })
  4. 开写,都是基本的语法,用了一下Promise.all把一个Promise<T>[]包装成Promise<T[]>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    const { 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,但出于写静态类型语言的洁癖,我给加上了。

就这样。