diff --git a/.github/workflows/cd.yml b/.github/workflows/npm-cd.yml similarity index 62% rename from .github/workflows/cd.yml rename to .github/workflows/npm-cd.yml index 8ee470dfd9..d49eebc882 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/npm-cd.yml @@ -21,7 +21,7 @@ jobs: ARCH: x64, TARGET: x86_64-unknown-linux-gnu, NPM_PUBLISH: true, - PYPI_PUBLISH: true, + PYPI_PUBLISH: false, } - { OS: ubuntu-latest, @@ -30,7 +30,7 @@ jobs: ARCH: arm64, TARGET: aarch64-unknown-linux-gnu, NPM_PUBLISH: true, - PYPI_PUBLISH: true, + PYPI_PUBLISH: false, CONTAINER: "2_28", } - { @@ -40,7 +40,7 @@ jobs: ARCH: x64, TARGET: x86_64-apple-darwin, NPM_PUBLISH: true, - PYPI_PUBLISH: true, + PYPI_PUBLISH: false, } - { OS: macos-latest, @@ -49,7 +49,7 @@ jobs: arch: arm64, TARGET: aarch64-apple-darwin, NPM_PUBLISH: true, - PYPI_PUBLISH: true, + PYPI_PUBLISH: false, } steps: - name: Checkout @@ -119,103 +119,6 @@ jobs: path: ./node/bin if-no-files-found: error - ###### PYTHON ##### - - - name: Set the package version for Python - if: matrix.build.PYPI_PUBLISH == true - working-directory: ./python - run: | - SED_FOR_MACOS=`if [[ "${{ matrix.build.OS }}" =~ .*"macos".* ]]; then echo "''"; fi` - sed -i $SED_FOR_MACOS "s|255.255.255|${{ env.RELEASE_VERSION }}|g" ./Cargo.toml - # Log the edited Cargo.toml file - cat Cargo.toml - - - name: Set up Python - if: matrix.build.PYPI_PUBLISH == true && !contains(matrix.build.RUNNER, 'self-hosted') - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - - name: Setup Python for self-hosted Ubuntu runners - if: matrix.build.PYPI_PUBLISH == true && contains(matrix.build.OS, 'ubuntu') && contains(matrix.build.RUNNER, 'self-hosted') - run: | - sudo apt update -y - sudo apt upgrade -y - sudo apt install python3 python3-venv python3-pip -y - - - name: Build Python wrapper - if: matrix.build.PYPI_PUBLISH == true - uses: ./.github/workflows/build-python-wrapper - with: - os: ${{ matrix.build.OS }} - target: ${{ matrix.build.TARGET }} - publish: "true" - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Include protobuf files in the package - working-directory: ./python - if: matrix.build.PYPI_PUBLISH == true - run: | - SED_FOR_MACOS=`if [[ "${{ matrix.build.OS }}" =~ .*"macos".* ]]; then echo "''"; fi` - sed -i $SED_FOR_MACOS '/pb2.py/d' .gitignore - # Log the edited .gitignore file - cat .gitignore - - - name: Build Python wheels (linux) - if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAMED_OS, 'linux') - uses: PyO3/maturin-action@v1 - with: - working-directory: ./python - target: ${{ matrix.build.TARGET }} - args: --release --strip --out wheels -i python3.8 python3.9 python3.10 python3.11 python3.12 - manylinux: auto - container: ${{ matrix.build.CONTAINER != '' && matrix.build.CONTAINER || '2014' }} - before-script-linux: | - # Install protobuf compiler - if [[ $(`which apt`) != '' ]] - then - apt install protobuf-compiler -y - else - PB_REL="https://github.com/protocolbuffers/protobuf/releases" - curl -LO $PB_REL/download/v3.15.8/protoc-3.15.8-linux-x86_64.zip - unzip protoc-3.15.8-linux-x86_64.zip -d $HOME/.local - export PATH="$PATH:$HOME/.local/bin" - fi - - - name: Build Python wheels (macos) - if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAMED_OS, 'darwin') - uses: PyO3/maturin-action@v1 - with: - working-directory: ./python - target: ${{ matrix.build.TARGET }} - args: --release --strip --out wheels -i python3.10 python3.11 python3.12 - - - name: Upload Python wheels - if: matrix.build.PYPI_PUBLISH == true - uses: actions/upload-artifact@v3 - with: - name: wheels - path: python/wheels - if-no-files-found: error - - publish-to-pypi: - name: Publish PyPI package - runs-on: ubuntu-latest - needs: publish-binaries - steps: - - uses: actions/download-artifact@v3 - with: - path: python/wheels - name: wheels - - name: Publish to PyPI - uses: PyO3/maturin-action@v1 - env: - MATURIN_PYPI_TOKEN: ${{ secrets.LIVEPYPI_API_TOKEN }} - MATURIN_REPOSITORY: pypi - with: - command: upload - args: --skip-existing python/wheels/* - publish-base-to-npm: name: Publish the base NPM package needs: publish-binaries diff --git a/.github/workflows/pypi-cd.yml b/.github/workflows/pypi-cd.yml new file mode 100644 index 0000000000..603b344990 --- /dev/null +++ b/.github/workflows/pypi-cd.yml @@ -0,0 +1,160 @@ +# The cross platform build was created based on the [Packaging Rust Applications for the NPM Registry blog](https://blog.orhun.dev/packaging-rust-for-npm/). + +name: Continuous Deployment + +on: + push: + tags: + - "v*.*" +jobs: + publish-binaries: + name: Publish packages + runs-on: ${{ matrix.build.RUNNER }} + strategy: + fail-fast: false + matrix: + build: + - { + OS: ubuntu-latest, + NAMED_OS: linux, + RUNNER: ubuntu-latest, + ARCH: x64, + TARGET: x86_64-unknown-linux-gnu, + NPM_PUBLISH: false, + PYPI_PUBLISH: true, + } + - { + OS: ubuntu-latest, + NAMED_OS: linux, + RUNNER: [self-hosted, Linux, ARM64], + ARCH: arm64, + TARGET: aarch64-unknown-linux-gnu, + NPM_PUBLISH: false, + PYPI_PUBLISH: true, + CONTAINER: "2_28", + } + - { + OS: macos-latest, + NAMED_OS: darwin, + RUNNER: macos-latest, + ARCH: x64, + TARGET: x86_64-apple-darwin, + NPM_PUBLISH: false, + PYPI_PUBLISH: true, + } + - { + OS: macos-latest, + NAMED_OS: darwin, + RUNNER: macos-13-xlarge, + arch: arm64, + TARGET: aarch64-apple-darwin, + NPM_PUBLISH: false, + PYPI_PUBLISH: true, + } + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: "true" + + - name: Set the release version + shell: bash + run: | + echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV + + ###### PYTHON ##### + + - name: Set the package version for Python + if: matrix.build.PYPI_PUBLISH == true + working-directory: ./python + run: | + SED_FOR_MACOS=`if [[ "${{ matrix.build.OS }}" =~ .*"macos".* ]]; then echo "''"; fi` + sed -i $SED_FOR_MACOS "s|255.255.255|${{ env.RELEASE_VERSION }}|g" ./Cargo.toml + # Log the edited Cargo.toml file + cat Cargo.toml + + - name: Set up Python + if: matrix.build.PYPI_PUBLISH == true && !contains(matrix.build.RUNNER, 'self-hosted') + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Setup Python for self-hosted Ubuntu runners + if: matrix.build.PYPI_PUBLISH == true && contains(matrix.build.OS, 'ubuntu') && contains(matrix.build.RUNNER, 'self-hosted') + run: | + sudo apt update -y + sudo apt upgrade -y + sudo apt install python3 python3-venv python3-pip -y + + - name: Build Python wrapper + if: matrix.build.PYPI_PUBLISH == true + uses: ./.github/workflows/build-python-wrapper + with: + os: ${{ matrix.build.OS }} + target: ${{ matrix.build.TARGET }} + publish: "true" + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Include protobuf files in the package + working-directory: ./python + if: matrix.build.PYPI_PUBLISH == true + run: | + SED_FOR_MACOS=`if [[ "${{ matrix.build.OS }}" =~ .*"macos".* ]]; then echo "''"; fi` + sed -i $SED_FOR_MACOS '/pb2.py/d' .gitignore + # Log the edited .gitignore file + cat .gitignore + + - name: Build Python wheels (linux) + if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAMED_OS, 'linux') + uses: PyO3/maturin-action@v1 + with: + working-directory: ./python + target: ${{ matrix.build.TARGET }} + args: --release --strip --out wheels -i python3.8 python3.9 python3.10 python3.11 python3.12 + manylinux: auto + container: ${{ matrix.build.CONTAINER != '' && matrix.build.CONTAINER || '2014' }} + before-script-linux: | + # Install protobuf compiler + if [[ $(`which apt`) != '' ]] + then + apt install protobuf-compiler -y + else + PB_REL="https://github.com/protocolbuffers/protobuf/releases" + curl -LO $PB_REL/download/v3.15.8/protoc-3.15.8-linux-x86_64.zip + unzip protoc-3.15.8-linux-x86_64.zip -d $HOME/.local + export PATH="$PATH:$HOME/.local/bin" + fi + + - name: Build Python wheels (macos) + if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAMED_OS, 'darwin') + uses: PyO3/maturin-action@v1 + with: + working-directory: ./python + target: ${{ matrix.build.TARGET }} + args: --release --strip --out wheels -i python3.10 python3.11 python3.12 + + - name: Upload Python wheels + if: matrix.build.PYPI_PUBLISH == true + uses: actions/upload-artifact@v3 + with: + name: wheels + path: python/wheels + if-no-files-found: error + + publish-to-pypi: + name: Publish PyPI package + runs-on: ubuntu-latest + needs: publish-binaries + steps: + - uses: actions/download-artifact@v3 + with: + path: python/wheels + name: wheels + - name: Publish to PyPI + uses: PyO3/maturin-action@v1 + env: + MATURIN_PYPI_TOKEN: ${{ secrets.LIVEPYPI_API_TOKEN }} + MATURIN_REPOSITORY: pypi + with: + command: upload + args: --skip-existing python/wheels/*