Skip to content

feat(build): add ci wheel packaging#10

Merged
Emin017 merged 18 commits intomainfrom
emin/feat-ci-wheel-packaging
Apr 20, 2026
Merged

feat(build): add ci wheel packaging#10
Emin017 merged 18 commits intomainfrom
emin/feat-ci-wheel-packaging

Conversation

@Emin017
Copy link
Copy Markdown
Collaborator

@Emin017 Emin017 commented Apr 17, 2026

Summary

  • Add CI and release workflows to the ecc-tools repo for automated manylinux wheel packaging
  • The wheel bundles the ecc_py pybind11 binding (.so) with its shared library dependencies via auditwheel repair, producing a self-contained ecc_tools wheel published to GitHub Releases
  • This mirrors the approach already in place for ecc-dreamplace, completing the shift from "build from source in ecc CI" to "install pre-built wheel from GitHub Releases" for both native thirdparty tools

Motivation

Previously, the ecc CI had to clone the full ecc-tools repo, install system-level build dependencies (CMake, Ninja, GCC 10+, Rust toolchain, etc.), and compile from source on every run. This was slow (~15 min+), fragile, and tightly coupled the two repos.

With this change, ecc CI simply does uv pip install --no-deps — matching the pattern established by ecc-dreamplace. Both native EDA tool dependencies are now pre-built wheels, reducing ecc CI setup to seconds and decoupling the build lifecycle.

Emin017 and others added 16 commits April 17, 2026 15:37
Match the format used in the ecc main repo pyproject.toml — source-exclude
and wheel-exclude are arrays, not sub-tables with a patterns key.
Signed-off-by: Emin <me@emin.chat>
CMakeLists.txt sets CMAKE_RUNTIME_OUTPUT_DIRECTORY to ${PROJECT_SOURCE_DIR}/bin,
so the linked ecc_py .so ends up in bin/ rather than build/.
Signed-off-by: Emin <me@emin.chat>
Extract die/require_cmd helpers, remove decorative banners,
use idiomatic bash patterns for error handling.
Signed-off-by: Emin <me@emin.chat>
scripts/ is gitignored (upstream iEDA runtime data), so CI scripts
don't belong there. Also narrow .gitignore rule from `scripts` to
`/scripts` to avoid ignoring .github/scripts/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
.github/scripts/ is two levels below repo root, not one.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces Python wheel packaging and GitHub Actions workflows to build and publish a self-contained manylinux wheel for ecc-tools, bundling the ecc_py pybind11 extension and its shared-library dependencies via auditwheel.

Changes:

  • Add pyproject.toml using uv_build to produce a wheel containing ecc_tools_bin artifacts.
  • Add CI workflow to build (and artifact-upload) a repaired manylinux wheel.
  • Add Release workflow + composite action + build script to build/repair/smoke-test and publish wheel artifacts to GitHub Releases.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pyproject.toml Defines uv-based wheel build configuration and dev dependency group.
ecc_tools_bin/__init__.py Adds minimal package init for importing ecc_py.
.gitignore Adjusts ignore rule to avoid ignoring .github/scripts.
.github/workflows/release.yml Builds wheel on tag/dispatch and publishes GitHub Release with artifacts.
.github/workflows/ci.yml Builds wheel on PR/main and uploads artifacts.
.github/scripts/build-wheel.sh Implements build → uv wheel → auditwheel repair → smoke test → checksums.
.github/actions/build-wheel/action.yml Composite action to provision deps and execute the build script.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyproject.toml
Comment thread .github/workflows/release.yml
Comment thread .github/workflows/release.yml
Comment thread .github/actions/build-wheel/action.yml
Emin017 and others added 2 commits April 20, 2026 11:07
uv sync installs auditwheel into .venv/bin/ which is not on the
default PATH. Append it via $GITHUB_PATH after uv sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
workflow_dispatch provides a tag_name but checkout defaulted to the
repo's default branch, risking a mismatch between built wheel and
published tag. Use inputs.tag_name when available, fall back to
github.ref for tag-push triggers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Emin017 Emin017 merged commit b9b852d into main Apr 20, 2026
1 check passed
@Emin017 Emin017 deleted the emin/feat-ci-wheel-packaging branch April 20, 2026 03:19
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.

2 participants