Skip to content

Publish to PyPI.org(CPU) #19

Publish to PyPI.org(CPU)

Publish to PyPI.org(CPU) #19

Workflow file for this run

name: Publish to PyPI.org(CPU)
on:
schedule:
- cron: '0 20 * * *' # GMT 20 == GMT+8 04
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:
name: 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: Test with pytest
run: |
pip install dist/*.whl
pytest tests/
build_linux_cpu:
name: Build on Linux(CPU)
runs-on: ubuntu-latest
needs: [test_linux]
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: |
cibuildwheel --platform linux
mkdir dist
cp wheelhouse/*.whl dist/
- name: Archive Wheel Artifacts
uses: actions/upload-artifact@v3
with:
name: dist-linux-cpu
path: dist/*.whl
retention-days: 20
# build_linux_gpu:
# name: Build on Linux(GPU)
# runs-on: ubuntu-latest
# needs: [test_linux]
# 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: |
# rm -rf setup.py
# cp setup_cuda.py setup.py
# cibuildwheel --platform linux
# mkdir dist
# cp wheelhouse/*.whl dist/
# - name: Archive Wheel Artifacts
# uses: actions/upload-artifact@v3
# with:
# name: dist-linux-gpu
# 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@v3
with:
name: dist-macos-arm
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@v3
# 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@v3
with:
name: dist-windows
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_cpu, 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@v3
with:
name: dist-linux-cpu
path: dist/
# - name: Download linux(GPU) Artifacts
# uses: actions/download-artifact@v3
# with:
# name: dist-linux-gpu
# path: dist/
- name: Download macOS(ARM) Artifacts
uses: actions/download-artifact@v3
with:
name: dist-macos-arm
path: dist/
# - name: Download macOS(x86) Artifacts
# uses: actions/download-artifact@v3
# with:
# name: dist-macos-x86
# path: dist/
- name: Download Windows Artifacts
uses: actions/download-artifact@v3
with:
name: dist-windows
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}