Thibaut Boustany
7 years ago
2 changed files with 94 additions and 0 deletions
@ -0,0 +1,85 @@ |
|||
#!/usr/bin/env node
|
|||
|
|||
/* eslint-disable no-console */ |
|||
|
|||
const util = require('util') |
|||
const exec = util.promisify(require('child_process').exec) |
|||
const octokit = require('@octokit/rest')() |
|||
|
|||
const repo = { |
|||
owner: 'LedgerHQ', |
|||
repo: 'ledger-live-desktop', |
|||
} |
|||
|
|||
async function getTag() { |
|||
const { stdout } = await exec('git tag --points-at HEAD') |
|||
const tag = stdout.replace('\n', '') |
|||
|
|||
if (!tag) { |
|||
throw new Error(`Unable to get current tag. Is your HEAD on a tagged commit?`) |
|||
} |
|||
|
|||
return tag |
|||
} |
|||
|
|||
async function checkDraft(tag) { |
|||
const { status, data } = await octokit.repos.getReleases(repo) |
|||
|
|||
if (status !== 200) { |
|||
throw new Error(`Got HTTP status ${status} when trying to fetch releases list.`) |
|||
} |
|||
|
|||
for (const release of data) { |
|||
if (release.tag_name === tag) { |
|||
if (release.draft) { |
|||
return true |
|||
} |
|||
|
|||
throw new Error(`A release tagged ${tag} exists but is not a draft.`) |
|||
} |
|||
} |
|||
|
|||
return false |
|||
} |
|||
|
|||
async function createDraft(tag) { |
|||
const params = { |
|||
...repo, |
|||
tag_name: tag, |
|||
name: tag, |
|||
draft: true, |
|||
prerelease: true, |
|||
} |
|||
|
|||
const { status } = await octokit.repos.createRelease(params) |
|||
|
|||
if (status !== 201) { |
|||
throw new Error(`Got HTTP status ${status} when trying to create the release draft.`) |
|||
} |
|||
} |
|||
|
|||
async function main() { |
|||
try { |
|||
const token = process.env.GH_TOKEN |
|||
const tag = await getTag() |
|||
|
|||
octokit.authenticate({ |
|||
type: 'token', |
|||
token, |
|||
}) |
|||
|
|||
const existingDraft = await checkDraft(tag) |
|||
|
|||
if (!existingDraft) { |
|||
console.log(`No draft exists for ${tag}, creating...`) |
|||
createDraft(tag) |
|||
} else { |
|||
console.log(`A draft already exists for ${tag}, nothing to do.`) |
|||
} |
|||
} catch (e) { |
|||
console.error(e) |
|||
process.exit(1) |
|||
} |
|||
} |
|||
|
|||
main() |
Loading…
Reference in new issue