name: Publish to npm on: push: branches: - master paths: - 'package.json' jobs: test: uses: ./.github/workflows/test.yml get-version: runs-on: ubuntu-latest outputs: current_version: ${{ steps.current_version.outputs.version }} last_version: ${{ steps.last_version.outputs.version }} token_exists: ${{ steps.check_token.outputs.token }} steps: - uses: actions/checkout@v6 with: fetch-depth: 50 # Check if the package.json version field has changed since the last push - name: Get current version from package.json id: current_version run: | echo "version=$(jq -r .version package.json)" >> "$GITHUB_OUTPUT" - name: Get the version from the last push id: last_version run: | git checkout ${{ github.event.before }} echo "version=$(jq -r .version package.json)" >> "$GITHUB_OUTPUT" - name: Check if NPM_TOKEN exists id: check_token run: | echo "token=$(if [ -n "${{ secrets.NPM_TOKEN }}" ]; then echo true; else echo false; fi)" >> "$GITHUB_OUTPUT" npm-publish: needs: - test - get-version runs-on: ubuntu-latest # We only want to publish if the package.json version field has changed if: needs.get-version.outputs.current_version != needs.get-version.outputs.last_version && needs.get-version.outputs.token_exists == 'true' steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: 18 cache: 'npm' registry-url: 'https://registry.npmjs.org' - run: npm ci - run: npm run build-npm - run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}