You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.7 KiB
85 lines
1.7 KiB
#!/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()
|
|
|