Fix/fix mutable #6
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 | |
| 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 |