 b46cb23251
			
		
	
	
		b46cb23251
		
			
		
	
	
	
	
		
			
			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()
 |