Skip to content

Client testing

Client testing #1775

Workflow file for this run

name: npm-build
# This workflow publishes releases to NPM, after checking that the version they would create does not already exist.
# Hence, it will only publish if the version number in package.json is not already listed at:
# https://www.npmjs.com/package/@finos/fdc3?activeTab=versions
# The workflow will:
# - Only trigger on a push or PR merge to a release/* branch in the repository
# - Ignore Docusaurus workflow, docs/** and website/** as they don't affect the NPM module build
# WARNING: the workflow does NOT confirm that the version number in package JSON matches the branch name, which should be manually confirmed
on:
push:
branches:
- release/**
paths-ignore:
- '.github/workflows/docusaurus.yml'
pull_request:
types: [opened, reopened, edited, ready_for_review]
branches:
- main
- release/**
paths-ignore:
- '.github/workflows/docusaurus.yml'
permissions:
contents: read
jobs:
# JOB to run change detection
changes:
runs-on: ubuntu-latest
permissions:
pull-requests: read
# Set job outputs to values from the filter step
outputs:
builtFiles: ${{ steps.filter.outputs.builtFiles }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 #v3.0.2
id: filter
with:
filters: |
builtFiles:
- '.eslint*'
- 'src/**'
- 'schemas/**'
- 'package-lock.json'
- 'package.json'
- 'rollup.config.js'
- 's2tQuicktypeUtil.js'
- 'tsconfig.json'
- '.github/workflows/package.yml'
package-build:
name: Build on Node ${{ matrix.node }} and ${{ matrix.os }}
needs: changes
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [20]
os: [ubuntu-latest, windows-latest]
steps:
- name: Checkout repo
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Use Node ${{ matrix.node }}
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
uses: bahmutov/npm-install@2509f13e8485d88340a789a3f7ca11aaac47c9fc #v1.8.36
- name: Lint
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
run: npm run lint
- name: Test
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
run: npm run test --ci --coverage --maxWorkers=2
- name: Build
if: ${{ needs.changes.outputs.builtFiles == 'true' }}
run: npm run build
- name: Checkout repo
if: ${{ needs.changes.outputs.builtFiles == 'false' }}
run: 'echo "Build steps skipped as no relevant changes were detected"'
package-publish:
if: ${{ github.event_name == 'push' && needs.changes.outputs.builtFiles == 'true'}}
needs: [changes,package-build]
name: Publish package to ${{ matrix.name }}
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
strategy:
matrix:
include:
- name: NPM
registry: https://registry.npmjs.org
token-name: NPM_TOKEN
- name: GitHub
registry: https://npm.pkg.github.com
token-name: GITHUB_TOKEN
steps:
- name: Checkout repo
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Configure Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 20
registry-url: ${{ matrix.registry }}
- name: Check package version
id: check-version
uses: tehpsalmist/npm-publish-status-action@deb911186cfe5134094f49183364da10a986e4e7
- name: Report already published status
if: steps.check-version.outputs.exists == '1'
run: 'echo "package version already exists in the NPM registry"'
- name: Report not yet published status
if: steps.check-version.outputs.exists == '0'
run: 'echo "package version does not exist in the NPM registry, publishing..."'
- name: Install dependencies
if: steps.check-version.outputs.exists == '0'
uses: bahmutov/npm-install@2509f13e8485d88340a789a3f7ca11aaac47c9fc #v1.8.36
- name: Publish
if: steps.check-version.outputs.exists == '0'
run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets[matrix.token-name] }}