mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-12 02:40:31 +08:00
This is the very first step to extending the commits job to do more than just cherry-picks in the future: It could check reverts or merge commits, but also the commit message format and more. Of course, cherry-picks are still just checked on the stable branches as before. For now, this allows us to run the part that dismisses automated reviews automatically. This helps us when we do branch related checks in the prepare step, which would also create such a review. To avoid cluttering multiple reviews across a PR, we'll want all of these reviews to be handled by the same code, thus this change.
86 lines
2.6 KiB
JavaScript
Executable File
86 lines
2.6 KiB
JavaScript
Executable File
#!/usr/bin/env -S node --import ./run
|
|
import { execSync } from 'node:child_process'
|
|
import { closeSync, mkdtempSync, openSync, rmSync } from 'node:fs'
|
|
import { tmpdir } from 'node:os'
|
|
import { join } from 'node:path'
|
|
import { program } from 'commander'
|
|
import * as core from '@actions/core'
|
|
import { getOctokit } from '@actions/github'
|
|
|
|
async function run(action, owner, repo, pull_number, options = {}) {
|
|
const token = execSync('gh auth token', { encoding: 'utf-8' }).trim()
|
|
|
|
const github = getOctokit(token)
|
|
|
|
const payload = !pull_number ? {} : {
|
|
pull_request: (await github.rest.pulls.get({
|
|
owner,
|
|
repo,
|
|
pull_number,
|
|
})).data
|
|
}
|
|
|
|
process.env['INPUT_GITHUB-TOKEN'] = token
|
|
|
|
closeSync(openSync('step-summary.md', 'w'))
|
|
process.env.GITHUB_STEP_SUMMARY = 'step-summary.md'
|
|
|
|
await action({
|
|
github,
|
|
context: {
|
|
payload,
|
|
repo: {
|
|
owner,
|
|
repo,
|
|
},
|
|
},
|
|
core,
|
|
dry: true,
|
|
...options,
|
|
})
|
|
}
|
|
|
|
program
|
|
.command('prepare')
|
|
.description('Prepare relevant information of a pull request.')
|
|
.argument('<owner>', 'Owner of the GitHub repository to check (Example: NixOS)')
|
|
.argument('<repo>', 'Name of the GitHub repository to check (Example: nixpkgs)')
|
|
.argument('<pr>', 'Number of the Pull Request to check')
|
|
.action(async (owner, repo, pr) => {
|
|
const prepare = (await import('./prepare.js')).default
|
|
run(prepare, owner, repo, pr)
|
|
})
|
|
|
|
program
|
|
.command('commits')
|
|
.description('Check commit structure of a pull request.')
|
|
.argument('<owner>', 'Owner of the GitHub repository to check (Example: NixOS)')
|
|
.argument('<repo>', 'Name of the GitHub repository to check (Example: nixpkgs)')
|
|
.argument('<pr>', 'Number of the Pull Request to check')
|
|
.option('--no-cherry-picks', 'Do not expect cherry-picks.')
|
|
.action(async (owner, repo, pr, options) => {
|
|
const commits = (await import('./commits.js')).default
|
|
run(commits, owner, repo, pr, options)
|
|
})
|
|
|
|
program
|
|
.command('labels')
|
|
.description('Manage labels on pull requests.')
|
|
.argument('<owner>', 'Owner of the GitHub repository to label (Example: NixOS)')
|
|
.argument('<repo>', 'Name of the GitHub repository to label (Example: nixpkgs)')
|
|
.argument('[pr]', 'Number of the Pull Request to label')
|
|
.option('--no-dry', 'Make actual modifications')
|
|
.action(async (owner, repo, pr, options) => {
|
|
const labels = (await import('./labels.js')).default
|
|
const tmp = mkdtempSync(join(tmpdir(), 'github-script-'))
|
|
try {
|
|
process.env.GITHUB_WORKSPACE = tmp
|
|
process.chdir(tmp)
|
|
run(labels, owner, repo, pr, options)
|
|
} finally {
|
|
rmSync(tmp, { recursive: true })
|
|
}
|
|
})
|
|
|
|
await program.parse()
|