Skip to content

Publish to PyPI.org(CPU) #38

Publish to PyPI.org(CPU)

Publish to PyPI.org(CPU) #38

Workflow file for this run

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.9
uses: actions/setup-python@v5
with:
python-version: 3.9
- 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 }}