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..5eb21c2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,77 @@ +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: pnpm/action-setup@v4 + with: + version: latest + - uses: actions/setup-node@v4 + with: + node-version: '22' + registry-url: 'https://registry.npmjs.org' + cache: 'pnpm' + - run: pnpm 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: pnpm 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 }} + - name: Update npm + run: npm install -g npm@latest + - name: Publish + env: + GITHUB_TOKEN: ${{ github.token }} + run: npm publish --access public --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/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json index 4533822..9dbdd66 100644 --- a/npm/darwin-arm64/package.json +++ b/npm/darwin-arm64/package.json @@ -23,5 +23,9 @@ "license": "MIT", "engines": { "node": ">= 20" + }, + "repository": { + "type": "git", + "url": "https://github.com/platformatic/python-node" } } 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/npm/linux-arm64-gnu/package.json b/npm/linux-arm64-gnu/package.json index 30472d7..391edd9 100644 --- a/npm/linux-arm64-gnu/package.json +++ b/npm/linux-arm64-gnu/package.json @@ -26,5 +26,9 @@ }, "libc": [ "glibc" - ] + ], + "repository": { + "type": "git", + "url": "https://github.com/platformatic/python-node" + } } diff --git a/npm/linux-x64-gnu/package.json b/npm/linux-x64-gnu/package.json index 7ed97b8..b3c564c 100644 --- a/npm/linux-x64-gnu/package.json +++ b/npm/linux-x64-gnu/package.json @@ -26,5 +26,9 @@ }, "libc": [ "glibc" - ] + ], + "repository": { + "type": "git", + "url": "https://github.com/platformatic/python-node" + } } diff --git a/package.json b/package.json index 6cb1676..e0baf2c 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" ] }, @@ -37,8 +36,7 @@ "version": "napi version" }, "optionalDependencies": { - "@platformatic/python-node-darwin-arm64": "^0.1.4", - "@platformatic/python-node-darwin-x64": "^0.1.4", + "@platformatic/python-node-darwin-arm64": "^1.0.0", "@platformatic/python-node-linux-x64-gnu": "^0.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7eae84b..e0acc3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,11 +19,8 @@ importers: version: 0.18.1 optionalDependencies: '@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 + specifier: ^1.0.0 + version: 1.0.0 '@platformatic/python-node-linux-x64-gnu': specifier: ^0.1.4 version: 0.1.10 @@ -686,18 +683,12 @@ packages: cpu: [x64] os: [win32] - '@platformatic/python-node-darwin-arm64@0.1.10': - resolution: {integrity: sha512-FbvvFc1DcGn9MbiyPJ2zsAYzuESMiO49443wI383Liebb/HaIO32Y+E7JsM5tmf6A2larvRWoO4HprtjbZSUmA==} + '@platformatic/python-node-darwin-arm64@1.0.0': + resolution: {integrity: sha512-QqbzYzBD8rzczpeK0J4DFHUrtJORKzkc4xfmwtggJl1TXl7FKoJEFiVAiVJCLnaFRVHj60lxO8kGVvCQi+zTCw==} engines: {node: '>= 20'} 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'} @@ -1341,10 +1332,7 @@ snapshots: '@oxlint/win32-x64@0.18.1': optional: true - '@platformatic/python-node-darwin-arm64@0.1.10': - optional: true - - '@platformatic/python-node-darwin-x64@0.1.10': + '@platformatic/python-node-darwin-arm64@1.0.0': optional: true '@platformatic/python-node-linux-x64-gnu@0.1.10': 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))