Skip to content

v0.1.1

v0.1.1 #2

Workflow file for this run

name: Build wheels and publish to PyPI
on:
release:
types: [published]
jobs:
check_tag:
name: Check tag
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- shell: bash
run: |
TAG="${{ github.event.release.tag_name }}"
GH_TAG_NAME="${TAG#v}"
PY_VERSION=$(python - <<'PY'
import pathlib, tomllib
data = tomllib.loads(pathlib.Path("pyproject.toml").read_text(encoding="utf-8"))
print(data.get("project").get("version"))
PY
)
if [ "${GH_TAG_NAME}" != "${PY_VERSION}" ]; then
echo "::error::Tag (${GH_TAG_NAME}) does not match pyproject.toml version (${PY_VERSION})."
exit 2
fi
build_wheels:
needs: check_tag
name: Build wheels
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Build wheel and sdist
run: |
python -m pip install build
python -m build --wheel --sdist --outdir wheelhouse
- name: Store wheels
uses: actions/upload-artifact@v5
with:
name: wheels
path: wheelhouse/*
test_wheels:
needs: build_wheels
name: Test wheels on ${{ matrix.os }} with ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ["3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Set execute permission for OSX install script
if: runner.os == 'macOS'
run: chmod +x .github/scripts/install_osx_dependencies.sh
- name: Install OSX packages
if: runner.os == 'macOS'
shell: bash
run: ./.github/scripts/install_osx_dependencies.sh
- name: Force non-GUI Matplotlib backend (Windows)
if: ${{ matrix.os == 'windows-latest' }}
shell: pwsh
run: echo "MPLBACKEND=Agg" >> $env:GITHUB_ENV
- name: Force non-GUI Matplotlib backend (macOS)
if: ${{ matrix.os == 'macos-latest' }}
shell: bash
run: echo "MPLBACKEND=Agg" >> $GITHUB_ENV
- uses: actions/download-artifact@v5
with:
name: wheels
path: wheelhouse
- name: Get wheel filename (Unix)
if: runner.os != 'Windows'
run: echo "WHEELNAME=$(ls ./wheelhouse/hypertrees_forecasting-*none-any.whl)" >> $GITHUB_ENV
- name: Get wheel filename (Windows)
if: runner.os == 'Windows'
run: echo "WHEELNAME=$(Get-ChildItem ./wheelhouse/hypertrees_forecasting-*none-any.whl)" >> $env:GITHUB_ENV
- name: Install wheel and test extras
run: python -m pip install "${{ env.WHEELNAME }}[test]"
- name: Force CPU-only torch (avoid pulling CUDA wheels in CI)
run: python -m pip install --force-reinstall --no-deps torch --extra-index-url https://download.pytorch.org/whl/cpu
- name: Run tests
run: |
python -m pytest
upload_wheels:
name: Upload wheels to PyPI
runs-on: ubuntu-latest
needs: [build_wheels, test_wheels]
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v5
with:
name: wheels
path: wheelhouse
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: wheelhouse/