Workflow file for this run
This file contains hidden or 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: 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/ |