Skip to content

2.0.4

2.0.4 #12

Workflow file for this run

name: CI / Release
on:
push:
tags:
- v**
jobs:
check-lint:
name: "Check / Lint"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run linting
run: |
npm install
npm run lint
npm run lint-shell
check-build:
name: "Check / Build"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run build
run: |
npm install
npm run build --verbose
- uses: actions/upload-artifact@v4
with:
name: dist
path: ./dist
check-matrix:
name: "Check / Matrix"
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- id: set-matrix
run: |
files=$(find tests/* -maxdepth 0 -type d | sed 's/.*/"&"/' | paste -sd, -)
files=$files,$(find tests/* -maxdepth 0 -type f | grep -e "/*.test.ts" | sed 's/.*/"&"/' | paste -sd, -)
if [ -z "$files" ]; then
echo "matrix={\"shard\":[]}" >> $GITHUB_OUTPUT
else
echo "matrix={\"shard\":[$files]}" >> $GITHUB_OUTPUT
fi
check-test:
name: "Check / Test"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
strategy:
fail-fast: false
matrix: ${{fromJson(needs.check-matrix.outputs.matrix)}}
needs: check-matrix
steps:
- uses: actions/checkout@v4
- name: Set artifact name
run: echo "SLUG=$(echo ${{ matrix.shard }} | sed 's/[/.]/-/g')" >> $GITHUB_ENV
- name: Run tests
run: |
nix develop .#ci --command bash -c $'
npm run prebuild --verbose
npm run test -- \
--coverageReporters json \
--coverage \
"${{ matrix.shard }}"
'
mv tmp/coverage/coverage-final.json "tmp/coverage/${{ env.SLUG }}.json"
- uses: actions/upload-artifact@v4
with:
name: coverage-artifacts-${{ env.SLUG }}
path: tmp/coverage/
check-coverage:
name: "Check / Coverage"
runs-on: ubuntu-latest
needs: check-test
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: coverage-artifacts-*
path: tmp/coverage/
merge-multiple: true
- run: rm .npmrc
- name: Merge coverage results
run: npx nyc merge tmp/coverage/ tmp/coverage/cobertura-coverage.json
- uses: actions/upload-artifact@v4
with:
name: cobertura-coverage
path: tmp/coverage/cobertura-coverage.json
build-platforms:
name: "Build / Platforms"
runs-on: ${{ matrix.os }}
container:
image: ${{ matrix.platform == 'linux' && 'ghcr.io/matrixai/github-runner' || null }}
needs: check-build
strategy:
fail-fast: false
matrix:
include:
- platform: linux
os: ubuntu-latest
env:
npm_config_arch: "x64"
script: |
nix develop .#ci --command bash -c $'
npm run prebuild --verbose
npm test -- --ci --coverage
'
- platform: windows
os: windows-latest
env:
npm_config_devdir: "${{ github.workspace }}/tmp/node-gyp"
npm_config_arch: "x64"
script: |
mkdir -Force "$GITHUB_WORKSPACE/tmp"
Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
./scripts/choco-install.ps1
refreshenv
npm install --ignore-scripts
$env:Path = "$(npm root)\.bin;" + $env:Path
npm test -- --ci --coverage
- platform: macos
os: macos-latest
env:
npm_config_devdir: "${{ github.workspace }}/tmp/node-gyp"
script: |
eval "$(brew shellenv)"
./scripts/brew-install.sh
hash -r
npm install --ignore-scripts
export PATH="$(npm root)/.bin:$PATH"
npm test -- --ci --coverage
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- uses: actions/download-artifact@v4
with:
name: dist
path: ./dist
- name: Build
env: ${{ matrix.env }}
run: ${{ matrix.script }}
- uses: actions/upload-artifact@v4
with:
name: prebuild-${{ matrix.platform }}
path: ./prebuild
build-prerelease:
name: "Build / Pre-release"
runs-on: ubuntu-latest
concurrency:
group: build-prerelease
cancel-in-progress: false
needs:
- check-lint
- check-test
- build-platforms
if: contains(github.ref, '-')
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: prebuild*
path: prebuild
merge-multiple: true
- name: Run deployment
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc
echo 'Publishing library prerelease'
npm install
npm publish --tag prerelease --access public
for d in prebuild/*; do
tar \
--create \
--verbose \
--file="prebuild/$(basename $d).tar" \
--directory=prebuild \
"$(basename $d)"
done
gh release \
create "$GITHUB_REF_NAME" \
prebuild/*.tar \
--title "$GITHUB_REF_NAME-$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
--notes "" \
--prerelease \
--target staging \
--repo "$GITHUB_REPOSITORY"
rm -f ./.npmrc
release-distribution:
name: "Release / Distribution"
runs-on: ubuntu-latest
concurrency:
group: release-distribution
cancel-in-progress: false
needs:
- check-lint
- check-test
- build-platforms
if: >
!contains(github.ref, '-')
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: prebuild*
path: prebuild
merge-multiple: true
- name: Publish release
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc
echo 'Publishing library'
npm install
npm publish --access public
for d in prebuild/*; do
tar \
--create \
--verbose \
--file="prebuild/$(basename $d).tar" \
--directory=prebuild \
"$(basename $d)"
done
gh release \
create "$GITHUB_REF_NAME" \
prebuild/*.tar \
--title "$GITHUB_REF_NAME-$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
--notes "" \
--target master \
--repo "$GITHUB_REPOSITORY"
rm -f ./.npmrc