From e2ab9e33b6d03693a6946caa0456d11031ca8e55 Mon Sep 17 00:00:00 2001 From: Thibaut Boustany Date: Fri, 24 Aug 2018 10:34:55 +0200 Subject: [PATCH] Draft release ourselves before electron-builder --- scripts/create-draft-release.js | 85 +++++++++++++++++++++++++++++++++ scripts/release.sh | 9 ++++ 2 files changed, 94 insertions(+) create mode 100644 scripts/create-draft-release.js diff --git a/scripts/create-draft-release.js b/scripts/create-draft-release.js new file mode 100644 index 00000000..7edb38d7 --- /dev/null +++ b/scripts/create-draft-release.js @@ -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() diff --git a/scripts/release.sh b/scripts/release.sh index 297c6e53..a0912e45 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -57,6 +57,15 @@ fi # exit 1 # fi + +if [[ $(uname) == 'Linux' ]]; then # only run it on one target, to prevent race conditions + runJob \ + "node scripts/create-draft-release.js" \ + "creating a draft release on GitHub (if needed)..." \ + "draft release ready" \ + "failed to create a draft release" +fi + runJob "yarn compile" "compiling..." "compiled" "failed to compile" "verbose" runJob \