Build wheels #485
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: Build wheels | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
schedule: | |
- cron: '0 0 * * 0,3' # 2/weekly | |
jobs: | |
build_wheels: | |
name: ${{ matrix.os }}, Python ${{ matrix.python }} | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
fail-fast: false | |
matrix: | |
python: [cp39, cp310, cp311, cp312] | |
os: [ubuntu-latest, windows-latest, macOS-latest] | |
env: | |
BUILD_COMMIT: "main" # or a specific version, e.g., v0.13.1 | |
CIBW_BUILD: ${{ matrix.python }}-* | |
CIBW_ARCHS_LINUX: "x86_64 aarch64" | |
CIBW_ARCHS_MACOS: "x86_64 arm64" | |
# No support for pypy, musl, Win32 for 3.10+ | |
# Skip musl for 3.8 and 3.9 since no upstream wheels | |
CIBW_SKIP: "pp* *-win32 cp38-musllinux* cp39-musllinux* *musllinux_aarch64*" | |
CIBW_TEST_REQUIRES: pytest pytest-xdist | |
CIBW_TEST_COMMAND: python -c "import statsmodels; statsmodels.test(['--skip-examples','--skip-slow','-n','2'])" | |
# Avoid testing on emulated architectures | |
CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x}" | |
CIBW_REPAIR_WHEEL_COMMAND_LINUX: 'auditwheel repair --strip -w {dest_dir} {wheel}' | |
MULTIBUILD_WHEELS_STAGING_ACCESS: ${{ secrets.MULTIBUILD_WHEELS_STAGING_ACCESS }} | |
SCIENTIFIC_PYTHON_NIGHTLY_WHEELS: ${{ secrets.SCIENTIFIC_PYTHON_NIGHTLY_WHEELS }} | |
MKL_NUM_THREADS: 1 | |
OMP_NUM_THREADS: 1 | |
OPENLAS_NUM_THREADS: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
# Used to host cibuildwheel | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Set up QEMU | |
if: runner.os == 'Linux' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: all | |
- name: Install cibuildwheel | |
run: python -m pip install cibuildwheel==2.16.2 | |
- name: Build wheels | |
run: | | |
python -m cibuildwheel --output-dir wheelhouse statsmodels | |
env: | |
CIBW_BEFORE_BUILD: 'git submodule foreach git checkout ${{ env.BUILD_COMMIT }}' | |
- name: Setup Upload Variables | |
if: ${{ always() }} | |
shell: bash | |
run: | | |
if [ "schedule" == "${{ github.event_name }}" ] || [ "push" == "${{ github.event_name }}" ]; then | |
echo "ANACONDA_UPLOAD=true" >> $GITHUB_ENV | |
else | |
echo "ANACONDA_UPLOAD=false" >> $GITHUB_ENV | |
fi | |
if [ "schedule" == "${{ github.event_name }}" ] || [ "main" == "$BUILD_COMMIT" ]; then | |
echo "ANACONDA_ORG=scientific-python-nightly-wheels" >> $GITHUB_ENV | |
echo "TOKEN=$SCIENTIFIC_PYTHON_NIGHTLY_WHEELS" >> $GITHUB_ENV | |
else | |
echo "ANACONDA_ORG=multibuild-wheels-staging" >> $GITHUB_ENV | |
echo "TOKEN=$MULTIBUILD_WHEELS_STAGING_ACCESS" >> $GITHUB_ENV | |
fi | |
- name: Upload wheels | |
if: ${{ always() }} | |
shell: bash | |
run: | | |
# trigger an upload to the shared ecosystem | |
# infrastructure at: https://anaconda.org/scientific-python-nightly-wheels | |
# for cron jobs only (restricted to main branch once | |
# per week) | |
# SCIENTIFIC_PYTHON_NIGHTLY_WHEELS is a secret token | |
# used in Travis CI config, originally | |
# | |
# for merges (push events) we use the staging area instead; | |
# MULTIBUILD_WHEELS_STAGING_ACCESS is a secret token used in Travis | |
# CI config, originally generated at anaconda.org for | |
# multibuild-wheels-staging | |
# generated at anaconda.org for scientific-python-nightly-wheels | |
echo ${PWD} | |
if [ ${ANACONDA_UPLOAD} == true ]; then | |
# main branches of these two packages | |
python --version | |
python -m pip install "cython<3" | |
python -m pip list | |
python -m pip install git+https://github.com/bashtage/clyent.git | |
python -m pip install git+https://github.com/Anaconda-Server/anaconda-client.git | |
python -m pip install "urllib3>=1.21.1,<2" | |
ls ./wheelhouse/*.whl | |
anaconda -t ${TOKEN} upload --force -u ${ANACONDA_ORG} ./wheelhouse/*.whl | |
echo "PyPI-style index: https://pypi.anaconda.org/$ANACONDA_ORG/simple" | |
fi |