From 3c84667c4ca10970cd3b70c10ffb0b33f95c8c1e Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Wed, 11 Mar 2020 10:11:01 +0100
Subject: [PATCH] build: refactor release (#5691)

---
 .eslintrc.js                  |  7 +++++++
 .github/workflows/release.yml |  1 +
 tools/dispatch-release.mjs    |  2 +-
 tools/release.mjs             | 27 +++++++--------------------
 tools/utils.mjs               | 22 +++++++++++++++++++++-
 5 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 91be6afe29..8aefe0a29a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -82,5 +82,12 @@ module.exports = {
         '@typescript-eslint/unbound-method': 0,
       },
     },
+    {
+      files: ['**/*.mjs'],
+
+      rules: {
+        '@typescript-eslint/explicit-function-return-type': 0,
+      },
+    },
   ],
 };
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4a2bf8b518..8756452acf 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -40,6 +40,7 @@ jobs:
           git config --global user.email 'bot@renovateapp.com'
           git config --global user.name  'Renovate Bot'
           yarn config set version-git-tag false
+          echo '//registry.yarnpkg.com/:_authToken=${NPM_TOKEN}' > ~/.npmrc
           echo "Node $(node --version)"
           python --version
           echo "Yarn $(yarn --version)"
diff --git a/tools/dispatch-release.mjs b/tools/dispatch-release.mjs
index 610465dde4..a8dbd9023a 100644
--- a/tools/dispatch-release.mjs
+++ b/tools/dispatch-release.mjs
@@ -1,6 +1,6 @@
 import got from 'got';
 import shell from 'shelljs';
-import program from './utils.mjs';
+import { program } from './utils.mjs';
 
 const version = program.release;
 const dry = program.dryRun;
diff --git a/tools/release.mjs b/tools/release.mjs
index 7f5af09f77..cb85944a61 100644
--- a/tools/release.mjs
+++ b/tools/release.mjs
@@ -1,32 +1,19 @@
 import shell from 'shelljs';
-import program from './utils.mjs';
+import { program, exec } from './utils.mjs';
 
 const version = program.release;
 const sha = program.sha;
-const dry = program.dryRun;
 
 let err = false;
 
 shell.echo(`Publishing version: ${version}`);
 
-try {
-  shell.echo('Publishing docker images ...');
-  if (!dry)
-    shell.exec(`./.github/workflows/release-docker.sh ${version} ${sha}`);
-  else shell.echo('dry-run done.');
-} catch (e) {
-  shell.echo(e.toString());
-  err = true;
-}
+shell.echo('Publishing docker images ...');
+err = err && !exec(`./.github/workflows/release-docker.sh ${version} ${sha}`);
 
-try {
-  shell.echo('Publishing npm package ...');
-  if (!dry)
-    shell.exec(`yarn publish --non-interactive --new-version ${version}`);
-  else shell.echo('dry-run done.');
-} catch (e) {
-  shell.echo(e.toString());
-  err = true;
-}
+shell.echo('Publishing npm package ...');
+err =
+  err &&
+  !exec(`yarn publish --non-interactive --new-version ${version} --verbose`);
 
 if (err) shell.exit(1);
diff --git a/tools/utils.mjs b/tools/utils.mjs
index e8d9c04582..49f1e215ff 100644
--- a/tools/utils.mjs
+++ b/tools/utils.mjs
@@ -1,4 +1,5 @@
 import commander from 'commander';
+import shell from 'shelljs';
 
 const program = new commander.Command();
 program
@@ -9,4 +10,23 @@ program
 
 program.parse(process.argv);
 
-export default program;
+export { program };
+
+/**
+ * Executes a shell command
+ * @param cmd {string} The command to execute
+ * @returns {boolean} Returns true on zero exit code otherwise false
+ */
+export function exec(cmd) {
+  try {
+    if (!program.dryRun) {
+      const res = shell.exec(cmd);
+      return res.code === 0;
+    }
+    shell.echo(`DRY-RUN: ${cmd}`);
+  } catch (e) {
+    shell.echo(e.toString());
+    return false;
+  }
+  return true;
+}
-- 
GitLab