Skip to content

Fix/fix mutable

Fix/fix mutable #6

Workflow file for this run

name: Build Wheels
on:
workflow_dispatch:
pull_request:
push:
tags:
- "v*.*.*"
jobs:
build_sdist:
name: "sdist"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install poetry
uses: snok/install-poetry@v1
- name: Build sdist
run: |
poetry self add "poetry-dynamic-versioning[plugin]"
poetry build --format=sdist
- uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist/*.tar.gz
build_wheels_windows:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["AMD64", "x86", "ARM64"]
exclude:
- os: windows-latest
cibw_build: "cp38-*"
cibw_archs: "ARM64"
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
architecture: ${{ matrix.cibw_archs == 'x86' && 'x86' || 'x64' }}
# Install Visual Studio Build Tools
- name: Install Visual Studio Build Tools
shell: powershell
run: |
# Download the Visual Studio Build Tools bootstrapper
Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_buildtools.exe -OutFile vs_buildtools.exe
# Install Build Tools with required components
Start-Process -FilePath .\vs_buildtools.exe -ArgumentList `
"--quiet", "--wait", "--norestart", "--nocache", `
"--installPath", "C:\BuildTools", `
"--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", `
"--add", "Microsoft.VisualStudio.Component.Windows10SDK.19041", `
"--add", "Microsoft.VisualStudio.Component.VC.14.29.CLI.Support", `
"--add", "Microsoft.VisualStudio.Component.VC.14.29.ARM64", `
"--add", "Microsoft.VisualStudio.Component.VC.Redist.14.Latest", `
"--add", "Microsoft.VisualStudio.Component.Windows11SDK.22621" `
-Wait -PassThru
# Set up Visual Studio environment
- name: Set up Visual Studio environment
shell: powershell
run: |
$arch = "${{ matrix.cibw_archs }}"
$vsPath = "C:\BuildTools"
$vcvarsall = "$vsPath\VC\Auxiliary\Build\vcvarsall.bat"
# Create a batch file to set up environment
@"
@echo off
call "$vcvarsall" $($arch.ToLower()) || exit /b 1
set > %TEMP%\vcvars.txt
"@ | Out-File -FilePath setup_env.bat -Encoding ASCII
# Run the batch file and import environment variables
cmd /c "setup_env.bat && set > %TEMP%\vcvars.txt"
Get-Content "$env:TEMP\vcvars.txt" | ForEach-Object {
if ($_ -match '^([^=]+)=(.*)$') {
$name = $matches[1]
$value = $matches[2]
[System.Environment]::SetEnvironmentVariable($name, $value)
}
}
# Verify compiler is available
Write-Host "Checking cl.exe..."
where.exe cl.exe
if ($LASTEXITCODE -ne 0) {
Write-Host "cl.exe not found in PATH!"
exit 1
}
- name: Install poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: false
virtualenvs-in-project: false
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_SKIP: "*-win_arm64"
CIBW_TEST_REQUIRES: pytest pandas
CIBW_TEST_COMMAND: |
dir /s {package}
python -c "import sys; print('Python:', sys.executable, sys.version)"
python -c "import platform; print('Platform:', platform.machine(), platform.architecture())"
python -c "import os; print('PATH:', os.environ.get('PATH'))"
python -c "import newtype; print('newtype location:', newtype.__file__)"
pytest {package}/tests -v
CIBW_BEFORE_BUILD: |
python -m pip install --upgrade pip
python -m pip install setuptools wheel
python -m pip install poetry-core
python -m pip list
where cl.exe
CIBW_BUILD_VERBOSITY: 3
CIBW_ENVIRONMENT: |
DISTUTILS_USE_SDK=1
MSSdk=1
PYTHONVERBOSITY=1
VS160COMNTOOLS="C:\BuildTools\Common7\Tools"
VSCMD_ARG_TGT_ARCH=${{ matrix.cibw_archs == 'x86' && 'x86' || (matrix.cibw_archs == 'ARM64' && 'arm64' || 'x64') }}
VCVARSALL_ARCH=${{ matrix.cibw_archs == 'x86' && 'x86' || (matrix.cibw_archs == 'ARM64' && 'arm64' || 'amd64') }}
PY_VCRUNTIME_REDIST=true
_PYTHON_HOST_PLATFORM=win-${{ matrix.cibw_archs == 'x86' && '32' || '64' }}
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
path: wheelhouse/*.whl
build_wheels_linux:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["x86_64", "i686", "aarch64", "ppc64le"]
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
if: matrix.cibw_archs != 'x86_64'
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: false
virtualenvs-in-project: false
# Add system dependencies
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3-dev patchelf
sudo apt-get install -y gcc g++ gfortran
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_REQUIRES: pytest pandas
CIBW_TEST_COMMAND: |
python -c "import sys; print('Python:', sys.version)"
python -c "import platform; print('Platform:', platform.machine(), platform.architecture())"
python -c "import os; print('PATH:', os.environ.get('PATH'))"
python -c "import glob; print('SO files:', glob.glob('/project/**/*.so', recursive=True))"
python -c "import newtype; print('newtype location:', newtype.__file__)"
python -c "from newtype.extensions import newtypeinit; print('newtypeinit exists')"
pytest /project/tests -v
CIBW_BEFORE_BUILD: |
python -m pip install --upgrade pip
python -m pip install setuptools wheel
python -m pip install poetry-core
python -m pip list
python -c "import sys; print('Python location:', sys.executable)"
python -c "import sysconfig; print('Platform:', sysconfig.get_platform())"
CIBW_REPAIR_WHEEL_COMMAND_LINUX: |
echo "=== System Information ==="
uname -a
cat /etc/os-release
echo "=== Wheel Information ==="
ls -l {wheel}
unzip -l {wheel}
echo "=== Original Wheel Dependencies ==="
auditwheel show {wheel}
find . -name "*.so" -exec ldd {} \; 2>/dev/null || true
echo "=== Repairing Wheel ==="
auditwheel repair -w {dest_dir} {wheel} || cp {wheel} {dest_dir}/
echo "=== Final Wheel Dependencies ==="
auditwheel show {dest_dir}/*.whl
CIBW_BUILD_VERBOSITY: 3
CIBW_ENVIRONMENT: |
PYTHONVERBOSE=1
CFLAGS="-v -fPIC"
LDFLAGS="-v"
LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
PYTHONPATH="/usr/local/lib/python3/dist-packages:$PYTHONPATH"
SETUPTOOLS_USE_DISTUTILS=stdlib
_PYTHON_HOST_PLATFORM="linux-${{ matrix.cibw_archs }}"
- name: Debug wheel contents
run: |
echo "=== Listing wheelhouse contents ==="
ls -R wheelhouse/
echo "=== Examining wheel files ==="
for whl in wheelhouse/*.whl; do
echo "=== Contents of $whl ==="
unzip -l "$whl"
echo "=== Extracting wheel to check SO files ==="
TMP_DIR=$(mktemp -d)
unzip -d "$TMP_DIR" "$whl"
echo "=== SO files in wheel ==="
find "$TMP_DIR" -name "*.so" -ls
echo "=== SO file dependencies ==="
find "$TMP_DIR" -name "*.so" -exec ldd {} \; 2>/dev/null || true
done
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ matrix.cibw_build }}-${{ matrix.cibw_archs }}
path: wheelhouse/*.whl
build_wheels_macos:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-13]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["x86_64"]
env:
SYSTEM_VERSION_COMPAT: 0
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install poetry
uses: snok/install-poetry@v1
with:
version: 1.8.5
virtualenvs-create: false
virtualenvs-in-project: false
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_REQUIRES: pytest pandas
CIBW_TEST_COMMAND: |
ls -la {package}
ls -la {package}/newtype/extensions/
python -c "import sys; print('Python:', sys.executable, sys.version)"
python -c "import platform; print('Platform:', platform.machine(), platform.architecture())"
python -c "import os; print('PATH:', os.environ.get('PATH'))"
python -c "import glob; print('SO files:', glob.glob('{package}/**/*.so', recursive=True))"
python -c "import newtype; print('newtype location:', newtype.__file__)"
python -c "from newtype.extensions import newtypeinit; print('newtypeinit exists')"
pytest {package}/tests -v
CIBW_BEFORE_BUILD: |
python -m pip install --upgrade pip
python -m pip install setuptools wheel
python -m pip install poetry-core
python -m pip list
CIBW_REPAIR_WHEEL_COMMAND: |
echo "=== Wheel Contents Before Repair ==="
unzip -l {wheel}
delocate-listdeps --all {wheel}
echo "=== Running delocate-wheel ==="
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
echo "=== Wheel Contents After Repair ==="
unzip -l {dest_dir}/*.whl
echo "=== Checking SO files ==="
find {dest_dir} -name "*.so" -exec otool -L {} \;
CIBW_BUILD_VERBOSITY: 3
CIBW_ENVIRONMENT: |
MACOSX_DEPLOYMENT_TARGET=10.14
ARCHFLAGS="-arch x86_64"
PYTHONVERBOSE=1
CFLAGS="-v -arch x86_64"
LDFLAGS="-v -arch x86_64"
_PYTHON_HOST_PLATFORM="macosx-10.14-x86_64"
SETUPTOOLS_USE_DISTUTILS=stdlib
DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
DYLD_PRINT_LIBRARIES=1
DYLD_PRINT_LIBRARIES_POST_LAUNCH=1
- name: Debug wheel contents
run: |
echo "=== Listing wheelhouse contents ==="
ls -R wheelhouse/
echo "=== Examining wheel files ==="
for whl in wheelhouse/*.whl; do
echo "=== Contents of $whl ==="
unzip -l "$whl"
echo "=== Extracting wheel to check SO files ==="
TMP_DIR=$(mktemp -d)
unzip -d "$TMP_DIR" "$whl"
echo "=== SO files in wheel ==="
find "$TMP_DIR" -name "*.so" -ls
echo "=== SO file dependencies ==="
find "$TMP_DIR" -name "*.so" -exec otool -L {} \;
done
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
path: wheelhouse/*.whl
build_wheels_macos_arm64:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-13]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_archs: ["arm64"]
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Sanitize matrix.cibw_build
id: sanitize_build
run: echo "CIBW_BUILD_SANITIZED=$(echo '${{ matrix.cibw_build }}' | sed 's/\*/_/g')" >> $GITHUB_ENV
shell: bash
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
env:
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_TEST_SKIP: "*-macosx_arm64"
CIBW_TEST_REQUIRES: pytest
CIBW_TEST_COMMAND: pytest {package}/tests
CIBW_REPAIR_WHEEL_COMMAND: |
echo "Target delocate archs: {delocate_archs}"
ORIGINAL_WHEEL={wheel}
echo "Running delocate-listdeps to list linked original wheel dependencies"
delocate-listdeps --all $ORIGINAL_WHEEL
echo "Renaming .whl file when architecture is 'macosx_arm64'"
RENAMED_WHEEL=${ORIGINAL_WHEEL//x86_64/arm64}
echo "Wheel will be renamed to $RENAMED_WHEEL"
mv $ORIGINAL_WHEEL $RENAMED_WHEEL
echo "Running delocate-wheel command on $RENAMED_WHEEL"
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v $RENAMED_WHEEL
echo "Running delocate-listdeps to list linked wheel dependencies"
WHEEL_SIMPLE_FILENAME="${RENAMED_WHEEL##*/}"
delocate-listdeps --all {dest_dir}/$WHEEL_SIMPLE_FILENAME
echo "DONE."
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}-${{ env.CIBW_BUILD_SANITIZED }}-${{ matrix.cibw_archs }}
path: ./wheelhouse/*.whl
upload_to_pypi:
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v')
needs:
[
"build_sdist",
"build_wheels_windows",
"build_wheels_linux",
"build_wheels_macos",
"build_wheels_macos_arm64",
]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
path: wheels
pattern: wheels-*
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_TOKEN }}
packages_dir: wheels/
skip_existing: true