Skip to content

build

build #87

Workflow file for this run

# https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml
# except no Windows
name: build
# Build on every branch push, tag push, and pull request change:
on: [push, pull_request]
# Alternatively, to publish when a (published) GitHub Release is created, use the following:
# on:
# push:
# pull_request:
# release:
# types:
# - published
jobs:
build_and_test:
name: Build executable and run test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: |
mkdir build
cd build
cmake ..
make -j
- name: Test
run: |
cd build
ctest --no-tests=error --output-on-failure
- uses: actions/upload-artifact@v4
with:
name: executable
path: ./build/executable/dbscan
generate_matrix:
name: Generate Matrix
runs-on: ubuntu-latest
outputs:
OSES: ${{ steps.development.outputs.OSES || steps.production.outputs.OSES }}
CIBW_ARCHS_LINUX: ${{ steps.development.outputs.CIBW_ARCHS_LINUX || steps.production.outputs.CIBW_ARCHS_LINUX }}
steps:
- name: Development
id: development
if: "!startsWith(github.ref, 'refs/tags/v')"
run: |
echo 'OSES=["ubuntu-latest"]' >> $GITHUB_OUTPUT
echo 'CIBW_ARCHS_LINUX="auto"' >> $GITHUB_OUTPUT
- name: Production
id: production
if: startsWith(github.ref, 'refs/tags/v')
run: |
echo 'OSES=["ubuntu-latest", "macos-latest"]' >> $GITHUB_OUTPUT
echo 'CIBW_ARCHS_LINUX="auto aarch64"' >> $GITHUB_OUTPUT
build_wheels:
needs: [generate_matrix]
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v')
strategy:
matrix:
os: ${{ fromJson(needs.generate_matrix.outputs.OSES) }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/v')
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS_MACOS: "x86_64 arm64"
CIBW_ARCHS_LINUX: ${{ fromJson(needs.generate_matrix.outputs.CIBW_ARCHS_LINUX) }}
CIBW_TEST_REQUIRES: "pytest scikit-learn"
CIBW_BEFORE_BUILD: "pip install numpy>=2.0.0"
CIBW_TEST_COMMAND: "pytest {package}/test"
CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-*"
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build sdist
run: pipx run build --sdist
- uses: actions/upload-artifact@v4
with:
name: sdist
path: ./dist/*.tar.gz
upload_pypi:
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
# upload to PyPI on every tag starting with 'v'
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
# 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: wheels-ubuntu-latest
path: dist/wheels
- uses: actions/download-artifact@v4
with:
name: wheels-macos-latest
path: dist/wheels
- uses: actions/download-artifact@v4
with:
name: sdist
path: dist/sdist
- name: Combine artifacts for PyPI upload
run: |
mv dist/wheels/* dist/
mv dist/sdist/* dist/
rm -rf dist/wheels dist/sdist
- uses: pypa/[email protected]
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
# To test: repository_url: https://test.pypi.org/legacy/