Skip to content

nlpO3-Python 1.3.1 #156

nlpO3-Python 1.3.1

nlpO3-Python 1.3.1 #156

# Build wheels for many platforms, use cibuildwheel
# see: https://github.com/pypa/cibuildwheel
name: Build wheels
on:
push:
branches:
- main
paths:
- 'nlpo3-python/**'
- '!nlpo3-python/**.md'
- '!nlpo3-python/notebooks/**'
- '.github/workflows/build-python-wheels.yml'
pull_request:
branches:
- main
paths:
- 'nlpo3-python/**'
- '!nlpo3-python/**.md'
- '!nlpo3-python/notebooks/**'
- '.github/workflows/build-python-wheels.yml'
release:
types: [published]
# Manual run
workflow_dispatch: {}
jobs:
echo_github_env:
name: Echo env variables
runs-on: ubuntu-latest
steps:
- run: |
echo "github.event.action : ${{ github.event.action }}"
echo "github.event_name : ${{ github.event_name }}"
echo "github.ref : ${{ github.ref }}"
echo "github.event.ref : ${{ github.event.ref }}"
echo "github.event.ref_type : ${{ github.event.ref_type }}"
# Check whether to build the wheels and the source tarball
check_build_trigger:
name: Check build trigger
runs-on: ubuntu-latest
# Not for forks
if: github.repository == 'pythainlp/nlpo3'
outputs:
build: ${{ steps.check_build_trigger.outputs.build }}
steps:
- name: Checkout source code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- id: check_build_trigger
name: Check build trigger
run: bash build_tools/github/check_build_trigger.sh
# To trigger the build steps, add "[cd build]" to commit message
build_wheels:
name: Build ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: check_build_trigger
if: needs.check_build_trigger.outputs.build
strategy:
# Ensure that a wheel builder finishes even if another fails
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: ["3.13"]
env:
CIBW_BUILD: "" # blank, let cibuildwheel build all supported platforms
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
- name: Install Python dependencies
run: python -m pip install --upgrade pip
- name: Setup Rust toolchain
if: startsWith(matrix.os, 'ubuntu-') == false
uses: actions-rust-lang/setup-rust-toolchain@v1
# For Linux, Rust will be installed inside a cibuildwheel container later
- name: Setup rustup target
if: startsWith(matrix.os, 'macos-')
run: rustup target add x86_64-apple-darwin
# For cross-compile x86 on GitHub arm64 runner
- name: Build Python wheels
uses: pypa/[email protected]
with:
package-dir: nlpo3-python
output-dir: wheelhouse
env:
CIBW_BUILD_VERBOSITY: 1
# See CIBW_BUILD, CIBW_SKIP, CIBW_ARCHS and other build selectors at:
# https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip
CIBW_SKIP: "*-musllinux_i686"
CIBW_ARCHS_MACOS: "x86_64 arm64"
CIBW_ENVIRONMENT_MACOS: |
MACOSX_DEPLOYMENT_TARGET=10.9
PATH="$HOME/.cargo/bin:$PATH"
CC=/usr/bin/clang
CXX=/usr/bin/clang++
CIBW_ARCHS_LINUX: "auto"
CIBW_ENVIRONMENT_LINUX: PATH="$HOME/.cargo/bin:$PATH"
CIBW_BEFORE_BUILD_LINUX: |
pip install --upgrade setuptools-rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# It is needed to install Rust for Linux,
# because cibuildwheel on Linux runs inside a container
# and the container does not have Rust.
CIBW_ARCHS_WINDOWS: "AMD64 x86"
- name: Store artifacts
uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
needs: check_build_trigger
if: needs.check_build_trigger.outputs.build
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip"
- name: Build source distribution
run: |
cd nlpo3-python
bash ../build_tools/github/build_source.sh
- name: Store artifacts
uses: actions/upload-artifact@v3
with:
path: nlpo3-python/dist/*.tar.gz
publish_pypi:
name: Publish to PyPI
runs-on: ubuntu-latest
needs: [build_wheels, build_sdist]
# Publish when a GitHub Release is created:
if: github.event_name == 'release' && github.event.action == 'published'
# Alternatively, upload to PyPI on every tag starting with 'v':
#if: github.event_name == 'push' && startsWith(github.event.ref, 'v')
steps:
- name: Retrieve artifacts
uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Publish package
uses: pypa/[email protected]
with:
skip-existing: true
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}