Skip to content

ci(test-publish): drop docker verdaccio #33

ci(test-publish): drop docker verdaccio

ci(test-publish): drop docker verdaccio #33

Workflow file for this run

name: Test and Conditionally Publish
on:
push:
paths-ignore:
- '.anylint'
- '.editorconfig'
- '.env.example'
- '.gitattributes'
- '.gitignore'
- 'commitlint.config.js'
- 'LICENSE'
pull_request:
branches:
- master
paths-ignore:
- '.anylint'
- '.editorconfig'
- '.env.example'
- '.gitattributes'
- '.gitignore'
- 'commitlint.config.js'
- 'LICENSE'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
# pnpm should be installed before the setup-node action. REF: https://github.com/actions/setup-node/issues/530
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Test
run: pnpm test
- name: Lint
run: pnpm eslint .
- name: Lint Markdown
run: pnpm markdownlint .
e2etest:
needs: test
runs-on: ${{ matrix.os }}
strategy:
matrix:
node-version: [18, 20, 22]
# [REF]: https://github.com/actions/runner-images
# Q. Why `macos-latest-large`(x86-64) instead of `macos-latest`(arm64)?
# A. Apple silicon does not support 'nested virtualization' yet,
# though support *will* be added from M3 + macOS 15.
# [REF]: https://github.com/douglascamata/setup-docker-macos-action
os: [ubuntu-latest, macos-latest-large, windows-latest, windows-2019]
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Setup Docker on macOS
# Currently, docker is not preinstalled on macos runner images.
if: startsWith(matrix.os, 'macos')
uses: douglascamata/setup-docker-macos-action@v1-alpha
- name: Run Local Npm Registry (Verdaccio) On Linux and macOS
if: startsWith(matrix.os, 'windows') == false
# verdaccio is private npm registry. [link](https://github.com/verdaccio/verdaccio/)
run: docker compose -f verdaccio/docker-compose.yaml up --wait
- name: Run Local Npm Registry (Verdaccio) On Windows
if: startsWith(matrix.os, 'windows')
# Q. Why not using docker?
# A. [REF](https://github.com/verdaccio/verdaccio/issues/4808)
run: |
pnpm add --global forever verdaccio
forever start verdaccio --config ./verdaccio/config.yaml
- name: Publish To Local NPM Registry
run: |
# From npm v7, `npm adduser` is required before `npm publish`.
# (adduser REF: https://docs.npmjs.com/cli/v7/commands/npm-adduser)
# However, `npm adduser` is interactive
# and can be substituted by setting `_authToken`.
# By local verdaccio setting(verdaccio/conf/default.yaml),
# the _authToken can be any random string,
# and verdaccio is configured to allowing anyone to publish `hasura-cli`.
npm config set //localhost:4873/:_authToken helloworld
npm run prepublishOnly
npm publish --registry http://localhost:4873
- name: Test Installation
run: |
npm install --global hasura-cli --registry http://localhost:4873
hasura version --skip-update-check
- name: Test Uninstallation
if: startsWith(matrix.os, 'windows') == false
run: npm uninstall --global hasura-cli
publish:
needs: e2etest
if: startsWith(github.ref, 'refs/tags/v2.') && ( github.event.base_ref == 'refs/heads/master' )
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
- name: Set Up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Build and Publish
# only runs if name of git tag starts with 'v1.' and on branch master
run: |
pnpm run prepublishOnly # to prevent a mistake though there is already prepublishOnly lifecycle hook.
pnpm publish
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}