diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 28d061b..cf9d8fb 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -6,8 +6,7 @@ env: MACOSX_DEPLOYMENT_TARGET: '10.13' permissions: - contents: write - id-token: write + contents: read on: push: @@ -28,399 +27,7 @@ concurrency: cancel-in-progress: true jobs: - build-wasm: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - sparse-checkout: | - fix-python-soname - sparse-checkout-cone-mode: false - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: wasm32-wasip1 - - name: Cache cargo - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - .cargo-cache - target/ - key: wasm-cargo-cache-${{ hashFiles('**/Cargo.lock') }} - - name: Build WASM - working-directory: fix-python-soname - run: | - cargo build --target wasm32-wasip1 --release - cp target/wasm32-wasip1/release/fix-python-soname.wasm ../fix-python-soname.wasm - - name: Upload WASM artifacts - uses: actions/upload-artifact@v4 - with: - name: wasm-bindings - path: fix-python-soname.wasm - - build: - needs: build-wasm - strategy: - fail-fast: false - matrix: - settings: - - host: macos-13 - target: x86_64-apple-darwin - build: pnpm run build --target x86_64-apple-darwin - - host: macos-latest - target: aarch64-apple-darwin - build: pnpm run build --target aarch64-apple-darwin - - host: ubuntu-latest - target: x86_64-unknown-linux-gnu - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian - build: pnpm run build --target x86_64-unknown-linux-gnu - # Need to deal with this build failure before we can enable arm64 Linux builds. - # Probably also should be public first so we can use the arm runners to test it anyway. - # error: PYO3_CROSS_PYTHON_VERSION or an abi3-py3* feature must be specified when cross-compiling and PYO3_CROSS_LIB_DIR is not set. - # help: see the PyO3 user guide for more information: https://pyo3.rs/v0.25.1/building-and-distribution.html#cross-compiling - # - # - host: ubuntu-latest - # target: aarch64-unknown-linux-gnu - # docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 - # build: pnpm run build --target aarch64-unknown-linux-gnu - name: stable - ${{ matrix.settings.target }} - node@20 - runs-on: ${{ matrix.settings.host }} - steps: - - uses: actions/checkout@v4 - - name: Download WASM artifacts - uses: actions/download-artifact@v4 - with: - name: wasm-bindings - path: . - - uses: pnpm/action-setup@v4 - with: - version: latest - - uses: actions/setup-node@v4 - if: ${{ !matrix.settings.docker }} - with: - node-version: 24 - - uses: dtolnay/rust-toolchain@stable - if: ${{ !matrix.settings.docker }} - with: - toolchain: stable - targets: ${{ matrix.settings.target }} - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - .cargo-cache - target/ - key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} - - uses: goto-bus-stop/setup-zig@v2 - if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'armv7-unknown-linux-musleabihf' }} - with: - version: 0.13.0 - - name: Setup toolchain - run: ${{ matrix.settings.setup }} - if: ${{ matrix.settings.setup }} - shell: bash - - name: Install dependencies - run: pnpm install - - name: Build in docker - uses: addnab/docker-run-action@v3 - if: ${{ matrix.settings.docker }} - with: - image: ${{ matrix.settings.docker }} - options: '--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' - run: | - set -x - - # Install apt dependencies - apt-get update -y - apt-get install -y openssh-client python3 python3-dev - - # Setup pnpm - corepack disable - npm i -gf pnpm - - ${{ matrix.settings.build }} - - name: Build - run: ${{ matrix.settings.build }} - if: ${{ !matrix.settings.docker }} - shell: bash - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: bindings-${{ matrix.settings.target }} - path: | - ${{ env.APP_NAME }}.*.node - index.d.ts - index.js - fix-python-soname.wasm - fix-python-soname.js - if-no-files-found: error - - test-macOS-windows-binding: - name: Test ${{ matrix.settings.target }} - node@${{ matrix.node }} + python@${{ matrix.python }} - needs: - - build - strategy: - fail-fast: false - matrix: - settings: - - host: macos-13 - target: x86_64-apple-darwin - architecture: x64 - - host: macos-latest - target: aarch64-apple-darwin - architecture: arm64 - node: - - '20' - - '22' - - '24' - python: - - '3.8' - - '3.9' - - '3.10' - - '3.11' - - '3.12' - - '3.13' - runs-on: ${{ matrix.settings.host }} - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: latest - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - architecture: ${{ matrix.settings.architecture }} - cache: pnpm - - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python }} - architecture: ${{ matrix.settings.architecture }} - - run: pnpm install - - uses: actions/download-artifact@v4 - with: - name: bindings-${{ matrix.settings.target }} - path: . - - name: Remove old prebuilt binaries - run: | - echo "Removing old prebuilt binaries from node_modules..." - rm -rf node_modules/@platformatic/python-node-* - shell: bash - - name: List packages - run: ls -R . - shell: bash - - name: Check test directory - run: | - echo "Current directory: $(pwd)" - echo "Test directory contents:" - ls -la test/ || echo "test/ directory not found" - echo "Looking for test files:" - find . -name "*.test.mjs" -type f || echo "No test files found" - shell: bash - - run: cargo test - - run: pnpm test - - test-linux-binding: - name: Test ${{ matrix.settings.target }} - node@${{ matrix.node }} + python@${{ matrix.python }} - needs: - - build - strategy: - fail-fast: false - matrix: - settings: - - host: ubuntu-22.04 - target: x86_64-unknown-linux-gnu - architecture: x64 - # Not supported yet. - # - host: ubuntu-22.04 - # target: x86_64-unknown-linux-musl - # Not supported yet, ubuntu-24.04-arm runner requires repo is public - # - host: ubuntu-22.04-arm - # target: aarch64-unknown-linux-gnu - # - host: ubuntu-22.04-arm - # target: aarch64-unknown-linux-musl - node: - - '20' - - '22' - - '24' - python: - - '3.8' - - '3.9' - - '3.10' - - '3.11' - - '3.12' - - '3.13' - # - '3.14-rc' - runs-on: ${{ matrix.settings.host }} - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: latest - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - architecture: ${{ matrix.settings.architecture }} - cache: pnpm - - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python }} - architecture: ${{ matrix.settings.architecture }} - - name: Install dependencies - run: pnpm install - - uses: actions/download-artifact@v4 - with: - name: bindings-${{ matrix.settings.target }} - path: . - - name: Remove old prebuilt binaries - run: | - echo "Removing old prebuilt binaries from node_modules..." - rm -rf node_modules/@platformatic/python-node-* - shell: bash - - name: List packages - run: ls -R . - shell: bash - - name: Output docker params - id: docker - run: | - node -e " - if ('${{ matrix.settings.target }}'.startsWith('aarch64')) { - console.log('PLATFORM=linux/arm64') - } else if ('${{ matrix.settings.target }}'.startsWith('armv7')) { - console.log('PLATFORM=linux/arm/v7') - } else { - console.log('PLATFORM=linux/amd64') - } - " >> $GITHUB_OUTPUT - node -e " - if ('${{ matrix.settings.target }}'.endsWith('-musl')) { - console.log('IMAGE=node:${{ matrix.node }}-alpine') - } else { - console.log('IMAGE=node:${{ matrix.node }}-slim') - } - " >> $GITHUB_OUTPUT - echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT - - name: Test crates - uses: addnab/docker-run-action@v3 - with: - image: ${{ steps.docker.outputs.IMAGE }} - options: -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} - run: | - set -x - - # Install apt dependencies - apt-get update -y - apt-get install -y openssh-client curl git build-essential python3 python3-dev - - # Install rust toolchain - curl https://sh.rustup.rs -sSf | bash -s -- -y -t ${{ matrix.settings.target }} - . "$HOME/.cargo/env" - - cargo test --target ${{ matrix.settings.target }} - - name: Test bindings - uses: addnab/docker-run-action@v3 - with: - image: ${{ steps.docker.outputs.IMAGE }} - options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} -e CI=true -e GITHUB_ACTIONS=true - run: | - # Install Python 3.x - apt-get update -y - apt-get install -y python3 python3-dev patchelf - - corepack disable - npm i -gf pnpm - node fix-python-soname.js - pnpm install --prefer-offline - pnpm test - - publish: - name: Publish - runs-on: ubuntu-latest - environment: npm - permissions: - contents: write - id-token: write - if: contains(github.ref, 'main') - needs: - - test-macOS-windows-binding - - test-linux-binding - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: latest - - uses: actions/setup-node@v4 - with: - node-version: 20 - registry-url: 'https://registry.npmjs.org' - cache: pnpm - - name: Install dependencies - run: pnpm install - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: Move artifacts - run: pnpm artifacts - - name: Restore entrypoints - run: | - INDEX_JS=$(find artifacts -name "index.js" | head -n 1) - INDEX_D_TS=$(find artifacts -name "index.d.ts" | head -n 1) - - if [ -n "$INDEX_JS" ] && [ -n "$INDEX_D_TS" ]; then - echo "Found index.js: $INDEX_JS" - echo "Found index.d.ts: $INDEX_D_TS" - - echo "Copying entrypoints to project root" - cp "$INDEX_JS" index.js - cp "$INDEX_D_TS" index.d.ts - else - echo "Error: entrypoints not found in artifacts" >&2 - exit 1 - fi - shell: bash - - name: Copy fix-python-soname files to Linux and macOS packages - run: | - # Find the WASM and JS files from Linux artifacts - WASM_FILE=$(find artifacts -name "fix-python-soname.wasm" | head -n 1) - JS_FILE=$(find artifacts -name "fix-python-soname.js" | head -n 1) - - if [ -n "$WASM_FILE" ] && [ -n "$JS_FILE" ]; then - echo "Found WASM file: $WASM_FILE" - echo "Found JS file: $JS_FILE" - - # Copy to all Linux and macOS npm directories - for dir in npm/*/; do - if [[ "$dir" == *"linux"* ]] || [[ "$dir" == *"darwin"* ]]; then - echo "Copying files to $dir" - cp "$WASM_FILE" "$dir" - cp "$JS_FILE" "$dir" - fi - done - else - echo "Error: fix-python-soname files not found in artifacts" >&2 - exit 1 - fi - - name: List project files - run: ls -R . - shell: bash - - name: Update npm - run: npm install -g npm@latest - - name: Publish - env: - GITHUB_TOKEN: ${{ github.token }} - run: | - if git log -1 --pretty=%B | grep "^v\?[0-9]\+\.[0-9]\+\.[0-9]\+"; - then - npm publish - elif git log -1 --pretty=%B | grep "^v\?[0-9]\+\.[0-9]\+\.[0-9]\+-\.+"; - then - npm publish - else - echo "Not a release, skipping publish" - fi + build-and-test: + uses: ./.github/workflows/build-and-test.yml + with: + run-tests: true diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..ae401f3 --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,366 @@ +name: Build and Test + +on: + workflow_call: + inputs: + run-tests: + description: 'Whether to run tests after build' + required: false + type: boolean + default: true + +env: + DEBUG: napi:* + APP_NAME: python-node + MACOSX_DEPLOYMENT_TARGET: '10.13' + +jobs: + build-wasm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + fix-python-soname + fix-python-soname.js + sparse-checkout-cone-mode: false + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-wasip1 + - name: Cache cargo + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + .cargo-cache + target/ + key: wasm-cargo-cache-${{ hashFiles('**/Cargo.lock') }} + - name: Build WASM + working-directory: fix-python-soname + run: | + cargo build --target wasm32-wasip1 --release + cp target/wasm32-wasip1/release/fix-python-soname.wasm ../fix-python-soname.wasm + - name: Upload WASM artifacts + uses: actions/upload-artifact@v4 + with: + name: wasm-bindings + path: | + fix-python-soname.wasm + fix-python-soname.js + + build: + needs: build-wasm + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: aarch64-apple-darwin + npm_dir: darwin-arm64 + build: pnpm run build --target aarch64-apple-darwin + - host: ubuntu-latest + target: x86_64-unknown-linux-gnu + npm_dir: linux-x64-gnu + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian + build: pnpm run build --target x86_64-unknown-linux-gnu + name: stable - ${{ matrix.settings.target }} - node@20 + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@v4 + - name: Download WASM artifact + uses: actions/download-artifact@v4 + with: + name: wasm-bindings + path: npm/${{ matrix.settings.npm_dir }} + - uses: pnpm/action-setup@v4 + with: + version: latest + - uses: actions/setup-node@v4 + if: ${{ !matrix.settings.docker }} + with: + node-version: 24 + - uses: dtolnay/rust-toolchain@stable + if: ${{ !matrix.settings.docker }} + with: + toolchain: stable + targets: ${{ matrix.settings.target }} + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + .cargo-cache + target/ + key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} + - uses: goto-bus-stop/setup-zig@v2 + if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'armv7-unknown-linux-musleabihf' }} + with: + version: 0.13.0 + - name: Setup toolchain + run: ${{ matrix.settings.setup }} + if: ${{ matrix.settings.setup }} + shell: bash + - name: Install dependencies + run: pnpm install + - name: Build in docker + uses: addnab/docker-run-action@v3 + if: ${{ matrix.settings.docker }} + with: + image: ${{ matrix.settings.docker }} + options: '--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' + run: | + set -x + + # Install apt dependencies + apt-get update -y + apt-get install -y openssh-client python3 python3-dev + + # Setup pnpm + corepack disable + npm i -gf pnpm + + ${{ matrix.settings.build }} + - name: Build + run: ${{ matrix.settings.build }} + if: ${{ !matrix.settings.docker }} + shell: bash + - name: Prepare npm package + run: | + mkdir -p artifacts + mv ${{ env.APP_NAME }}.*.node artifacts/ + pnpm artifacts + shell: bash + + - name: Upload npm package artifact + uses: actions/upload-artifact@v4 + with: + name: npm-${{ matrix.settings.npm_dir }} + path: npm/${{ matrix.settings.npm_dir }} + if-no-files-found: error + + - name: Upload entrypoints artifact + uses: actions/upload-artifact@v4 + with: + name: entrypoints + path: | + index.d.ts + index.js + overwrite: true + if-no-files-found: error + + bundle: + name: Bundle release artifacts + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Download all npm package artifacts + uses: actions/download-artifact@v4 + with: + pattern: npm-* + path: npm-artifacts + + - name: Download entrypoints artifact + uses: actions/download-artifact@v4 + with: + name: entrypoints + path: . + + - name: Organize npm packages + run: | + for dir in npm-artifacts/npm-*/; do + platform=$(basename "$dir" | sed 's/^npm-//') + echo "Moving $dir to npm/$platform/" + mv "$dir"/* "npm/$platform/" + done + rm -rf npm-artifacts + shell: bash + + - name: List release bundle contents + run: | + echo "=== Root entrypoints ===" + ls -la index.js index.d.ts + echo "" + echo "=== npm package directories ===" + for dir in npm/*/; do + echo "--- $dir ---" + ls -la "$dir" + done + shell: bash + + - name: Upload release bundle + uses: actions/upload-artifact@v4 + with: + name: release-bundle + path: | + npm/ + index.js + index.d.ts + if-no-files-found: error + + test-macOS-binding: + name: Test ${{ matrix.settings.target }} - node@${{ matrix.node }} + python@${{ matrix.python }} + if: ${{ inputs.run-tests }} + needs: + - build + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: aarch64-apple-darwin + architecture: arm64 + npm_dir: darwin-arm64 + node: + - '20' + - '22' + - '24' + python: + - '3.8' + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13' + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: latest + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + architecture: ${{ matrix.settings.architecture }} + cache: pnpm + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + architecture: ${{ matrix.settings.architecture }} + - run: pnpm install + - name: Download npm package artifact + uses: actions/download-artifact@v4 + with: + name: npm-${{ matrix.settings.npm_dir }} + path: npm/${{ matrix.settings.npm_dir }} + - name: Download entrypoints artifact + uses: actions/download-artifact@v4 + with: + name: entrypoints + path: . + - name: Link npm package for testing + run: pnpm link ./npm/${{ matrix.settings.npm_dir }} + - run: cargo test + - run: pnpm test + + test-linux-binding: + name: Test ${{ matrix.settings.target }} - node@${{ matrix.node }} + python@${{ matrix.python }} + if: ${{ inputs.run-tests }} + needs: + - build + strategy: + fail-fast: false + matrix: + settings: + - host: ubuntu-22.04 + target: x86_64-unknown-linux-gnu + architecture: x64 + npm_dir: linux-x64-gnu + node: + - '20' + - '22' + - '24' + python: + - '3.8' + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13' + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: latest + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + architecture: ${{ matrix.settings.architecture }} + cache: pnpm + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + architecture: ${{ matrix.settings.architecture }} + - name: Install dependencies + run: pnpm install + - name: Download npm package artifact + uses: actions/download-artifact@v4 + with: + name: npm-${{ matrix.settings.npm_dir }} + path: npm/${{ matrix.settings.npm_dir }} + - name: Download entrypoints artifact + uses: actions/download-artifact@v4 + with: + name: entrypoints + path: . + - name: Output docker params + id: docker + run: | + node -e " + if ('${{ matrix.settings.target }}'.startsWith('aarch64')) { + console.log('PLATFORM=linux/arm64') + } else if ('${{ matrix.settings.target }}'.startsWith('armv7')) { + console.log('PLATFORM=linux/arm/v7') + } else { + console.log('PLATFORM=linux/amd64') + } + " >> $GITHUB_OUTPUT + node -e " + if ('${{ matrix.settings.target }}'.endsWith('-musl')) { + console.log('IMAGE=node:${{ matrix.node }}-alpine') + } else { + console.log('IMAGE=node:${{ matrix.node }}-slim') + } + " >> $GITHUB_OUTPUT + echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT + - name: Test crates + uses: addnab/docker-run-action@v3 + with: + image: ${{ steps.docker.outputs.IMAGE }} + options: -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} + run: | + set -x + + # Install apt dependencies + apt-get update -y + apt-get install -y openssh-client curl git build-essential python3 python3-dev + + # Install rust toolchain + curl https://sh.rustup.rs -sSf | bash -s -- -y -t ${{ matrix.settings.target }} + . "$HOME/.cargo/env" + + cargo test --target ${{ matrix.settings.target }} + - name: Test bindings + uses: addnab/docker-run-action@v3 + with: + image: ${{ steps.docker.outputs.IMAGE }} + options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} -e CI=true -e GITHUB_ACTIONS=true + run: | + # Install Python 3.x + apt-get update -y + apt-get install -y python3 python3-dev patchelf + + corepack disable + npm i -gf pnpm + pnpm install --prefer-offline + pnpm link ./npm/${{ matrix.settings.npm_dir }} + # Run fix-python-soname.js from the npm package directory to patch that binary + node npm/${{ matrix.settings.npm_dir }}/fix-python-soname.js + pnpm test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..376310f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,70 @@ +name: Publish releases + +on: + workflow_dispatch: + inputs: + version: + description: 'The version number to tag and release' + required: true + type: string + prerelease: + description: 'Release as pre-release' + required: false + type: boolean + default: false + skip-tests: + description: 'Skip tests (use if tests already passed in CI)' + required: false + type: boolean + default: false + +env: + DEBUG: napi:* + APP_NAME: python-node + MACOSX_DEPLOYMENT_TARGET: '10.13' + +permissions: + contents: write + id-token: write + +concurrency: + group: release + cancel-in-progress: false + +jobs: + build-and-test: + uses: ./.github/workflows/build-and-test.yml + with: + run-tests: ${{ inputs.skip-tests == false }} + + release-npm: + needs: build-and-test + runs-on: ubuntu-latest + environment: npm + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + - run: npm install npm -g + - run: npm install + - uses: actions/download-artifact@v4 + with: + name: release-bundle + path: . + - name: Change version number and sync + run: node scripts/update-version.mjs ${{ inputs.version }} + - name: Update lockfile + run: npm install + - name: GIT commit and push all changed files + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git commit -a -m "Bumped v${{ inputs.version }}" + git push origin HEAD:${{ github.ref }} + - run: npm publish --access public --provenance --tag ${{ inputs.prerelease == true && 'next' || 'latest' }} + - name: 'Create release notes' + run: | + npx @matteo.collina/release-notes -a ${{ secrets.GITHUB_TOKEN }} -t v${{ inputs.version }} -r python-node -o platformatic ${{ inputs.prerelease == true && '-p' || '' }} -c ${{ github.ref }} diff --git a/Cargo.lock b/Cargo.lock index 98ac34b..0036a1f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,9 +163,9 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "convert_case" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db05ffb6856bf0ecdf6367558a76a0e8a77b1713044eb92845c692100ed50190" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ "unicode-segmentation", ] @@ -181,9 +181,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ffc71fcdcdb40d6f087edddf7f8f1f8f79e6cf922f555a9ee8779752d4819bd" +checksum = "424e0138278faeb2b401f174ad17e715c829512d74f3d1e81eb43365c2e0590e" dependencies = [ "ctor-proc-macro", "dtor", @@ -396,7 +396,7 @@ dependencies = [ [[package]] name = "http-handler" version = "1.0.0" -source = "git+https://github.com/platformatic/http-handler#df2850821de32d4e196a68ddbd4c66233957d7ee" +source = "git+https://github.com/platformatic/http-handler#3e685693556f63145ed122d0a2faabc81da1ae40" dependencies = [ "bytes", "futures-core", @@ -413,7 +413,7 @@ dependencies = [ [[package]] name = "http-rewriter" version = "1.0.0" -source = "git+https://github.com/platformatic/http-rewriter#f4f1f2a08e703ece5dd9b0b8e62be7a31ae54073" +source = "git+https://github.com/platformatic/http-rewriter#94047c9863803e4b068fc92091a9515cc8432207" dependencies = [ "bytes", "http", @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" @@ -513,9 +513,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -524,9 +524,9 @@ dependencies = [ [[package]] name = "napi" -version = "3.5.2" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e917a98ac74187a5d486604a269ed69cd7901dd4824453d5573fb051f69b1b3" +checksum = "3af30fe8e799dda3a555c496c59e960e4cff1e931b63acbaf3a3b25d9fad22b6" dependencies = [ "bitflags", "ctor", @@ -546,9 +546,9 @@ checksum = "d376940fd5b723c6893cd1ee3f33abbfd86acb1cd1ec079f3ab04a2a3bc4d3b1" [[package]] name = "napi-derive" -version = "3.3.3" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258a6521951715e00568b258b8fb7a44c6087f588c371dc6b84a413f2728fdb" +checksum = "47cffa09ea668c4cc5d7b1198780882e28780ed1804a903b80680725426223d9" dependencies = [ "convert_case", "ctor", @@ -560,9 +560,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "3.0.2" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c36636292fe04366a1eec028adc25bc72f4fd7cce35bdcc310499ef74fb7de" +checksum = "5e186227ec22f4675267a176d98dffecb27e6cc88926cbb7efb5427268565c0f" dependencies = [ "convert_case", "proc-macro2", @@ -573,9 +573,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "3.1.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ef9c1086f16aea2417c3788dbefed7591c3bccd800b827f4dfb271adff1149" +checksum = "8eb602b84d7c1edae45e50bbf1374696548f36ae179dfa667f577e384bb90c2b" dependencies = [ "libloading", ] diff --git a/npm/darwin-x64/README.md b/npm/darwin-x64/README.md deleted file mode 100644 index f394f89..0000000 --- a/npm/darwin-x64/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `python-node-darwin-x64` - -This is the **x86_64-apple-darwin** binary for `python-node` diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json deleted file mode 100644 index adf7649..0000000 --- a/npm/darwin-x64/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@platformatic/python-node-darwin-x64", - "version": "0.0.1", - "os": [ - "darwin" - ], - "cpu": [ - "x64" - ], - "main": "python-node.darwin-x64.node", - "files": [ - "python-node.darwin-x64.node", - "fix-python-soname.js", - "fix-python-soname.wasm" - ], - "scripts": { - "postinstall": "node fix-python-soname.js" - }, - "publishConfig": { - "registry": "https://registry.npmjs.org/", - "scope": "@platformatic" - }, - "license": "MIT", - "engines": { - "node": ">= 20" - } -} diff --git a/package.json b/package.json index 6cb1676..fc6a670 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "binaryName": "python-node", "targets": [ "aarch64-apple-darwin", - "x86_64-apple-darwin", "x86_64-unknown-linux-gnu" ] }, @@ -38,7 +37,6 @@ }, "optionalDependencies": { "@platformatic/python-node-darwin-arm64": "^0.1.4", - "@platformatic/python-node-darwin-x64": "^0.1.4", "@platformatic/python-node-linux-x64-gnu": "^0.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d92db4c..3bfd0cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,9 +21,6 @@ importers: '@platformatic/python-node-darwin-arm64': specifier: ^0.1.4 version: 0.1.10 - '@platformatic/python-node-darwin-x64': - specifier: ^0.1.4 - version: 0.1.10 '@platformatic/python-node-linux-x64-gnu': specifier: ^0.1.4 version: 0.1.10 @@ -422,9 +419,6 @@ packages: resolution: {integrity: sha512-7cmzIu+Vbupriudo7UudoMRH2OA3cTw67vva8MxeoAe5S7vPFI7z0vp0pMXiA25S8IUJefImQ90FeJjl8fjEaQ==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@napi-rs/wasm-runtime@1.1.0': resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} @@ -695,12 +689,6 @@ packages: cpu: [arm64] os: [darwin] - '@platformatic/python-node-darwin-x64@0.1.10': - resolution: {integrity: sha512-rs4STYb/2D6mV2duO7CCrmtf0/YjPTkn1IaIdxxSQGTVK0z+LONymCvS/TCdGK9mWdj9Y88ao66NIr/itlM73g==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] - '@platformatic/python-node-linux-x64-gnu@0.1.10': resolution: {integrity: sha512-raqvdM6W74qa/m6qjhr2OV0dPyt5VVmFD/e/X/wZllR3iDtpO/D7c5VQJ4HsY166VmYA7ffOGBoNh8luV1Gdng==} engines: {node: '>= 20'} @@ -1119,13 +1107,6 @@ snapshots: '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 - '@napi-rs/wasm-runtime@1.0.7': - dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 - '@tybys/wasm-util': 0.10.1 - optional: true - '@napi-rs/wasm-runtime@1.1.0': dependencies: '@emnapi/core': 1.7.1 @@ -1293,7 +1274,7 @@ snapshots: '@oxc-node/core-wasm32-wasi@0.0.35': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 + '@napi-rs/wasm-runtime': 1.1.0 optional: true '@oxc-node/core-win32-arm64-msvc@0.0.35': @@ -1354,9 +1335,6 @@ snapshots: '@platformatic/python-node-darwin-arm64@0.1.10': optional: true - '@platformatic/python-node-darwin-x64@0.1.10': - optional: true - '@platformatic/python-node-linux-x64-gnu@0.1.10': optional: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..44e8136 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - '@platformatic/python-node-darwin-arm64' diff --git a/scripts/update-version.mjs b/scripts/update-version.mjs new file mode 100644 index 0000000..69df885 --- /dev/null +++ b/scripts/update-version.mjs @@ -0,0 +1,6 @@ +import { readFile, writeFile } from 'fs/promises' + +const version = process.argv[2].replace(/^v/, '') +const packageJson = JSON.parse(await readFile('package.json', 'utf8')) +packageJson.version = version +await writeFile('package.json', JSON.stringify(packageJson, null, 2))