name: "[ruff] Release" on: release: types: [published] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: PACKAGE_NAME: ruff PYTHON_VERSION: "3.7" # to build abi3 wheels CARGO_INCREMENTAL: 0 CARGO_NET_RETRY: 10 RUSTUP_MAX_RETRIES: 10 jobs: macos-x86_64: runs-on: macos-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} architecture: x64 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal default: true - name: Build wheels - x86_64 uses: messense/maturin-action@v1 with: target: x86_64 args: --release --out dist --sdist - name: Install built wheel - x86_64 run: | pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist macos-universal: runs-on: macos-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} architecture: x64 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal default: true - name: Build wheels - universal2 uses: messense/maturin-action@v1 with: args: --release --universal2 --out dist - name: Install built wheel - universal2 run: | pip install dist/${{ env.PACKAGE_NAME }}-*universal2.whl --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist windows: runs-on: windows-latest strategy: matrix: target: [x64, x86] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} architecture: ${{ matrix.target }} - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal default: true - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.target }} args: --release --out dist - name: Install built wheel shell: bash run: | python -m pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist linux: runs-on: ubuntu-latest strategy: matrix: target: [x86_64, i686] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} architecture: x64 - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.target }} manylinux: auto args: --release --out dist - name: Install built wheel if: matrix.target == 'x86_64' run: | pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist linux-cross: runs-on: ubuntu-latest strategy: matrix: target: [aarch64, armv7, s390x, ppc64le, ppc64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.target }} manylinux: auto args: --no-default-features --release --out dist - uses: uraimo/run-on-arch-action@v2.0.5 if: matrix.target != 'ppc64' name: Install built wheel with: arch: ${{ matrix.target }} distro: ubuntu20.04 githubToken: ${{ github.token }} install: | apt-get update apt-get install -y --no-install-recommends python3 python3-pip pip3 install -U pip run: | pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist musllinux: runs-on: ubuntu-latest strategy: matrix: target: - x86_64-unknown-linux-musl - i686-unknown-linux-musl steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} architecture: x64 - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.target }} manylinux: musllinux_1_2 args: --release --out dist - name: Install built wheel if: matrix.target == 'x86_64-unknown-linux-musl' uses: addnab/docker-run-action@v3 with: image: alpine:latest options: -v ${{ github.workspace }}:/io -w /io run: | apk add py3-pip pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links /io/dist/ --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist musllinux-cross: runs-on: ubuntu-latest strategy: matrix: platform: - target: aarch64-unknown-linux-musl arch: aarch64 - target: armv7-unknown-linux-musleabihf arch: armv7 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.platform.target }} manylinux: musllinux_1_2 args: --release --out dist - uses: uraimo/run-on-arch-action@master name: Install built wheel with: arch: ${{ matrix.platform.arch }} distro: alpine_latest githubToken: ${{ github.token }} install: | apk add py3-pip run: | pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist pypy: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest] target: [x86_64, aarch64] python-version: - "3.7" - "3.8" - "3.9" exclude: - os: macos-latest target: aarch64 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: pypy${{ matrix.python-version }} - name: Build wheels uses: messense/maturin-action@v1 with: target: ${{ matrix.target }} manylinux: auto args: --release --out dist -i pypy${{ matrix.python-version }} - name: Install built wheel if: matrix.target == 'x86_64' run: | pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - name: Upload wheels uses: actions/upload-artifact@v2 with: name: wheels path: dist release: name: Release runs-on: ubuntu-latest needs: - macos-universal - macos-x86_64 - windows - linux - linux-cross - musllinux - musllinux-cross - pypy if: "startsWith(github.ref, 'refs/tags/')" steps: - uses: actions/download-artifact@v2 with: name: wheels - uses: actions/setup-python@v4 - name: Publish to PyPi env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.RUFF_TOKEN }} run: | pip install --upgrade twine twine upload --skip-existing *