Publish to PyPI.org(CPU) #41
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish to PyPI.org(CPU) | |
on: | |
# schedule: | |
# - cron: '0 20 * * *' # GMT 20 == GMT+8 04 | |
release: | |
types: [published] | |
workflow_dispatch: | |
# Manually trigger the release workflow, a version must be provided | |
inputs: | |
version: | |
description: 'The version to release (e.g. v0.8.0), or leave it empty for nightly build' | |
type: string | |
required: false | |
jobs: | |
# Define test jobs as part of the publish workflow | |
test_linux_cpu: | |
name: Test on Linux(CPU) | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip cache purge | |
python -m pip install --upgrade pip setuptools --no-cache-dir | |
python -m pip install -r requirements-dev.txt --no-cache-dir | |
python -m pip install setuptools==68.2.0 | |
- name: Build Wheel | |
run: python setup.py bdist_wheel | |
- name: Test with pytest | |
run: | | |
pip install dist/*.whl | |
pytest tests/ | |
build_linux: | |
name: Build on Linux(CPU) | |
runs-on: ubuntu-latest | |
needs: [test_linux_cpu] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12 | |
- name: Install dependencies | |
run: | | |
python -m pip cache purge | |
pip install cibuildwheel | |
- name: Build Wheel | |
run: | | |
cibuildwheel --platform linux | |
mkdir dist | |
cp wheelhouse/*.whl dist/ | |
- name: Archive Wheel Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-linux | |
path: dist/*.whl | |
retention-days: 20 | |
build_and_test_macos_arm: | |
name: Build and Test on macOS(ARM) | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip cache purge | |
python -m pip install --upgrade pip setuptools --no-cache-dir | |
python -m pip install -r requirements-dev.txt --no-cache-dir | |
python -m pip install setuptools==68.2.0 | |
pip install cibuildwheel | |
- name: Build Wheel | |
run: | | |
sh copy_pyproject_mac_arm64.sh | |
cibuildwheel --platform macos | |
mkdir dist | |
cp wheelhouse/*.whl dist/ | |
- name: Archive Wheel Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-macos-arm-${{ matrix.python-version }} | |
path: dist/*.whl | |
retention-days: 20 | |
- name: Test with pytest | |
run: | | |
pip install dist/*.whl | |
pytest tests/ | |
# build_macos_x86: | |
# name: Build on macOS(x86) | |
# runs-on: macos-latest | |
# needs: [build_and_test_macos_arm] | |
# steps: | |
# - name: Checkout | |
# uses: actions/checkout@v4 | |
# - name: Set up Python 3.9 | |
# uses: actions/setup-python@v5 | |
# with: | |
# python-version: 3.9 | |
# - name: Install dependencies | |
# run: | | |
# python -m pip cache purge | |
# python -m pip install --upgrade pip setuptools --no-cache-dir | |
# python -m pip install -r requirements-dev.txt --no-cache-dir | |
# python -m pip install setuptools==68.2.0 | |
# pip install cibuildwheel | |
# - name: Build Wheel | |
# run: | | |
# sh copy_pyproject_mac_x86_64.sh | |
# cibuildwheel --platform macos | |
# mkdir dist | |
# cp wheelhouse/*.whl dist/ | |
# - name: Archive Wheel Artifacts | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: dist-macos-x86 | |
# path: dist/*.whl | |
# retention-days: 20 | |
build_and_test_windows: | |
name: Build and Test on Windows | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip cache purge | |
python -m pip install --upgrade pip setuptools --no-cache-dir | |
python -m pip install -r requirements-dev.txt --no-cache-dir | |
python -m pip install setuptools==68.2.0 | |
- name: Build Wheel | |
run: python setup.py bdist_wheel | |
- name: Archive Wheel Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-windows-${{ matrix.python-version }} | |
path: dist/*.whl | |
retention-days: 20 | |
- name: Test with pytest | |
run: | | |
$whl = Get-ChildItem -Path dist -Filter *.whl | Select-Object -First 1 | |
if ($whl) { pip install $whl.FullName } | |
else { Write-Error "No wheel file found in dist directory" } | |
pytest tests/ | |
publish_pypi: | |
name: Upload release to PyPI | |
runs-on: ubuntu-latest | |
needs: [build_linux, build_and_test_macos_arm, build_and_test_windows] | |
permissions: | |
id-token: write | |
contents: write | |
packages: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download linux(CPU) Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-linux | |
path: dist/ | |
- name: Download macOS(ARM) Artifacts-3.9 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-macos-arm-3.9 | |
path: dist/ | |
- name: Download macOS(ARM) Artifacts-3.10 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-macos-arm-3.10 | |
path: dist/ | |
- name: Download macOS(ARM) Artifacts-3.11 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-macos-arm-3.11 | |
path: dist/ | |
- name: Download macOS(ARM) Artifacts-3.12 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-macos-arm-3.12 | |
path: dist/ | |
# - name: Download macOS(x86) Artifacts | |
# uses: actions/download-artifact@v4 | |
# with: | |
# name: dist-macos-x86 | |
# path: dist/ | |
- name: Download Windows Artifacts-3.9 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-windows-3.9 | |
path: dist/ | |
- name: Download Windows Artifacts-3.10 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-windows-3.10 | |
path: dist/ | |
- name: Download Windows Artifacts-3.11 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-windows-3.11 | |
path: dist/ | |
- name: Download Windows Artifacts-3.12 | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-windows-3.12 | |
path: dist/ | |
- name: Publish to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.PYPI_API_TOKEN }} |