You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.0 KiB
110 lines
4.0 KiB
name: Prebuildify, package, publish |
|
|
|
on: |
|
push: |
|
branches: [ master ] |
|
pull_request: |
|
branches: [ master ] |
|
release: |
|
types: [ prereleased, released ] |
|
|
|
jobs: |
|
build-linux: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v4 |
|
# This is unsafe, but we really don't use any other native dependencies |
|
- run: npm ci |
|
- 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 |
|
- 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 |
|
- 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 |
|
- 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 |
|
- 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 |
|
- 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 |
|
- run: find prebuilds |
|
- uses: actions/upload-artifact@v4 |
|
with: |
|
name: prebuild-linux |
|
path: ./prebuilds/ |
|
|
|
build-windows: |
|
runs-on: windows-latest |
|
steps: |
|
- uses: actions/checkout@v4 |
|
- uses: actions/setup-node@v4 |
|
with: |
|
node-version: 20 |
|
registry-url: 'https://registry.npmjs.org' |
|
- run: npm ci |
|
- run: npx prebuildify --napi --strip --arch=x64 --target=node@18.0.0 |
|
- run: npx prebuildify --napi --strip --arch=arm64 --target=node@20.0.0 |
|
- run: dir prebuilds |
|
- uses: actions/upload-artifact@v4 |
|
with: |
|
name: prebuild-windows |
|
path: ./prebuilds/ |
|
|
|
build-macos: |
|
runs-on: macos-latest |
|
steps: |
|
- uses: actions/checkout@v4 |
|
- uses: actions/setup-node@v4 |
|
with: |
|
node-version: 18 |
|
registry-url: 'https://registry.npmjs.org' |
|
- run: npm ci |
|
- run: npx prebuildify --napi --strip --arch=arm64 --target=node@18.0.0 |
|
- run: npx prebuildify --napi --strip --arch=x64 --target=node@18.0.0 |
|
- run: find prebuilds |
|
- uses: actions/upload-artifact@v4 |
|
with: |
|
name: prebuild-macos |
|
path: ./prebuilds/ |
|
|
|
pack: |
|
needs: |
|
- build-linux |
|
- build-windows |
|
- build-macos |
|
runs-on: ubuntu-latest |
|
outputs: |
|
PACK_FILE: ${{ steps.pack.outputs.PACK_FILE }} |
|
steps: |
|
- uses: actions/checkout@v4 |
|
- uses: actions/download-artifact@v4 |
|
with: |
|
path: /tmp/prebuilds/ |
|
- name: Coalesce prebuilds from build matrix |
|
run: | |
|
mkdir prebuilds |
|
for d in /tmp/prebuilds/*; do |
|
cp -Rav $d/* prebuilds/ |
|
done |
|
- run: chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f |
|
- id: pack |
|
name: Prepare NPM package |
|
run: | |
|
echo "PACK_FILE=$(npm pack)" >> "$GITHUB_OUTPUT" |
|
- uses: actions/upload-artifact@v4 |
|
with: |
|
name: package-tgz |
|
path: ${{ steps.pack.outputs.PACK_FILE }} |
|
if-no-files-found: 'error' |
|
|
|
test-package: |
|
needs: pack |
|
strategy: |
|
matrix: |
|
node-version: [ 18, 20, 22, 23 ] |
|
os: [ ubuntu-latest, windows-latest, macos-latest ] |
|
runs-on: ${{ matrix.os }} |
|
steps: |
|
- uses: actions/setup-node@v4 |
|
with: |
|
node-version: ${{ matrix.node-version }} |
|
registry-url: 'https://registry.npmjs.org' |
|
- uses: actions/download-artifact@v4 |
|
with: |
|
name: package-tgz |
|
- run: npm install ${{ needs.pack.outputs.PACK_FILE }} |
|
- run: node -e "const b = require('bcrypt'); const h = b.hashSync('hello', 10); console.log(h, b.compareSync('hello', h))"
|
|
|