/ node_modules / bcrypt / .github / workflows / build-pack-publish.yml
build-pack-publish.yml
  1  name: Prebuildify, package, publish
  2  
  3  on:
  4    push:
  5      branches: [ master ]
  6    pull_request:
  7      branches: [ master ]
  8    release:
  9      types: [ prereleased, released ]
 10  
 11  jobs:
 12    build-linux:
 13      runs-on: ubuntu-latest
 14      steps:
 15        - uses: actions/checkout@v4
 16        # This is unsafe, but we really don't use any other native dependencies
 17        - run: npm ci
 18        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/almalinux-devtoolset11 npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 19        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/alpine npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 20        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/linux-armv7 npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 21        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/linux-armv7l-musl npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 22        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/linux-arm64 npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 23        - run: docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/linux-arm64-musl npx prebuildify --napi --tag-libc --strip --target=node@18.0.0
 24        - run: find prebuilds
 25        - uses: actions/upload-artifact@v4
 26          with:
 27            name: prebuild-linux
 28            path: ./prebuilds/
 29  
 30    build-windows:
 31      runs-on: windows-latest
 32      steps:
 33        - uses: actions/checkout@v4
 34        - uses: actions/setup-node@v4
 35          with:
 36            node-version: 20
 37            registry-url: 'https://registry.npmjs.org'
 38        - run: npm ci
 39        - run: npx prebuildify --napi --strip --arch=x64 --target=node@18.0.0
 40        - run: npx prebuildify --napi --strip --arch=arm64 --target=node@20.0.0
 41        - run: dir prebuilds
 42        - uses: actions/upload-artifact@v4
 43          with:
 44            name: prebuild-windows
 45            path: ./prebuilds/
 46  
 47    build-macos:
 48      runs-on: macos-latest
 49      steps:
 50        - uses: actions/checkout@v4
 51        - uses: actions/setup-node@v4
 52          with:
 53            node-version: 18
 54            registry-url: 'https://registry.npmjs.org'
 55        - run: npm ci
 56        - run: npx prebuildify --napi --strip --arch=arm64 --target=node@18.0.0
 57        - run: npx prebuildify --napi --strip --arch=x64 --target=node@18.0.0
 58        - run: find prebuilds
 59        - uses: actions/upload-artifact@v4
 60          with:
 61            name: prebuild-macos
 62            path: ./prebuilds/
 63  
 64    pack:
 65      needs:
 66        - build-linux
 67        - build-windows
 68        - build-macos
 69      runs-on: ubuntu-latest
 70      outputs:
 71          PACK_FILE: ${{ steps.pack.outputs.PACK_FILE }}
 72      steps:
 73        - uses: actions/checkout@v4
 74        - uses: actions/download-artifact@v4
 75          with:
 76            path: /tmp/prebuilds/
 77        - name: Coalesce prebuilds from build matrix
 78          run: |
 79            mkdir prebuilds
 80            for d in /tmp/prebuilds/*; do
 81              cp -Rav $d/* prebuilds/
 82            done
 83        - run: chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f
 84        - id: pack
 85          name: Prepare NPM package
 86          run: |
 87            echo "PACK_FILE=$(npm pack)" >> "$GITHUB_OUTPUT"
 88        - uses: actions/upload-artifact@v4
 89          with:
 90            name: package-tgz
 91            path: ${{ steps.pack.outputs.PACK_FILE }}
 92            if-no-files-found: 'error'
 93  
 94    test-package:
 95      needs: pack
 96      strategy:
 97        matrix:
 98          node-version: [ 18, 20, 22, 23 ]
 99          os: [ ubuntu-latest, windows-latest, macos-latest ]
100      runs-on: ${{ matrix.os }}
101      steps:
102        - uses: actions/setup-node@v4
103          with:
104            node-version: ${{ matrix.node-version }}
105            registry-url: 'https://registry.npmjs.org'
106        - uses: actions/download-artifact@v4
107          with:
108            name: package-tgz
109        - run: npm install ${{ needs.pack.outputs.PACK_FILE }}
110        - run: node -e "const b = require('bcrypt'); const h = b.hashSync('hello', 10); console.log(h, b.compareSync('hello', h))"