Skip to content

Commit

Permalink
Add Python Release Action to publish pyiceberg_core dist to Pypi (#705
Browse files Browse the repository at this point in the history
)
  • Loading branch information
sungwy authored Nov 25, 2024
1 parent 697a200 commit 286938e
Show file tree
Hide file tree
Showing 5 changed files with 177 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/bindings_python_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.8
python-version: 3.9
- uses: PyO3/maturin-action@v1
with:
working-directory: "bindings/python"
Expand Down
144 changes: 144 additions & 0 deletions .github/workflows/release_python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

name: Publish Python 🐍 distribution 📦 to PyPI

on:
push:
tags:
- '*'
pull_request:
branches:
- main
paths:
- ".github/workflows/release_python.yml"
workflow_dispatch:

env:
rust_msrv: "1.77.1"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true

permissions:
contents: read

jobs:
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
working-directory: "bindings/python"
command: sdist
args: -o dist
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: wheels
path: bindings/python/dist

wheels:
runs-on: "${{ matrix.os }}"
strategy:
matrix:
include:
- { os: windows-latest }
- { os: macos-latest, target: "universal2-apple-darwin" }
- { os: ubuntu-latest, target: "x86_64" }
- { os: ubuntu-latest, target: "aarch64" }
- { os: ubuntu-latest, target: "armv7l" }
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Setup Rust toolchain
uses: ./.github/actions/setup-builder
with:
rust-version: ${{ env.rust_msrv }}
- uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
working-directory: "bindings/python"
command: build
args: --release -o dist
env:
# Workaround ring 0.17 build issue
CFLAGS_aarch64_unknown_linux_gnu: "-D__ARM_ARCH=8"
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: bindings/python/dist

pypi-publish:
name: Publish Python 🐍 distribution 📦 to Pypi
needs: [ sdist, wheels ]
runs-on: ubuntu-latest
# Only publish to PyPi if the tag is not a pre-release
if: ${{ startsWith(github.ref, 'refs/tags/') && !contains(github.ref, '-') }}

environment:
name: pypi
url: https://pypi.org/p/pyiceberg_core

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: wheels
path: bindings/python/dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

with:
skip-existing: true
packages-dir: bindings/python/dist

testpypi-publish:
name: Publish Python 🐍 distribution 📦 to TestPypi
needs: [ sdist, linux ]
runs-on: ubuntu-latest
# Only publish to TestPyPi if the tag is a pre-release
if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-')}}

environment:
name: testpypi
url: https://test.pypi.org/p/pyiceberg_core

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: wheels
path: bindings/python/dist
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
skip-existing: true
packages-dir: bindings/python/dist
2 changes: 1 addition & 1 deletion bindings/python/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ crate-type = ["cdylib"]

[dependencies]
iceberg = { path = "../../crates/iceberg" }
pyo3 = { version = "0.22.3", features = ["extension-module"] }
pyo3 = { version = "0.22.3", features = ["extension-module", "abi3-py39"] }
arrow = { version = "53", features = ["pyarrow"] }
28 changes: 28 additions & 0 deletions bindings/python/project-description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->

# Pyiceberg Core

This project is used to build an iceberg-rust powered core for pyiceberg, and intended for use only by pyiceberg.

Install via PyPI:

```
pip install pyiceberg_core
```
3 changes: 3 additions & 0 deletions bindings/python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,14 @@ build-backend = "maturin"
[project]
name = "pyiceberg_core"
version = "0.0.1"
readme = "project-description.md"
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
Expand Down

0 comments on commit 286938e

Please sign in to comment.