From b2cff2c50b11e7d546d44c9755d4b349e05aa4c5 Mon Sep 17 00:00:00 2001
From: Luke Karrys <luke@lukekarrys.com>
Date: Thu, 31 Mar 2022 16:51:22 -0700
Subject: [PATCH] chore: add github action for release

---
 .github/workflows/release.yml | 69 +++++++++++++++++++++++++++++++++++
 Makefile                      |  9 +++--
 scripts/git-dirty.js          |  2 +-
 3 files changed, 75 insertions(+), 5 deletions(-)
 create mode 100644 .github/workflows/release.yml

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000000000..02d3fcf16caf4
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,69 @@
+name: Release - cli
+
+on:
+  workflow_dispatch:
+  pull_request:
+
+jobs:
+  lint-all:
+    if: startsWith(github.head_ref, 'release/')
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - name: Use Node.js 16.x
+        uses: actions/setup-node@v3
+        with:
+          node-version: 16.x
+          cache: npm
+      - run: node ./bin/npm-cli.js run resetdeps
+      - run: node ./bin/npm-cli.js run lint-all
+
+  prepublish:
+    if: startsWith(github.head_ref, 'release/')
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - name: Use Node.js 16.x
+        uses: actions/setup-node@v3
+        with:
+          node-version: 16.x
+          cache: npm
+      - run: node ./bin/npm-cli.js run resetdeps
+      - run: make prepublish
+
+  test-all:
+    if:  startsWith(github.head_ref, 'release/')
+    strategy:
+      fail-fast: false
+      matrix:
+        node-version:
+          - 12.13.0
+          - 12.x
+          - 14.15.0
+          - 14.x
+          - 16.0.0
+          - 16.x
+        platform:
+          - os: ubuntu-latest
+            shell: bash
+          - os: macos-latest
+            shell: bash
+          - os: windows-latest
+            shell: cmd
+    runs-on: ${{ matrix.platform.os }}
+    defaults:
+      run:
+        shell: ${{ matrix.platform.shell }}
+    steps:
+    - uses: actions/checkout@v3
+    - name: Use Node.js ${{ matrix.node-version }}
+      uses: actions/setup-node@v3
+      with:
+        node-version: ${{ matrix.node-version }}
+        cache: npm
+    - run: node ./bin/npm-cli.js run resetdeps
+    - run: node ./bin/npm-cli.js link -f --ignore-scripts
+    - run: node ./bin/npm-cli.js run test-all --ignore-scripts
+    - name: git status
+      if: matrix.platform.os != 'windows-latest'
+      run: node scripts/git-dirty.js
diff --git a/Makefile b/Makefile
index f863dcdc87fc5..80df25630eb64 100644
--- a/Makefile
+++ b/Makefile
@@ -78,7 +78,7 @@ docs/content/commands/npm-%.md: docs/bin/config-doc-command.js lib/commands/%.js
 
 freshdocs:
 	touch lib/utils/config/definitions.js
-	touch "docs/bin/*.js"
+	touch docs/bin/*.js
 	make docs
 
 test: deps
@@ -101,10 +101,11 @@ link: uninstall
 
 prune: deps
 	node bin/npm-cli.js prune --production --no-save --no-audit
-	@[[ "$(shell git status -s)" != "" ]] && echo "ERR: found unpruned files" && exit 1 || echo "git status is clean"
+	node scripts/git-dirty.js
 
-publish: gitclean ls-ok link test smoke-tests docs prune
-	@git push origin :v$(shell node bin/npm-cli.js --no-timing -v) 2>&1 || true
+prepublish: gitclean ls-ok link test smoke-tests docs prune
+
+publish: prepublish
 	git push origin $(BRANCH) &&\
 	git push origin --tags &&\
 	node bin/npm-cli.js publish --tag=$(PUBLISHTAG)
diff --git a/scripts/git-dirty.js b/scripts/git-dirty.js
index 484a4d23e7be2..5730ed9006681 100644
--- a/scripts/git-dirty.js
+++ b/scripts/git-dirty.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 const { spawnSync } = require('child_process')
-const changes = spawnSync('git', ['status', '--porcelain', '-uno'])
+const changes = spawnSync('git', ['status', '--porcelain', '-uall'])
 const stdout = changes.stdout.toString('utf8')
 const stderr = changes.stderr.toString('utf8')
 const { status, signal } = changes