diff --git a/.github/workflows/prebuild-main.yml b/.github/workflows/prebuild-main.yml index 57bf9a29..0fbc3382 100644 --- a/.github/workflows/prebuild-main.yml +++ b/.github/workflows/prebuild-main.yml @@ -1,4 +1,4 @@ -name: Prebuild Binaries and Publish +name: Main Prebuild Binaries on: push: @@ -6,50 +6,141 @@ on: - main jobs: - prebuild-linux: - name: Prebuild Binaries for Linux + get-version: + name: Get Package Version runs-on: ubuntu-latest - timeout-minutes: 30 + outputs: + version: ${{ steps.set-version.outputs.version }} + release_id: ${{ steps.create-release.outputs.id }} steps: - - name: Setup Dependencies - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update -y -qq - sudo apt-get install -y g++-multilib gcc-multilib libcups2-dev libcups2-dev:i386 libc6-dev-i386 linux-libc-dev linux-libc-dev:i386 - - uses: actions/setup-node@v4 + - name: Checkout + uses: actions/checkout@v4 + + - name: Get package version + id: package-version + uses: martinbeentjes/npm-get-version-action@v1.3.1 + + - name: Set release version + id: set-version + run: echo "version=${{ steps.package-version.outputs.current-version }}" >> $GITHUB_OUTPUT + + - name: Create GitHub Release + id: create-release + uses: softprops/action-gh-release@v2 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild - run: | - npm run prebuild -- --strip --arch ia32 -u ${{ secrets.PREBUILD_TOKEN }} - npm run prebuild -- --strip --arch x64 -u ${{ secrets.PREBUILD_TOKEN }} + tag_name: v${{ steps.set-version.outputs.version }} + draft: true + name: Release v${{ steps.set-version.outputs.version }} + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + prebuild-macos: name: Prebuild Binaries for macOS + needs: get-version runs-on: macos-latest timeout-minutes: 30 steps: - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm i + + - name: Extract certificate + uses: apple-actions/import-codesign-certs@v3 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild + p12-file-base64: ${{ secrets.APPLICATION_CERTIFICATE_P12 }} + p12-password: ${{ secrets.APPLICATION_CERTIFICATE_P12_PASSWORD }} + + - name: Build and sign macOS prebuild run: | - npm run prebuild -- --strip --arch x64 -u ${{ secrets.PREBUILD_TOKEN }} - npm run prebuild -- --strip --arch arm64 -u ${{ secrets.PREBUILD_TOKEN }} + npx prebuild --backend node-gyp --target 20.3.0 --arch x64 --platform darwin --strip --pack + mkdir -p lib/darwin-x64 + cp lib/node_printer.node lib/darwin-x64/ + ls -la lib/darwin-x64/ || echo "Directory not found" + codesign --sign "${{ vars.TEAM_ID }}" --timestamp --options runtime lib/darwin-x64/node_printer.node || echo "File not found for signing" + # List directories to see where tar.gz files are + echo "Checking for tar.gz files:" + find . -name "*.tar.gz" -type f + + - name: Upload macOS binary to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: true + files: | + *.tar.gz + **/*.tar.gz + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + prebuild-windows: name: Prebuild Binaries for Windows + needs: get-version runs-on: windows-latest timeout-minutes: 30 steps: - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild + node-version: 20 + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm i + + - name: Prebuild Windows binaries run: | - npm run prebuild -- --strip --arch ia32 -u ${{ secrets.PREBUILD_TOKEN }} - npm run prebuild -- --strip --arch x64 -u ${{ secrets.PREBUILD_TOKEN }} + # Create platform-specific directories + mkdir -p lib/win32-x64 + mkdir -p lib/win32-ia32 + + # Build x64 version + npx prebuild --backend node-gyp --target 20.3.0 --arch x64 --platform win32 --strip --pack + # Copy to platform-specific directory + copy lib\node_printer.node lib\win32-x64\ + + # Build ia32 version + npx prebuild --backend node-gyp --target 20.3.0 --arch ia32 --platform win32 --strip --pack + # Copy to platform-specific directory + copy lib\node_printer.node lib\win32-ia32\ + + # List the directories to verify + dir lib + dir lib\win32-x64 || echo "x64 directory not found" + dir lib\win32-ia32 || echo "ia32 directory not found" + + - name: Upload Windows binaries to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: true + files: | + *.tar.gz + **/*.tar.gz + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + publish-release: + name: Publish GitHub Release + needs: [get-version, prebuild-macos, prebuild-windows] + runs-on: ubuntu-latest + steps: + - name: Publish Release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: false + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/prebuild-pr.yml b/.github/workflows/prebuild-pr.yml index feb4ab0e..792f99f2 100644 --- a/.github/workflows/prebuild-pr.yml +++ b/.github/workflows/prebuild-pr.yml @@ -4,50 +4,141 @@ on: pull_request: jobs: - prebuild-linux: - name: Prebuild Binaries for Linux + get-version: + name: Get Package Version runs-on: ubuntu-latest - timeout-minutes: 30 + outputs: + version: ${{ steps.set-version.outputs.version }} + release_id: ${{ steps.create-release.outputs.id }} steps: - - name: Setup Dependencies - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update -y -qq - sudo apt-get install -y g++-multilib gcc-multilib libcups2-dev libcups2-dev:i386 libc6-dev-i386 linux-libc-dev linux-libc-dev:i386 - - uses: actions/setup-node@v4 + - name: Checkout + uses: actions/checkout@v4 + + - name: Get package version + id: package-version + uses: martinbeentjes/npm-get-version-action@v1.3.1 + + - name: Set release version + id: set-version + run: echo "version=${{ steps.package-version.outputs.current-version }}-pr${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT + + - name: Create GitHub Release + id: create-release + uses: softprops/action-gh-release@v2 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild - run: | - npm run prebuild -- --strip --arch ia32 - npm run prebuild -- --strip --arch x64 + tag_name: v${{ steps.set-version.outputs.version }} + draft: true + name: Release v${{ steps.set-version.outputs.version }} + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + prebuild-macos: name: Prebuild Binaries for macOS + needs: get-version runs-on: macos-latest timeout-minutes: 30 steps: - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm i + + - name: Extract certificate + uses: apple-actions/import-codesign-certs@v3 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild + p12-file-base64: ${{ secrets.APPLICATION_CERTIFICATE_P12 }} + p12-password: ${{ secrets.APPLICATION_CERTIFICATE_P12_PASSWORD }} + + - name: Build and sign macOS prebuild run: | - npm run prebuild -- --strip --arch x64 - npm run prebuild -- --strip --arch arm64 + npx prebuild --backend node-gyp --target 20.3.0 --arch x64 --platform darwin --strip --pack + mkdir -p lib/darwin-x64 + cp lib/node_printer.node lib/darwin-x64/ + ls -la lib/darwin-x64/ || echo "Directory not found" + codesign --sign "${{ vars.TEAM_ID }}" --timestamp --options runtime lib/darwin-x64/node_printer.node || echo "File not found for signing" + # List directories to see where tar.gz files are + echo "Checking for tar.gz files:" + find . -name "*.tar.gz" -type f + + - name: Upload macOS binary to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: true + files: | + *.tar.gz + **/*.tar.gz + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + prebuild-windows: name: Prebuild Binaries for Windows + needs: get-version runs-on: windows-latest timeout-minutes: 30 steps: - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: 20.x - - uses: actions/checkout@v4 - - run: npm i - - name: Prebuild + node-version: 20 + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm i + + - name: Prebuild Windows binaries run: | - npm run prebuild -- --strip --arch ia32 - npm run prebuild -- --strip --arch x64 + # Create platform-specific directories + mkdir -p lib/win32-x64 + mkdir -p lib/win32-ia32 + + # Build x64 version + npx prebuild --backend node-gyp --target 20.3.0 --arch x64 --platform win32 --strip --pack + # Copy to platform-specific directory + copy lib\node_printer.node lib\win32-x64\ + + # Build ia32 version + npx prebuild --backend node-gyp --target 20.3.0 --arch ia32 --platform win32 --strip --pack + # Copy to platform-specific directory + copy lib\node_printer.node lib\win32-ia32\ + + # List the directories to verify + dir lib + dir lib\win32-x64 || echo "x64 directory not found" + dir lib\win32-ia32 || echo "ia32 directory not found" + + - name: Upload Windows binaries to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: true + files: | + *.tar.gz + **/*.tar.gz + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + publish-release: + name: Publish GitHub Release + needs: [get-version, prebuild-macos, prebuild-windows] + runs-on: ubuntu-latest + steps: + - name: Publish Release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.get-version.outputs.version }} + draft: false + append_body: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json index 19627b6e..0a7b75f3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@casechek/node-printer", "description": "Node.js printer bindings", - "version": "0.6.2", + "version": "0.7.0", "homepage": "https://github.com/casechek/node-printer", "author": { "name": "Ion Lupascu", @@ -29,7 +29,6 @@ }, "scripts": { "install": "prebuild-install || node-gyp rebuild", - "prebuild-all": "prebuild --all --force --strip --verbose --openssl_fips=X", "prebuild": "prebuild", "prebuild-electron": "prebuild --strip --verbose", "rebuild": "node-gyp rebuild", @@ -37,9 +36,10 @@ }, "binary": { "module_name": "node_printer", - "module_path": "./lib/", + "module_path": "lib", "host": "https://github.com/casechek/node-printer/releases/download/", - "remote_path": "v{version}" + "remote_path": "v{version}", + "package_name": "{module_name}-v{version}-{node_abi}-{platform}-{arch}.tar.gz" }, "license": "MIT", "main": "./lib/printer",