diff --git a/.github/workflows/build_test.yml b/.github/workflows/build-and-test.yml similarity index 67% rename from .github/workflows/build_test.yml rename to .github/workflows/build-and-test.yml index 5f215d26..b704dd25 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,24 +1,32 @@ -name: build_test +name: build-and-test + on: - workflow_dispatch: - pull_request: - types: [opened, synchronize] + workflow_call: + inputs: + build-all-platforms: + description: 'Build wheels for all platforms (Linux ARM64, Windows, macOS)' + required: false + type: boolean + default: true +permissions: + contents: read + actions: write jobs: check-rust: runs-on: ubuntu-22.04 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable components: rustfmt, clippy - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 with: cache: true - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-check-rust path: | @@ -36,14 +44,14 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-test-rust2 path: | @@ -56,7 +64,7 @@ jobs: run: | pixi run test-rs --release - name: Upload test artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: failure() with: name: vegafusion-rt-test-images-linux @@ -67,14 +75,14 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-build-vegafusion-wasm path: | @@ -91,24 +99,22 @@ jobs: run: | pixi run type-check-py -v - # Use maturin action to build linux wheels within proper manylinux compatible containers - # (This is why we don't use the pixi "build-py" action) build-vegafusion-python-linux-64: runs-on: ubuntu-latest steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Clear target/wheels run: rm -rf target/wheels - name: Build wheels (Linux) - uses: messense/maturin-action@v1.45.0 + uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1.45.0 with: command: build manylinux: 2014 rust-toolchain: stable args: -m vegafusion-python/Cargo.toml --profile release-opt --features=protobuf-src --strip --sdist - name: Upload artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: python-wheels-linux-64 path: | @@ -118,21 +124,22 @@ jobs: if-no-files-found: error build-vegafusion-python-linux-arm64: + if: inputs.build-all-platforms runs-on: ubuntu-latest steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Clear target/wheels run: rm -rf target/wheels - name: Build arm64 wheels - uses: messense/maturin-action@v1.45.0 + uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1.45.0 with: command: build manylinux: 2_28 rust-toolchain: stable args: -m vegafusion-python/Cargo.toml --profile release-opt --features=protobuf-src --strip --target aarch64-unknown-linux-gnu - name: Upload artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: python-wheels-linux-arm64 path: | @@ -142,17 +149,18 @@ jobs: if-no-files-found: error build-vegafusion-python-win-64: + if: inputs.build-all-platforms runs-on: windows-2022 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-build-vegafusion-python-win-64 path: | @@ -163,7 +171,7 @@ jobs: run: | pixi run build-py - name: Upload artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: python-wheels-win-64 path: | @@ -173,17 +181,18 @@ jobs: if-no-files-found: error build-vegafusion-python-osx-64: + if: inputs.build-all-platforms runs-on: macos-13 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-build-vegafusion-python-osx-64 path: | @@ -194,7 +203,7 @@ jobs: run: | pixi run build-py - name: Upload artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: python-wheels-osx-64 path: | @@ -204,18 +213,19 @@ jobs: if-no-files-found: error build-vegafusion-python-osx-arm64: + if: inputs.build-all-platforms runs-on: macos-14 steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: stable targets: aarch64-apple-darwin - - uses: prefix-dev/setup-pixi@v0.8.9 + - uses: prefix-dev/setup-pixi@97359467eae22a2d994114fe900db762fea86261 # v0.8.9 - name: Cache - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: key: osx-arm64-${{ hashFiles('pixi.lock', 'Cargo.lock', 'vegafusion-python/pyproject.toml') }}-build-vegafusion-python-osx-arm64 path: | @@ -226,7 +236,7 @@ jobs: run: | pixi run build-py --target aarch64-apple-darwin - name: Upload artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: python-wheels-osx-arm64 path: | @@ -240,13 +250,13 @@ jobs: needs: [build-vegafusion-python-linux-64] steps: - name: Check out repository code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Setup Python - uses: actions/setup-python@v5.3.0 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.11" - name: Install Chrome - uses: browser-actions/setup-chrome@v1 + uses: browser-actions/setup-chrome@c785b87e244131f27c9f19c1a33e2ead956ab7ce # v1.7.3 with: chrome-version: stable - name: Install fonts on Linux @@ -255,7 +265,7 @@ jobs: echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections sudo apt-get install ttf-mscorefonts-installer - name: Download vegafusion-python wheel - uses: actions/download-artifact@v4.1.8 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: python-wheels-linux-64 path: target/wheels/ @@ -274,33 +284,12 @@ jobs: working-directory: vegafusion-python/ env: VEGAFUSION_TEST_HEADLESS: 1 - # Run only Spark end-to-end tests, as other tests interact with Altair which requires - # exact `vegafusion` library to be installed. Since our lib has different name, it fails. run: pytest -vv -rA tests/test_spark_e2e.py - name: Upload test artifacts - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: failure() with: name: vegafusion-python-test-failures path: | vegafusion-python/tests/output/* - # Bundle all python wheels into a single artifact for easier downloading - bundle-vegafusion-python-wheels: - needs: [ - # jobs that build but don't have test dependencies - build-vegafusion-python-linux-arm64, - build-vegafusion-python-osx-64, - - # job that tests the wheels - test-vegafusion-python-linux-64, - ] - runs-on: ubuntu-latest - steps: - - name: Merge Wheel Artifacts - uses: actions/upload-artifact/merge@v4.4.3 - with: - name: vegafusion-python-wheels-all - pattern: python-wheels-* - delete-merged: true - separate-directories: false diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..a7d924dd --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,16 @@ +name: 'PR checks' +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + +jobs: + build-and-test: + uses: ./.github/workflows/build-and-test.yml + with: + build-all-platforms: false + permissions: + contents: read diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..1403de44 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: 'Release' +on: + release: + types: [published] + + contents: read + +jobs: + build-and-test: + uses: ./.github/workflows/build-and-test.yml + permissions: + contents: read + actions: write + + publish-to-pypi: + name: Publish Python wheels to PyPI + runs-on: ubuntu-latest + needs: [build-and-test] + environment: + name: pypi + url: https://pypi.org/p/deepnote-vegafusion + permissions: + id-token: write + contents: read + actions: read + steps: + - name: Download all wheel artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: python-wheels-* + path: dist/ + merge-multiple: true + - name: List files to be uploaded + run: ls -lR dist/ + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + with: + skip-existing: true + verbose: true