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.
44 lines
1.3 KiB
JavaScript
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.\
|
|
`)
|
|
})()
|