Skip to content

Publish to PyPI.org(CPU) #8

Publish to PyPI.org(CPU)

Publish to PyPI.org(CPU) #8

Workflow file for this run

name: Publish to PyPI.org
on:
schedule:
- cron: '0 20 * * *' # GMT 20 == GMT+8 04
workflow_dispatch:
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
build_and_test_linux:
name: Build and Test on Linux
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: Archive Wheel Artifacts
uses: actions/upload-artifact@v3
with:
name: dist-linux
path: dist/*.whl
retention-days: 20
- name: Test with pytest
run: |
pip install dist/*.whl
pytest tests/
build_and_test_macos:
name: Build and Test on macOS
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
cp wheelhouse/*.whl dist/
- name: Archive Wheel Artifacts
uses: actions/upload-artifact@v3
with:
name: dist-macos
path: dist/*.whl
retention-days: 20
- name: Test with pytest
run: |
pip install dist/*.whl
pytest tests/
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@v3
with:
name: dist-macos
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_and_test_linux, build_and_test_macos, build_and_test_windows]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Artifacts
uses: actions/download-artifact@v3
with:
name: dist-linux
path: dist/linux/
- name: Download macOS Artifacts
uses: actions/download-artifact@v3
with:
name: dist-macos
path: dist/macos/
- name: Download Windows Artifacts
uses: actions/download-artifact@v3
with:
name: dist-windows
path: dist/windows/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}