From f9e0d30795c967e31b6783070277620c312eb8ec Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 7 Oct 2021 16:20:33 +0200 Subject: [PATCH] Add automated release workflows (#853) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit also contains new code introduced after the PR in #853 was merged. I just squashed it all together to prevent noisy commits to try and fix CI. The funny thing is that now the final commit looks fairly stupid/simple but it wasn't that easy as I would have liked. 1. Couldn't find a proper way to execute `npm version` using yarn workspaces. `yarn workspaces foreach npm version` would have worked if we were using Yarn 2 instead of Yarn 1. 2. Introducing `version` and `publish` scripts in both packages worked, but then the default `version` and `publish` were also executed. 3. Once I made the scripts unique (`npm-version`, `npm-publish`) it worked~ish. The registry was always set to a yarnpkg registry, even if we set the registry in CI and in a local .npmrc file. My guess is that we are executing in a nested directory and therefore it didn't work. 4. Next, I found the `npm workspaces` option so that we can use that in addition to `yarn workspaces` 🙃 5. In CI of course this didn't work, because I was not using the same node version... 6. After everything worked, I did cleanup of the new scripts, and removed the introduced .npmrc files. --- .github/workflows/release-dev.yml | 54 +++++++++++++++++++++++++++++ .github/workflows/release-next.yml | 55 ++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 .github/workflows/release-dev.yml create mode 100644 .github/workflows/release-next.yml diff --git a/.github/workflows/release-dev.yml b/.github/workflows/release-dev.yml new file mode 100644 index 0000000..7885ed3 --- /dev/null +++ b/.github/workflows/release-dev.yml @@ -0,0 +1,54 @@ +name: Release Dev + +on: + push: + branches: [develop] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16] + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + registry-url: 'https://registry.npmjs.org' + + - name: Use cached node_modules + id: cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + nodeModules- + + - name: Install dependencies + run: yarn install --frozen-lockfile + env: + CI: true + + - name: Test + run: npm test + env: + CI: true + + - name: Resolve version + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: "Version based on commit: 0.0.0-dev.${{ steps.vars.outputs.sha_short }}" + run: npm version -w packages 0.0.0-dev.${{ steps.vars.outputs.sha_short }} --force --no-git-tag-version + + - name: Publish + run: npm publish -w packages --tag dev + env: + CI: true + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release-next.yml b/.github/workflows/release-next.yml new file mode 100644 index 0000000..6b27847 --- /dev/null +++ b/.github/workflows/release-next.yml @@ -0,0 +1,55 @@ +name: Release Dev + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16] + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + registry-url: 'https://registry.npmjs.org' + + - name: Use cached node_modules + id: cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + nodeModules- + + - name: Install dependencies + run: yarn install --frozen-lockfile + env: + CI: true + + - name: Test + run: npm test + env: + CI: true + + - name: Resolve version + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: "Version based on commit: 0.0.0-next.${{ steps.vars.outputs.sha_short }}" + run: npm version -w packages 0.0.0-next.${{ steps.vars.outputs.sha_short }} --force --no-git-tag-version + + - name: Publish + run: npm publish -w packages --tag next + env: + CI: true + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} +