From 9d3900f857ff5f0282e36d322d186ee21c35b706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20M=C3=A9ndez?= Date: Mon, 28 Oct 2024 17:56:45 +0100 Subject: [PATCH] chore: fix release pipeline (#850) --- .github/workflows/if-nodejs-release.yml | 134 ------------------ .github/workflows/release-with-changesets.yml | 71 +++++----- 2 files changed, 34 insertions(+), 171 deletions(-) delete mode 100644 .github/workflows/if-nodejs-release.yml diff --git a/.github/workflows/if-nodejs-release.yml b/.github/workflows/if-nodejs-release.yml deleted file mode 100644 index 72d01de47..000000000 --- a/.github/workflows/if-nodejs-release.yml +++ /dev/null @@ -1,134 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# It does magic only if there is package.json file in the root of the project -name: Release - if Node project - -on: - push: - branches: - - master - # below lines are not enough to have release supported for these branches - # make sure configuration of `semantic-release` package mentions these branches - - next-spec - - next-major - - next-major-spec - - beta - - alpha - - next - -jobs: - - test-nodejs: - # We just check the message of first commit as there is always just one commit because we squash into one before merging - # "commits" contains array of objects where one of the properties is commit "message" - # Release workflow will be skipped if release conventional commits are not used - if: | - startsWith( github.repository, 'asyncapi/' ) && - (startsWith( github.event.commits[0].message , 'fix:' ) || - startsWith( github.event.commits[0].message, 'fix!:' ) || - startsWith( github.event.commits[0].message, 'feat:' ) || - startsWith( github.event.commits[0].message, 'feat!:' )) - name: Test NodeJS release on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - # Using macos-13 instead of latest (macos-14) due to an issue with Puppeteer and such runner. - # See: https://github.com/puppeteer/puppeteer/issues/12327 and https://github.com/asyncapi/parser-js/issues/1001 - os: [ubuntu-latest, macos-13, windows-latest] - steps: - - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows - run: | - git config --global core.autocrlf false - git config --global core.eol lf - shell: bash - - name: Checkout repository - uses: actions/checkout@v4 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "exists=true" >> $GITHUB_OUTPUT || echo "exists=false" >> $GITHUB_OUTPUT - shell: bash - - if: steps.packagejson.outputs.exists == 'true' - name: Check package-lock version - uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master - id: lockversion - - if: steps.packagejson.outputs.exists == 'true' - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "${{ steps.lockversion.outputs.version }}" - - if: steps.lockversion.outputs.version == '18' && matrix.os == 'windows-latest' - name: Install npm cli 8 - shell: bash - #npm cli 10 is buggy because of some cache issues - run: npm install -g npm@8.19.4 - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - shell: bash - run: npm ci - - if: steps.packagejson.outputs.exists == 'true' - name: Run test - run: npm test --if-present - - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel - name: Report workflow run status to Slack - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,action,workflow - text: 'Release workflow failed in testing job' - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} - - release: - needs: [test-nodejs] - name: Publish to any of NPM, Github, or Docker Hub - runs-on: ubuntu-latest - steps: - - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows - run: | - git config --global core.autocrlf false - git config --global core.eol lf - - name: Checkout repository - uses: actions/checkout@v4 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "exists=true" >> $GITHUB_OUTPUT || echo "exists=false" >> $GITHUB_OUTPUT - shell: bash - - if: steps.packagejson.outputs.exists == 'true' - name: Check package-lock version - uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master - id: lockversion - - if: steps.packagejson.outputs.exists == 'true' - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "${{ steps.lockversion.outputs.version }}" - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - shell: bash - run: npm ci - - if: steps.packagejson.outputs.exists == 'true' - name: Add plugin for conventional commits for semantic-release - run: npm install --save-dev conventional-changelog-conventionalcommits@5.0.0 - - if: steps.packagejson.outputs.exists == 'true' - name: Publish to any of NPM, Github, and Docker Hub - id: release - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - GIT_AUTHOR_NAME: asyncapi-bot - GIT_AUTHOR_EMAIL: info@asyncapi.io - GIT_COMMITTER_NAME: asyncapi-bot - GIT_COMMITTER_EMAIL: info@asyncapi.io - run: npx semantic-release@19.0.4 - - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel - name: Report workflow run status to Slack - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,action,workflow - text: 'Release workflow failed in release job' - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} diff --git a/.github/workflows/release-with-changesets.yml b/.github/workflows/release-with-changesets.yml index 0e849831c..213ef9406 100644 --- a/.github/workflows/release-with-changesets.yml +++ b/.github/workflows/release-with-changesets.yml @@ -8,60 +8,57 @@ on: jobs: test-nodejs: - # We just check the message of the first commit as there is always just one commit because we squash into one before merging - # "commits" contains an array of objects where one of the properties is the commit "message" - # Release workflow will be skipped if release conventional commits are not used - if: | - startsWith( github.repository, 'asyncapi/' ) - name: Test NodeJS release on ${{ matrix.os }} + name: Test NodeJS PR - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: - # Using macos-13 instead of latest (macos-14) due to an issue with Puppeteer and such runner. + # Using macos-13 instead of latest (macos-14) due to an issue with Puppeteer and such runner. # See: https://github.com/puppeteer/puppeteer/issues/12327 and https://github.com/asyncapi/parser-js/issues/1001 os: [ubuntu-latest, macos-13, windows-latest] steps: - - name: Set git to use LF # To once and for all finish the never-ending fight between Unix and Windows + - id: should_run + name: Should Run + run: echo "shouldrun=true" >> $GITHUB_OUTPUT + shell: bash + - if: steps.should_run.outputs.shouldrun == 'true' + name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows run: | git config --global core.autocrlf false git config --global core.eol lf shell: bash - - name: Checkout repository + - if: steps.should_run.outputs.shouldrun == 'true' + name: Checkout repository uses: actions/checkout@v4 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "exists=true" >> $GITHUB_OUTPUT || echo "exists=false" >> $GITHUB_OUTPUT - shell: bash - - if: steps.packagejson.outputs.exists == 'true' - name: Check package-lock version - uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master - id: lockversion - - if: steps.packagejson.outputs.exists == 'true' + - if: steps.should_run.outputs.shouldrun == 'true' name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "${{ steps.lockversion.outputs.version }}" - - if: steps.lockversion.outputs.version == '18' && matrix.os == 'windows-latest' - name: Install npm cli 8 + node-version: 20 + - if: steps.should_run.outputs.shouldrun == 'true' + uses: pnpm/action-setup@v3 + with: + run_install: false + - if: steps.should_run.outputs.shouldrun == 'true' + name: Get pnpm store directory shell: bash - # npm cli 10 is buggy because of some cache issues - run: npm install -g npm@8.19.4 - - if: steps.packagejson.outputs.exists == 'true' + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - if: steps.should_run.outputs.shouldrun == 'true' + uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - if: steps.should_run.outputs.shouldrun == 'true' name: Install dependencies shell: bash - run: npm ci - - if: steps.packagejson.outputs.exists == 'true' - name: Run test - run: npm test --if-present - - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel - name: Report workflow run status to Slack - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,action,workflow - text: "Release workflow failed in testing job" - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} + run: pnpm install + - if: steps.should_run.outputs.shouldrun == 'true' + name: Test + run: pnpm test + release: needs: [test-nodejs]