Update pypi.yaml #7
Workflow file for this run
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: Wheel creation and publishing | |
# Change this to whatever you want | |
on: | |
push: | |
tags: | |
- 'v*' | |
workflow_dispatch: | |
inputs: | |
branch: | |
description: 'Which branch to build wheels for' | |
required: false | |
default: 'main' | |
release: | |
description: 'Whether to release, or not?' | |
type: boolean | |
required: false | |
default: false | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
# cibuildwheels already manages multiple python versions automatically | |
# by just detecting the os. However, it does everything in the same job | |
# and therefore in a serial manner. We build a matrix of operating systems | |
# and python versions so that builds are ran in parallel. | |
# The job matrix is basically copied from https://github.com/scikit-learn/scikit-learn/blob/main/.github/workflows/wheels.yml | |
build_wheels: | |
name: Wheel building | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# If one of the jobs fails, continue with the others. | |
fail-fast: false | |
matrix: | |
os: [macos-latest, ubuntu-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: false | |
# We use the cibuildwheel action to take care of everything | |
- name: Build wheels (Mac) | |
if: runner.os == 'macOS' | |
uses: pypa/[email protected] | |
- name: Build wheels (Linux) | |
if: runner.os == 'Linux' | |
uses: pypa/[email protected] | |
- name: Build wheels (Windows) | |
if: runner.os == 'Windows' | |
uses: pypa/[email protected] | |
env: | |
# when building with windows the Cython generated sources lacks linking | |
# against -lpythonX.Y, I don't know why, or how to bypass this problem. | |
# Nothing apparent on the web... :( | |
CMAKE_GENERATOR: MinGW Makefiles | |
PIP_NO_CLEAN: "yes" | |
# Upload the wheel to the action's articfact. | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: artifact-${{ matrix.os }} | |
path: ./wheelhouse/*.whl | |
# Build the source distribution as well | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: false | |
- name: Build sdist | |
run: pipx run build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: dist/*.tar.gz | |
# Upload to testpypi | |
upload_testpypi: | |
needs: [build_sdist, build_wheels] | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
environment: | |
name: testpypi | |
url: https://test.pypi.org/p/graph2mat | |
permissions: | |
id-token: write | |
name: Publish package to TestPyPI | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
path: dist | |
merge-multiple: True | |
- uses: pypa/[email protected] | |
with: | |
repository-url: https://test.pypi.org/legacy | |
# Check that the testpypi installation works | |
test_testpypi: | |
needs: [upload_testpypi] | |
name: Test installation from TestPyPi | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# If one of the jobs fails, continue with the others. | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: artifact | |
path: dist | |
- name: Python installation | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.8" | |
# We should also wait for index to update on remote server | |
- name: Install graph2mat + dependencies | |
run: | | |
sleep 10 | |
version=${GITHUB_REF#refs/*/v} | |
version=${version#refs/*/} | |
python -m pip install --progress-bar=off --find-links dist --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ graph2mat[test]==${version} | |
- name: Test the installation | |
run: | | |
pytest --pyargs graph2mat | |
# Upload to PyPI on every tag | |
upload_pypi: | |
needs: [test_testpypi] | |
name: Publish package to Pypi | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/p/graph2mat | |
permissions: | |
id-token: write | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
# alternatively, to publish when a GitHub Release is created, use the following rule: | |
# if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: artifact | |
path: dist | |
- uses: pypa/[email protected] |