You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
snabbdom/mark-pr-head-as-trusted.cjs

44 lines
1.3 KiB
JavaScript

const Git = require('nodegit')
const assert = require('assert')
const meow = require('meow');
/**
* For reference, the unix shell equivalent of this script is kind of:
*
* ```sh
* # `ORIGIN` is your remote name for the Snabbdom repository.
* # `PR` is the pull request number
* REF=refs/remotes/$ORIGIN/pull/$PR/head
* git fetch $ORIGIN +refs/pull/$PR/head:$REF
* BRANCH=allow-ci_$PR
* git push $ORIGIN +${REF}:refs/heads/$BRANCH
* ```
*/
(async function () {
const [pr] = meow({ hardRejection: false }).input
assert.notStrictEqual(pr, undefined)
const repo = await Git.Repository.open(__dirname)
const remote = (await repo.getRemotes())
.find(r => r.url() === 'git@github.com:snabbdom/snabbdom.git')
assert.notStrictEqual(remote, undefined)
const ref = `refs/remotes/${remote.name()}/pull/${pr}/head`
const credentials = (url, userName) => Git.Cred
.sshKeyFromAgent(userName)
await remote
.fetch(
[`+refs/pull/${pr}/head:${ref}`],
{ callbacks: { credentials } }
)
const branchName = `allow-ci_${pr}`
await remote
.push(
[`+${ref}:refs/heads/${branchName}`],
{ callbacks: { credentials } }
)
console.log(`\
Marked head of pull request #${pr} as trusted by pushing it to branch \`${branchName}\`.
As soon as the pull request is closed/merged, this branch can be deleted.\
`)
})()