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