Skip to content

ci: multi-platform Python wheel builds with Conan, uv, and setuptools-scm#4

Merged
guzman109 merged 18 commits intoICICLE-ai:mainfrom
guzman109:main
Feb 26, 2026
Merged

ci: multi-platform Python wheel builds with Conan, uv, and setuptools-scm#4
guzman109 merged 18 commits intoICICLE-ai:mainfrom
guzman109:main

Conversation

@guzman109
Copy link
Contributor

CI: Multi-platform wheel builds with Conan + scikit-build-core

What

  • Build wheels for Python 3.9–3.14 across Linux x86_64, Linux aarch64, and macOS arm64
  • Publish to PyPI on GitHub release, attach native binaries to release page
  • Dynamic versioning from git tags via setuptools-scm

How

  • Plain Ubuntu/macOS runners (no manylinux containers, no cibuildwheel)
  • Conan for C++ deps (AWS SDK S3, Azure Storage, OpenSSL, curl, HDF5)
  • scikit-build-core drives CMake, --no-build-isolation to preserve toolchain paths
  • auditwheel / delocate repairs wheels for PyPI compliance
  • Conan packages cached per platform — shared across all Python versions

Why not cibuildwheel/manylinux?

Conan's dependency resolution pulls in xorg/alsa through AWS SDK transitive deps, which don't exist in manylinux containers. Building on plain Ubuntu with auditwheel repair for manylinux tagging avoids this entirely.

Testing

  • Linux x86_64 ✅
  • Linux aarch64 ✅
  • macOS arm64 ✅
  • PyPI publish (will test on first release)

guzman109 and others added 18 commits February 13, 2026 15:36
Conan is used as package manager. CmakeLists were cleaned up. Separated
files into /include & /src.
Excludes build artifacts, Conan generated files, Python bytecode,
distribution packages, secrets, and editor configs.
Removes accidentally tracked local conda package from
arraymorph_channel/.
- Build on ubuntu-latest/macos-latest directly
- uv for Python setup, installs, build, and publish
- scikit-build-core with --no-build-isolation to preserve toolchain
paths
- Dynamic toolchain discovery (handles cmake_layout output paths)
- auditwheel/delocate repair wheels for PyPI manylinux compliance
- Slim AWS SDK to S3-only, move Azure options to configure()
…s steps

- Pre-install X11 and ALSA dev packages (AWS SDK transitive deps)
- Enable sudo for Conan system package manager
- Use GITHUB_PATH instead of source activate for venv persistence
…s-scm

- Build wheels for 18 targets (3 platforms × 6 Python versions)
- Cache Conan packages per platform, shared across Python versions
- Publish to TestPyPI and smoke test before pushing to real PyPI
- Dynamic versioning from git tags via setuptools-scm
- Rename lib_array_morph → lib_arraymorph
ci: add Python 3.9-3.14 matrix, Conan cache, TestPyPI gate, setuptool…
@guzman109 guzman109 merged commit c6762f1 into ICICLE-ai:main Feb 26, 2026
44 of 45 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant