Skip to content

Bump ruff to 0.7, add ruff isort, normalize conda recipes, clean docs to only use makefile commands #1140

Bump ruff to 0.7, add ruff isort, normalize conda recipes, clean docs to only use makefile commands

Bump ruff to 0.7, add ruff isort, normalize conda recipes, clean docs to only use makefile commands #1140

Workflow file for this run

name: Build Status
on:
push:
branches:
- main
tags:
- v*
paths-ignore:
- LICENSE
- NOTICE
- README.md
- "docs/**"
pull_request:
branches:
- main
paths-ignore:
- LICENSE
- NOTICE
- README.md
- "docs/**"
workflow_dispatch:
inputs:
ci-full:
description: "Run Full CI"
required: false
type: boolean
default: false
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: write
checks: write
pull-requests: write
id-token: write # for pypi test release
jobs:
########################################################
#......................................................#
#..|########|..|###\.....|##|..|########|..|########|..#
#.....|##|.....|##|##\...|##|.....|##|.....|########|..#
#.....|##|.....|##|\##\..|##|.....|##|........|##|.....#
#.....|##|.....|##|.\##\.|##|.....|##|........|##|.....#
#.....|##|.....|##|..\##\|##|.....|##|........|##|.....#
#.....|##|.....|##|...\##\#/......|##|........|##|.....#
#..|########|..|##|....\##/....|########|.....|##|.....#
#......................................................#
########################################################
# Stage One - Initialize the build #
########################################################
# This is so we can inspect the latest commit message from
# both push and pull_request events (there is no
# github.event.head_commit.message otherwise on pull
# requests)
initialize:
runs-on: ubuntu-24.04
outputs:
COMMIT_MESSAGE: ${{ steps.setup.outputs.COMMIT_MSG }}
FULL_RUN: ${{ steps.setuppush.outputs.FULL_RUN || steps.setuppr.outputs.FULL_RUN || steps.setupmanual.outputs.FULL_RUN }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# for pull_request so we can do HEAD^2
fetch-depth: 2
- name: Get Commit Message
run: echo "COMMIT_MSG=$(git log -1 --pretty=%B HEAD | tr '\n' ' ')" >> $GITHUB_ENV
if: ${{ github.event_name == 'push' }}
- name: Get Commit Message
run: echo "COMMIT_MSG=$(git log -1 --pretty=%B HEAD^2 | tr '\n' ' ')" >> $GITHUB_ENV
if: ${{ github.event_name == 'pull_request' }}
- name: Display and Setup Build Args (Push)
id: setuppush
run: |
echo "Commit Message: $COMMIT_MSG"
echo "Full Run: $FULL_RUN"
echo "COMMIT_MSG=$COMMIT_MSG" >> $GITHUB_OUTPUT
echo "FULL_RUN=$FULL_RUN" >> $GITHUB_OUTPUT
env:
FULL_RUN: ${{ startsWith(github.ref_name, 'v') || contains(github.event.head_commit.message, '[ci-full]') }}
if: ${{ github.event_name == 'push' }}
- name: Display and Setup Build Args (PR)
id: setuppr
run: |
echo "Commit Message: $COMMIT_MSG"
echo "Full Run: $FULL_RUN"
echo "COMMIT_MSG=$COMMIT_MSG" >> $GITHUB_OUTPUT
echo "FULL_RUN=$FULL_RUN" >> $GITHUB_OUTPUT
env:
FULL_RUN: ${{ contains(github.event.pull_request.title, '[ci-full]') || contains(env.COMMIT_MSG, '[ci-full]') }}
if: ${{ github.event_name == 'pull_request' }}
- name: Display and Setup Build Args (Manual)
id: setupmanual
run: |
echo "Commit Message: $COMMIT_MSG"
echo "Full Run: $FULL_RUN"
echo "COMMIT_MSG=$COMMIT_MSG" >> $GITHUB_OUTPUT
echo "FULL_RUN=$FULL_RUN" >> $GITHUB_OUTPUT
env:
FULL_RUN: ${{ github.event.inputs.ci-full }}
if: ${{ github.event_name == 'workflow_dispatch' }}
########################################################
#......................................................#
#..|##|........|########|..|###\.....|##|..|########|..#
#..|##|...........|##|.....|##|##\...|##|..|########|..#
#..|##|...........|##|.....|##|\##\..|##|.....|##|.....#
#..|##|...........|##|.....|##|.\##\.|##|.....|##|.....#
#..|##|...........|##|.....|##|..\##\|##|.....|##|.....#
#..|########|.....|##|.....|##|...\##\#/......|##|.....#
#..|########|..|########|..|##|....\##/.......|##|.....#
#......................................................#
########################################################
# Stage One - Lint Python / C++ #
########################################################
lint:
needs:
- initialize
strategy:
matrix:
os:
- ubuntu-24.04
python-version:
- 3.9
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Install python dependencies
run: make requirements
- name: Python Lint Steps (Linux)
run: make lint
################################################################
#..............................................................#
#..|########\..|##|..|##|..|########|..|##|........|#######\...#
#..|##|../##/..|##|..|##|.....|##|.....|##|........|##|..\##\..#
#..|##|./##/...|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##||#<.....|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##|.\##\...|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##|..\##\..|##|..|##|.....|##|.....|########|..|##|../##/..#
#..|########/..|########|..|########|..|########|..|#######/...#
#..............................................................#
################################################################
# Stage Two - Build Python #
################################################################
build:
needs:
- initialize
strategy:
matrix:
os:
- ubuntu-24.04 # https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md
- macos-12 # https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md
- macos-14 # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md
- windows-2019 # https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
cibuildwheel:
- "cp38"
- "cp39"
- "cp310"
- "cp311"
- "cp312"
is-full-run:
- ${{ needs.initialize.outputs.FULL_RUN == 'true' }}
exclude:
############################
# Things to always exclude #
############################
# Skip when cibuildwheel != python version
# to avoid duplication
- python-version: "3.8"
cibuildwheel: "cp39"
- python-version: "3.8"
cibuildwheel: "cp310"
- python-version: "3.8"
cibuildwheel: "cp311"
- python-version: "3.8"
cibuildwheel: "cp312"
- python-version: "3.9"
cibuildwheel: "cp38"
- python-version: "3.9"
cibuildwheel: "cp310"
- python-version: "3.9"
cibuildwheel: "cp311"
- python-version: "3.9"
cibuildwheel: "cp312"
- python-version: "3.10"
cibuildwheel: "cp38"
- python-version: "3.10"
cibuildwheel: "cp39"
- python-version: "3.10"
cibuildwheel: "cp311"
- python-version: "3.10"
cibuildwheel: "cp312"
- python-version: "3.11"
cibuildwheel: "cp38"
- python-version: "3.11"
cibuildwheel: "cp39"
- python-version: "3.11"
cibuildwheel: "cp310"
- python-version: "3.11"
cibuildwheel: "cp312"
- python-version: "3.12"
cibuildwheel: "cp38"
- python-version: "3.12"
cibuildwheel: "cp39"
- python-version: "3.12"
cibuildwheel: "cp310"
- python-version: "3.12"
cibuildwheel: "cp311"
##############################################
# Things to exclude if not a full matrix run #
##############################################
# mac arm builds support py3.10+
- os: macos-14
python-version: "3.8"
- os: macos-14
python-version: "3.9"
# Avoid extra resources for windows build
- is-full-run: false
os: windows-2019
python-version: "3.8"
- is-full-run: false
os: windows-2019
python-version: "3.9"
- is-full-run: false
os: windows-2019
python-version: "3.10"
- is-full-run: false
os: windows-2019
python-version: "3.11"
# avoid unnecessary use of mac resources
- is-full-run: false
os: macos-12
- is-full-run: false
os: macos-14
python-version: "3.8"
- is-full-run: false
os: macos-14
python-version: "3.9"
- is-full-run: false
os: macos-14
python-version: "3.10"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Set up Caches
uses: ./.github/actions/setup-caches
- name: Set up dependencies
uses: ./.github/actions/setup-dependencies
with:
cibuildwheel: '${{ matrix.cibuildwheel }}'
if: ${{ runner.os != 'Linux' }}
########
# Linux
- name: Python Wheel Steps (Linux - cibuildwheel)
run: make dist-py-cibw
env:
CIBW_BUILD: "${{ matrix.cibuildwheel }}-manylinux*"
CIBW_ENVIRONMENT_LINUX: CSP_MANYLINUX="ON" CCACHE_DIR="/host/home/runner/work/csp/csp/.ccache" VCPKG_DEFAULT_BINARY_CACHE="/host${{ env.VCPKG_DEFAULT_BINARY_CACHE }}" VCPKG_DOWNLOADS="/host${{ env.VCPKG_DOWNLOADS }}"
CIBW_BUILD_VERBOSITY: 3
if: ${{ runner.os == 'Linux' }}
########
# Macos
- name: Python Build Steps (Macos x86)
run: make dist-py-cibw
env:
CIBW_BUILD: "${{ matrix.cibuildwheel }}-macos*"
CIBW_ENVIRONMENT_MACOS: CCACHE_DIR="/Users/runner/work/csp/csp/.ccache" VCPKG_DEFAULT_BINARY_CACHE="${{ env.VCPKG_DEFAULT_BINARY_CACHE }}" VCPKG_DOWNLOADS="${{ env.VCPKG_DOWNLOADS }}"
CIBW_ARCHS_MACOS: x86_64
CIBW_BUILD_VERBOSITY: 3
if: ${{ matrix.os == 'macos-12' }}
- name: Python Build Steps (Macos arm)
run: make dist-py-cibw
env:
CIBW_BUILD: "${{ matrix.cibuildwheel }}-macos*"
CIBW_ENVIRONMENT_MACOS: CCACHE_DIR="/Users/runner/work/csp/csp/.ccache" VCPKG_DEFAULT_BINARY_CACHE="${{ env.VCPKG_DEFAULT_BINARY_CACHE }}" VCPKG_DOWNLOADS="${{ env.VCPKG_DOWNLOADS }}"
CIBW_ARCHS_MACOS: arm64
CIBW_BUILD_VERBOSITY: 3
if: ${{ matrix.os == 'macos-14' }}
##########
# Windows
- name: Python Build Steps (Windows 2019)
run: make dist-py-cibw
env:
CIBW_BUILD: "${{ matrix.cibuildwheel }}-win_amd64"
CSP_GENERATOR: "Visual Studio 16 2019"
VCPKG_DEFAULT_BINARY_CACHE: C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_cache
VCPKG_DOWNLOADS: C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_download_cache
if: ${{ matrix.os == 'windows-2019' }}
##########
# Common
- name: Check Wheels
run: make dist-check
- name: Upload Wheel
uses: actions/upload-artifact@v4
with:
name: csp-dist-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}
path: dist/*.whl
################################################################
#..............................................................#
#..|########\..|##|..|##|..|########|..|##|........|#######\...#
#..|##|../##/..|##|..|##|.....|##|.....|##|........|##|..\##\..#
#..|##|./##/...|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##||#<.....|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##|.\##\...|##|..|##|.....|##|.....|##|........|##|..|##|..#
#..|##|..\##\..|##|..|##|.....|##|.....|########|..|##|../##/..#
#..|########/..|########|..|########|..|########|..|#######/...#
#..............................................................#
#..../####\....|#######\...|########|..../####\....|########|..#
#../##/..\##\..|##|..\##\.....|##|...../##/..\##\..|########|..#
#...\##\.......|##|..|##|.....|##|......\##\..........|##|.....#
#.....\##\.....|##|..|##|.....|##|........\##\........|##|.....#
#.......\##\...|##|..|##|.....|##|..........\##\......|##|.....#
#..\##\./##/...|##|../##/.....|##|.....\##\./##/......|##|.....#
#...\####/.....|#######/...|########|...\####/........|##|.....#
#..............................................................#
################################################################
# Stage Three - Build SDist #
################################################################
build_sdist:
needs:
- initialize
strategy:
matrix:
os:
- ubuntu-24.04
python-version:
- 3.9
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Install python dependencies
run: make requirements
- name: Python SDist Steps
run: make dist-py-sdist
- name: Check sdist
run: make dist-check
- name: Upload SDist
uses: actions/upload-artifact@v4
with:
name: csp-sdist
path: dist/*.tar.gz
####################################################
#..................................................#
#..|########|..|########|..../####\....|########|..#
#..|########|..|##|......../##/..\##\..|########|..#
#.....|##|.....|##|.........\##\..........|##|.....#
#.....|##|.....|########|.....\##\........|##|.....#
#.....|##|.....|##|.............\##\......|##|.....#
#.....|##|.....|##|........\##\../##/.....|##|.....#
#.....|##|.....|########|...\####/........|##|.....#
#..................................................#
####################################################
# Stage Four - Test Python #
####################################################
test:
needs:
- initialize
- build
strategy:
matrix:
os:
- ubuntu-24.04
- macos-12
- macos-14
- windows-2019
python-version:
- 3.8
- 3.9
- "3.10"
- 3.11
- 3.12
is-full-run:
- ${{ needs.initialize.outputs.FULL_RUN == 'true' }}
exclude:
##############################################
# Things to exclude if not a full matrix run #
##############################################
# mac arm builds support py3.10+
- os: macos-14
python-version: "3.8"
- os: macos-14
python-version: "3.9"
# Avoid extra resources for windows build
- is-full-run: false
os: windows-2019
python-version: "3.8"
- is-full-run: false
os: windows-2019
python-version: "3.9"
- is-full-run: false
os: windows-2019
python-version: "3.10"
- is-full-run: false
os: windows-2019
python-version: "3.11"
# avoid unnecessary use of mac resources
- is-full-run: false
os: macos-12
- is-full-run: false
os: macos-14
python-version: "3.8"
- is-full-run: false
os: macos-14
python-version: "3.9"
- is-full-run: false
os: macos-14
python-version: "3.10"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Install python dependencies
run: make requirements
- name: Download wheel
uses: actions/download-artifact@v4
with:
name: csp-dist-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}
########
# Linux
- name: Install test dependencies (Linux)
shell: bash
run: sudo apt-get install graphviz
if: ${{ runner.os == 'Linux' }}
- name: Install wheel (Linux)
run: |
python -m pip install -U *manylinux*.whl
python -m pip install -U --no-deps *manylinux*.whl --target .
if: ${{ runner.os == 'Linux' }}
########
# Macos
- name: Install test dependencies (Mac)
shell: bash
run: brew install graphviz
if: ${{ runner.os == 'macOS' }}
- name: Install wheel (OSX x86)
run: |
python -m pip install -U *x86*.whl
python -m pip install -U --no-deps *x86*.whl --target .
if: ${{ runner.os == 'macOS' && runner.arch == 'X64' }}
- name: Install wheel (OSX arm)
run: |
python -m pip install -U *arm64*.whl
python -m pip install -U --no-deps *arm64*.whl --target .
if: ${{ runner.os == 'macOS' && runner.arch == 'ARM64' }}
########
# Windows
- name: Install test dependencies (Windows)
run: choco install graphviz --no-progress -y
if: ${{ runner.os == 'Windows' }}
- name: Install wheel (windows)
run: |
python -m pip install -U (Get-ChildItem .\*.whl | Select-Object -Expand FullName)
python -m pip install -U --no-deps (Get-ChildItem .\*.whl | Select-Object -Expand FullName) --target .
if: ${{ runner.os == 'Windows' }}
##########
# Common
- name: Python Test Steps
run: make test
################################################################
#..............................................................#
#..|########|..|########|..../####\....|########|..............#
#..|########|..|##|......../##/..\##\..|########|..............#
#.....|##|.....|##|.........\##\..........|##|.................#
#.....|##|.....|########|.....\##\........|##|.................#
#.....|##|.....|##|.............\##\......|##|.................#
#.....|##|.....|##|........\##\../##/.....|##|.................#
#.....|##|.....|########|...\####/........|##|.................#
#..............................................................#
#..../####\....|#######\...|########|..../####\....|########|..#
#../##/..\##\..|##|..\##\.....|##|...../##/..\##\..|########|..#
#...\##\.......|##|..|##|.....|##|......\##\..........|##|.....#
#.....\##\.....|##|..|##|.....|##|........\##\........|##|.....#
#.......\##\...|##|..|##|.....|##|..........\##\......|##|.....#
#..\##\./##/...|##|../##/.....|##|.....\##\./##/......|##|.....#
#...\####/.....|#######/...|########|...\####/........|##|.....#
#..............................................................#
################################################################
# Stage Four - Build / test the SDist #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
test_sdist:
needs:
- initialize
- build_sdist
strategy:
matrix:
os:
- ubuntu-24.04
python-version:
- 3.9
runs-on: ${{ matrix.os }}
if: ${{ needs.initialize.outputs.FULL_RUN == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Set up Caches
uses: ./.github/actions/setup-caches
- name: Install python dependencies
run: make requirements
- uses: actions/download-artifact@v4
with:
name: csp-sdist
path: dist/
- name: Install sdist
run: |
python -m pip install -U -vvv dist/csp*.tar.gz
python -m pip install -U --no-deps -vvv dist/csp*.tar.gz --target .
env:
CCACHE_DIR: /home/runner/work/csp/csp/.ccache
VCPKG_DEFAULT_BINARY_CACHE: /home/runner/vcpkg_cache
VCPKG_DOWNLOADS: /home/runner/vcpkg_download_cache
- name: Run tests against from-scratch sdist build
run: make test
env:
CSP_TEST_SKIP_EXAMPLES: "1"
####################################################
#..................................................#
#..|########|..|########|..../####\....|########|..#
#..|########|..|##|......../##/..\##\..|########|..#
#.....|##|.....|##|.........\##\..........|##|.....#
#.....|##|.....|########|.....\##\........|##|.....#
#.....|##|.....|##|.............\##\......|##|.....#
#.....|##|.....|##|........\##\../##/.....|##|.....#
#.....|##|.....|########|...\####/........|##|.....#
#..................................................#
#..|#######\...|########|..|########\..../####\....#
#..|##|..\##\..|##|........|##|../##/../##/..\##\..#
#..|##|..|##|..|##|........|##|./##/....\##\.......#
#..|##|..|##|..|########|..|##||##/.......\##\.....#
#..|##|..|##|..|##|........|##|.............\##\...#
#..|##|../##/..|##|........|##|........\##\../##/..#
#..|#######/...|########|..|##|.........\####/.....#
#..................................................#
####################################################
# Test Dependencies/Regressions #
####################################################
test_dependencies:
needs:
- initialize
- build
strategy:
matrix:
os:
- ubuntu-20.04
python-version:
- 3.9
package:
- "sqlalchemy>=2"
- "sqlalchemy<2"
- "numpy==1.19.5"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: ./.github/actions/setup-python
with:
version: '${{ matrix.python-version }}'
- name: Install python dependencies
run: make requirements
- name: Install test dependencies
shell: bash
run: sudo apt-get install graphviz
- name: Download wheel
uses: actions/download-artifact@v4
with:
name: csp-dist-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}
- name: Install wheel
run: |
python -m pip install -U *manylinux*.whl
python -m pip install -U --no-deps *manylinux*.whl --target .
- name: Install package - ${{ matrix.package }}
run: python -m pip install -U "${{ matrix.package }}"
- name: Python Test Steps
run: make test TEST_ARGS="-k TestDBReader"
if: ${{ contains( 'sqlalchemy', matrix.package )}}
- name: Python Test Steps
run: make test
if: ${{ contains( 'numpy', matrix.package )}}
###########################################################################################################
#.........................................................................................................#
#..|########|..|########|..../####\....|########|.........................................................#
#..|########|..|##|......../##/..\##\..|########|.........................................................#
#.....|##|.....|##|.........\##\..........|##|............................................................#
#.....|##|.....|########|.....\##\........|##|............................................................#
#.....|##|.....|##|.............\##\......|##|............................................................#
#.....|##|.....|##|........\##\../##/.....|##|............................................................#
#.....|##|.....|########|...\####/........|##|............................................................#
#.........................................................................................................#
#...../#####\.....|#######\....../#####\.....|########\..|########|..|########|..|########\...../####\....#
#..../##/.\##\....|##|..\##\..../##/.\##\....|##|../##/..|########|..|##|........|##|../##/.../##/..\##\..#
#.../##/...\##\...|##|..|##|.../##/...\##\...|##|./##/......|##|.....|##|........|##|./##/.....\##\.......#
#../###########\..|##|..|##|../###########\..|##||##/.......|##|.....|########|..|##||##<........\##\.....#
#..|##|.....|##|..|##|..|##|..|##|.....|##|..|##|...........|##|.....|##|........|##|.\##\.........\##\...#
#..|##|.....|##|..|##|../##/..|##|.....|##|..|##|...........|##|.....|##|........|##|..\##\...\##\../##/..#
#..|##|.....|##|..|#######/...|##|.....|##|..|##|...........|##|.....|########|..|##|...\##\...\####/.....#
#.........................................................................................................#
###########################################################################################################
# Test Service Adapters #
###########################################################################################################
# Coming soon!
############################################################################################
#..........................................................................................#
#..|########\...|########|..|##|........|########|...../#####\......./####\....|########|..#
#..|##|../##/...|##|........|##|........|##|........../##/.\##\..../##/..\##\..|##|........#
#..|##|./##/....|##|........|##|........|##|........./##/...\##\....\##\.......|##|........#
#..|##||##<.....|########|..|##|........|########|../###########\.....\##\.....|########|..#
#..|##|.\##\....|##|........|##|........|##|........|##|.....|##|.......\##\...|##|........#
#..|##|..\##\...|##|........|########|..|##|........|##|.....|##|..\##\./##/...|##|........#
#..|##|...\##\..|########|..|########|..|########|..|##|.....|##|...\####/.....|########|..#
#..........................................................................................#
############################################################################################
# Upload Release Artifacts #
############################################################################################
# only publish artifacts on tags, but otherwise this always runs
# Note this whole workflow only triggers on release tags (e.g. "v0.1.0")
publish_release_artifacts:
# build must complete and all tests must pass
# before release artifacts can be uploaded
needs:
- build_sdist
- build
- test
- test_sdist
- test_dependencies
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-24.04
steps:
- name: Download wheels and sdist
uses: actions/download-artifact@v4
with:
name:
merge-multiple: true
path: ./dist
- name: Display structure of downloaded files
run: ls -R ./dist
- name: Publish to github releases
uses: softprops/action-gh-release@v2
with:
draft: true
generate_release_notes: true
files: dist/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}