build-pack-publish.yml 4.0 KB

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