99 types : [ prereleased, released ]
1010
1111jobs :
12-
13- build :
14- runs-on : ubuntu-22.04
15- strategy :
16- matrix :
17- os : [linux]
18- arch : [amd64, arm64, arm]
12+ build-linux :
13+ runs-on : ubuntu-latest
1914 steps :
2015 - uses : actions/checkout@v4
21- - uses : docker/setup-qemu-action@v3
22- with :
23- image : tonistiigi/binfmt:latest
24- platforms : arm,arm64
25-
26- - run : >
27- docker build .
28- --build-arg TEST_TIMEOUT_SECONDS=30
29- --tag node-bcrypt-builder
30- --platform ${{ matrix.os }}/${{ matrix.arch }}
31- - run : >
32- docker create
33- --name node-bcryptjs-builder
34- --platform ${{ matrix.os }}/${{ matrix.arch }}
35- node-bcrypt-builder
36- - run : docker cp "node-bcryptjs-builder:/usr/local/opt/bcrypt-js/prebuilds" .
37-
38- # build for Alpine:
39- - run : >
40- docker build -f Dockerfile-alpine .
41- --build-arg TEST_TIMEOUT_SECONDS=30
42- --tag node-bcrypt-builder-alpine
43- --platform ${{ matrix.os }}/${{ matrix.arch }}
44- - run : >
45- docker create
46- --name node-bcryptjs-builder-alpine
47- --platform ${{ matrix.os }}/${{ matrix.arch }}
48- node-bcrypt-builder-alpine
49- - run : docker cp "node-bcryptjs-builder-alpine:/usr/local/opt/bcrypt-js/prebuilds" .
50-
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 [email protected] 19+ -
run :
docker run -u $(id -u):$(id -g) -v `pwd`:/input -w /input ghcr.io/prebuild/alpine npx prebuildify --napi --tag-libc --strip [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 5124 - run : find prebuilds
52- - uses : actions/upload-artifact@v3
25+ - uses : actions/upload-artifact@v4
5326 with :
54- name : prebuild-${{ matrix.os }}-${{ matrix.arch }}
55- path : ./prebuilds
27+ name : prebuild-linux
28+ path : ./prebuilds/
5629
57- pack :
58- needs : build
59- runs-on : ubuntu-22.04
30+ build-windows :
31+ runs-on : windows-latest
6032 steps :
6133 - uses : actions/checkout@v4
62- - uses : actions/setup-node@v3
34+ - uses : actions/setup-node@v4
6335 with :
6436 node-version : 20
6537 registry-url : ' https://registry.npmjs.org'
6638 - run : npm ci
67- - uses : actions/download-artifact@v2
39+ -
run :
npx prebuildify --napi --strip --arch=x64 [email protected] 40+ -
run :
npx prebuildify --napi --strip --arch=arm64 [email protected] 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 [email protected] 57+ -
run :
npx prebuildify --napi --strip --arch=x64 [email protected] 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
6875 with :
6976 path : /tmp/prebuilds/
7077 - name : Coalesce prebuilds from build matrix
@@ -74,51 +81,30 @@ jobs:
7481 cp -Rav $d/* prebuilds/
7582 done
7683 - run : chmod a+x prebuilds/*/*.node && find prebuilds -executable -type f
77- - run : echo "PACK_FILE=$(npm pack)" >> $GITHUB_ENV
78- - uses : actions/upload-artifact@v3
84+ - id : pack
85+ name : Prepare NPM package
86+ run : |
87+ echo "PACK_FILE=$(npm pack)" >> "$GITHUB_OUTPUT"
88+ - uses : actions/upload-artifact@v4
7989 with :
8090 name : package-tgz
81- path : ${{ env.PACK_FILE }}
91+ path : ${{ steps.pack.outputs.PACK_FILE }}
92+ if-no-files-found : ' error'
8293
83- publish-npm :
94+ test-package :
8495 needs : pack
85- if : github.event_name == 'release'
86- runs-on : ubuntu-22.04
96+ strategy :
97+ matrix :
98+ node-version : [ 18, 20, 22, 23 ]
99+ os : [ ubuntu-latest, windows-latest, macos-latest ]
100+ runs-on : ${{ matrix.os }}
87101 steps :
88- - uses : actions/checkout@v4
89- - uses : actions/setup-node@v3
102+ - uses : actions/setup-node@v4
90103 with :
91- node-version : 20
104+ node-version : ${{ matrix.node-version }}
92105 registry-url : ' https://registry.npmjs.org'
93- - uses : actions/download-artifact@v2
106+ - uses : actions/download-artifact@v4
94107 with :
95108 name : package-tgz
96- path : /tmp/package/
97- - run : npm publish /tmp/package/bcrypt*.tgz
98- env :
99- NODE_AUTH_TOKEN : ${{secrets.NPM_TOKEN}}
100-
101- publish-gpr :
102- needs : pack
103- if : github.event_name == 'release'
104- runs-on : ubuntu-22.04
105- permissions :
106- contents : read
107- packages : write
108- steps :
109- - uses : actions/checkout@v4
110- - uses : actions/setup-node@v3
111- with :
112- node-version : 20
113- registry-url : https://npm.pkg.github.com/
114- - uses : actions/download-artifact@v2
115- with :
116- name : package-tgz
117- path : /tmp/package/
118- - run : npm publish /tmp/package/bcrypt*.tgz
119- env :
120- NODE_AUTH_TOKEN : ${{secrets.GITHUB_TOKEN}}
121-
122-
123-
124-
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))"
0 commit comments