
This turns the check-cherry-pick script into a github-script based JavaScript program. This makes it much easier to extend to check reverts or merge commits later on.
73 lines
2.1 KiB
JavaScript
Executable File
73 lines
2.1 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, dry = true) {
|
|
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,
|
|
})
|
|
}
|
|
|
|
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')
|
|
.action(async (owner, repo, pr) => {
|
|
const commits = (await import('./commits.js')).default
|
|
run(commits, owner, repo, pr)
|
|
})
|
|
|
|
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.dry)
|
|
} finally {
|
|
rmSync(tmp, { recursive: true })
|
|
}
|
|
})
|
|
|
|
await program.parse()
|