Skip to content

feat(build): wheels of locked addons with content-derived versions - #35

Merged
bosd merged 2 commits into
mainfrom
feat/build
Oct 13, 2026
Merged

bosd merged 2 commits into
mainfrom
feat/build

Conversation

@bosd

@bosd bosd commented Oct 13, 2026

Copy link
Copy Markdown
Member

Phase 5: odx build [--publish] [--index] [--addon GLOB] [--project] [--out-dir].

  • Sources: selected addons of every locked repository (from the locked result tree), every locked package (from its commit and subdirectory), and with --project the project's addons from the committed HEAD; all exported from git, so builds never see uncommitted changes. An addon that comes from two sources is refused.
  • Build: uv build --wheel with the addon's backend (a default whool pyproject.toml when it has none), SOURCE_DATE_EPOCH and WHOOL_POST_VERSION_STRATEGY_OVERRIDE=none; the scratch directory is made its own git repository with everything staged, because whool lists files with git when inside a repository.
  • Version: <version>+odx.<tree12> (+odx.pr<N>.<tree12> for PR packages). Deviation from the design note: the label uses the addon directory's git tree instead of the result commit. It is equally content-derived, identical on every machine (result commits carry timestamps), and per addon, so untouched addons keep their version. odx_platform::wheel::retag rewrites dist-info, METADATA and RECORD with fixed timestamps.
  • Lock: [wheels.<dist>] in odx.lock (version, sha256, index, source, tree); render/parse fixed point, tree validated.
  • Publish: uv publish --index <name>; index from --index, [tool.odx.platform] index, else private; must be a [[tool.uv.index]]; PyPI refused.
  • odx verify --installed reports an installed version that differs from the built one.
  • Merger::object resolves <rev>:<path>.
  • Tried for real: odx lock + odx build of OCA web_responsive 18.0 from a local clone, built by whool: 18.0.1.0.3+odx.0dfc9a0d7a69, identical sha256 on a second build; the wheel installs with uv and reports that version. The real-uv CI test builds the locked packages twice and compares.
  • Not yet: --sbom; pointing dependency groups at published versions.

odx build exports every selected addon of the locked repositories, every
locked package and, with --project, the project's own addons from the git
cache, builds each with uv build and its backend (whool when none is
declared), and rewrites the wheel to <version>+odx[.pr<N>].<tree> with
fixed timestamps, where <tree> is the addon directory's git tree, so the
same source gives the same version and bytes. Wheels are recorded under
[wheels] in odx.lock; --publish uploads them with uv publish to a
non-PyPI [[tool.uv.index]]. verify --installed also checks built wheel
versions.
@github-actions github-actions Bot added the enhancement New feature label Oct 13, 2026
@read-the-docs-community

read-the-docs-community Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Documentation build overview

📚 odx | 🛠️ Build #35118239 | 📁 Comparing 04e8fd7 against latest (9a1491c)

  🔍 Preview build  

2 files changed
± cli.html
± files.html

@bosd
bosd merged commit d62d042 into main Oct 13, 2026
26 checks passed
@bosd
bosd deleted the feat/build branch October 13, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant