From 645c2d4f9f0f9b97f125ffa2fd688eb7239e5d56 Mon Sep 17 00:00:00 2001 From: Bas Zalmstra Date: Tue, 26 Sep 2023 11:41:36 +0200 Subject: [PATCH] wip --- .github/workflows/python-bindings.yml | 8 ++- .github/workflows/release-python.yml | 99 +++++++++++++++++++++++++++ py-rattler/.gitignore | 1 + py-rattler/pixi.toml | 4 ++ py-rattler/pyproject.toml | 2 +- 5 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/release-python.yml diff --git a/.github/workflows/python-bindings.yml b/.github/workflows/python-bindings.yml index 1ed5b7ac6..65bd44999 100644 --- a/.github/workflows/python-bindings.yml +++ b/.github/workflows/python-bindings.yml @@ -21,9 +21,11 @@ jobs: with: submodules: recursive lfs: true - - run: | - curl -fsSL https://pixi.sh/install.sh | bash - echo "/home/runner/.pixi/bin" >> $GITHUB_PATH + - uses: prefix-dev/setup-pixi@v0.2.1 + with: + pixi-version: v0.3.0 + cache: true + manifest-path: py-rattler/pixi.toml - uses: actions-rust-lang/setup-rust-toolchain@v1 with: components: clippy, rustfmt diff --git a/.github/workflows/release-python.yml b/.github/workflows/release-python.yml new file mode 100644 index 000000000..69e42c45d --- /dev/null +++ b/.github/workflows/release-python.yml @@ -0,0 +1,99 @@ +name: "Python Release" + +on: + workflow_dispatch: + inputs: + tag: + description: "The version to tag, without the leading 'v'. If omitted, will initiate a dry run (no uploads)." + type: string + sha: + description: "The full sha of the commit to be released. If omitted, the latest commit on the default branch will be used." + default: "" + type: string + pull_request: + paths: + # When we change pyproject.toml, we want to ensure that the maturin builds still work + - py-rattler/pyproject.toml + # And when we change this workflow itself... + - .github/workflows/python-release.yaml + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + PACKAGE_NAME: py-rattler + CARGO_INCREMENTAL: 0 + CARGO_NET_RETRY: 10 + CARGO_TERM_COLOR: always + RUSTUP_MAX_RETRIES: 10 + +jobs: + sdist: + name: Build sdist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.sha }} + - uses: prefix-dev/setup-pixi@v0.2.1 + with: + pixi-version: v0.3.0 + cache: true + manifest-path: py-rattler/pixi.toml + - name: "Build sdist" + run: pixi run --manifest-path py-rattler/pixi.toml generate-sdist + - name: "Test sdist" + run: pixi run --manifest-path py-rattler/pixi.toml pip install dist/${{ env.PACKAGE_NAME }}-*.tar.gz --force-reinstall + - name: "Upload sdist" + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + + windows: + runs-on: windows-latest + name: Build ${{ matrix.platform.target }} + strategy: + matrix: + platform: + - target: x86_64-pc-windows-msvc + arch: x64 + - target: i686-pc-windows-msvc + arch: x86 + - target: aarch64-pc-windows-msvc + arch: x64 + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.sha }} + - uses: prefix-dev/setup-pixi@v0.2.1 + with: + pixi-version: v0.3.0 + cache: true + manifest-path: py-rattler/pixi.toml + - name: "Build wheel" + run: pixi run --manifest-path py-rattler/pixi.toml generate-sdist --target ${{ matrix.platform.target }} + - name: "Test wheel" + if: ${{ !startsWith(matrix.platform.target, 'aarch64') }} + shell: pixi run --manifest-path py-rattler/pixi.toml bash {0} + run: | + pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall + - name: "Upload wheels" + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + - name: "Archive binary" + shell: bash + run: | + ARCHIVE_FILE=ruff-${{ matrix.platform.target }}.zip + 7z a $ARCHIVE_FILE ./target/${{ matrix.platform.target }}/release/ruff.exe + sha256sum $ARCHIVE_FILE > $ARCHIVE_FILE.sha256 + - name: "Upload binary" + uses: actions/upload-artifact@v3 + with: + name: binaries + path: | + *.zip + *.sha256 diff --git a/py-rattler/.gitignore b/py-rattler/.gitignore index 94851e692..2b9c81e09 100644 --- a/py-rattler/.gitignore +++ b/py-rattler/.gitignore @@ -71,3 +71,4 @@ docs/_build/ # Pyenv .python-version +.ruff_cache diff --git a/py-rattler/pixi.toml b/py-rattler/pixi.toml index dafb3165b..f5665f4af 100644 --- a/py-rattler/pixi.toml +++ b/py-rattler/pixi.toml @@ -26,6 +26,10 @@ fmt-rust-check = "cargo fmt --all --check" fmt-python-check = "black . --check" fmt-check = { depends_on = ["fmt-python-check", "fmt-rust-check"] } +# tasks to generate artifacts +generate-sdist = "maturin sdist --out dist" +generate-wheel = "maturin build --release --out dist" + [dependencies] maturin = "~=1.2.2" pip = "~=23.2.1" diff --git a/py-rattler/pyproject.toml b/py-rattler/pyproject.toml index de029d115..340fb971a 100644 --- a/py-rattler/pyproject.toml +++ b/py-rattler/pyproject.toml @@ -3,7 +3,7 @@ requires = ["maturin~=1.2.1"] build-backend = "maturin" [project] -name = "rattler" +name = "py-rattler" requires-python = ">=3.8" authors = [ { name = "Bas Zalmstra", email = "zalmstra.bas@gmail.com" },