Proposal: infrastructure for Debian packaging of the Odoo 18 + OCA Python libraries #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Scope: the 34 pure Python libraries the packaging map (handbook PR #23,
docs/odoo-python-packaging-map.md) lists as missing from trixie, packaged the Debian Python Team way so they can later go to Debian. This issue proposes the infrastructure only; no package is started before it is accepted. Decision 0022 stays open: this work makes the.deboption measurable, it does not decide it.1. Repository per source package
git.pop.coop/deb/<source>(for exampledeb/python-openupgradelib,deb/python-xsdata), public. The binary ispython3-<name>.git-buildpackagelayout, the same one the Debian Python Team uses on Salsa, so a repository can be pushed to Salsa unchanged:debian/master,upstream,pristine-tar; upstream tagsupstream/<version>, packaging tagsdebian/<version>;debian/gbp.confwithdebian-branch = debian/master,pristine-tar = True;debian/control:Maintainer: Marcos Mendez <mendez.foto@gmail.com>,Rules-Requires-Root: no,Build-Depends: dh-sequence-python3, pybuild-plugin-pyproject, python3-all, ...,Testsuite: autopkgtest-pkg-pybuildwhen upstream has tests;debian/rules:dh $@ --buildsystem=pybuild;debian/copyrightin full DEP-5,debian/watch(PyPI or GitHub tags),debian/upstream/metadata,debian/salsa-ci.yml, anddebian/README.sourcewhenever an older upstream is packaged on purpose.uscanand checked against the hash PyPI publishes. PyPI is the source of the tarball, never an install path.deb/python-package-templatecarries the skeleton above plus the CI workflow, so each new package starts from the same files.2. Versions
python-<name>, binarypython3-<name>. Keel shows only in the Debian revision.<upstream>-0+keel1. It sorts below-1, so the Debian upload replaces it cleanly, and it carries the+keelNsuffix the apt tooling already requires (BRIEF section 7), sobin/build-packageneeds no change.<sid version>~bpo13+keel1.unstablein the git tree (what Salsa expects); the Keel archive build sets the target suite.debian/README.source, and the version is the one that satisfies both trixie and the OCA manifest specifier.dist-infoname is checked against the name in the OCA manifest, because Odoo 18 checksimportlib.metadata.version()and not the import name.3. CI (Forgejo Actions, no Docker)
One workflow per repository, calling a shared workflow in
deb/.forgejo(or copied from the template, if Forgejo's reusable workflows across repositories do not work on this instance; to be measured):sbuildagainst a clean trixie chroot built withmmdebstrapin unshare mode (no root, no Docker, no schroot setup);lintian --fail-on warningon the.changes, with overrides only when justified in the override file;autopkgteston the built.debinside the same unshare backend;SOURCE_DATE_EPOCHand compare the.debdigests (reprotestlater, if cheap enough).Needs a Forgejo runner registered for the
deborganization, running on LXC with the host executor (no Docker), withsbuild mmdebstrap uidmap lintian autopkgtest git-buildpackage pristine-tar devscriptsinstalled. Whether a runner already exists for the organization is not known from here.4. Build and publication to staging
/tmp, never in/turnkey/*or/srv/keel-apt, and never while a release runs.bin/build-packagein the apt tooling clones fromKEEL_GIT_BASE, which can point athttps://git.pop.coop/deb. One gap in it for these packages:-b). A package meant for Debian should also have its source in the archive (Architectures: amd64 sourcealready allows it).trixie-stagingonarchive.keellinux.org(bin/publish --staging, signed by the build host's staging key, thenbin/keel-publish-mirror), and releases go totrixieon the same archive, signed by the maintainer. Nothing from this work is signed with the release key by an agent.deb/*repository whosedebian/masterchanged since the last run, and publishes totrixie-stagingonly what built, passed lintian and autopkgtest.trixie-stagingtotrixieonly when an OCA 18.0 module needs the package and after testing on staging; releases point at a dated pool snapshot (decision 0012).5. Tests beyond CI
Per package: install on a clean trixie machine from
trixie-staging, import the module, then install the OCA 18.0 module that depends on it into an Odoo 18 test database. Results go in the package PR.6. Conflicts to resolve before packaging (one issue each)
pycryptodome(payment_redsysimportsCrypto): prefer an OCA patch toCryptodome/pycryptodomex.deepdiff<8(l10n_es_aeat_sii_match) against trixie's 8.1.1: prefer an OCA patch lifting the cap, after testing with 8.1.1.suds-py3(delivery_gls_asm) file-conflicts withpython3-suds: prefer an OCA manifest change tosuds-community, after testing.workalendar(l10n_br_resource), removed from Debian as abandoned: adopt it in Keel, or move the module to another library (for exampleholidays, already in trixie). Proposal in its own issue.7. Order
Base (openupgradelib, pdf2image, pyzbar backport, pygount 3.1.0, odoo-test-helper, pyjon.utils, py3o.formats, py3o.template, pysftp, mpld3, bokeh last), then Brazil (12), Spain, the other localizations, then the verticals, as the map orders them. Contributions to Debian (pdf2image's ITP #1087742, the pyzbar backport, then xsdata, altcha, numpy-financial, requests-pkcs12, brazilcep, xmlsig, pygount) run in parallel, and every text sent to Debian is approved first.
Decisions needed
deb: which host, and who registers it.sbuild,mmdebstrap,uidmap,lintian,autopkgtest,git-buildpackage,pristine-tar(pbuilder is installed but has no base chroot).bin/build-packagebuilds binary only today).Runner ready:
keel-deb-runner(labelkeel-deb, host executor, no Docker) on the git-runner VM, scoped to this organization. sbuild in unshare mode against a clean trixie chroot builtpyzbar0.1.9-3 from sid with lintian and autopkgtest passing (31 tests). Decision 1 is done; the proposal still waits for approval before the first package.