feat: release trains with semantic versioning and COPR RPM builds - #163
Conversation
Add two release trains driven by python-semantic-release: stable vX.Y.Z
releases on main and vX.Y.Z-dev.N prereleases on development, each with a
GitHub release and an automated COPR RPM build (quadsdev/qiip and
quadsdev/qiip-dev). Code commits only; docs and markdown-only changes never
release. RPM packaging in rpm/ bundles nginx, the node engine bundles,
config examples, and a systemd unit; the quadsdev/qiip-deps project carries
the six pinned system RPMs QIIP needs beyond Fedora 43/44. README gains
COPR, release, and dev release badges plus installation docs; see
docs/releases.md.
fixes: quadsproject#162
ttlogan
left a comment
There was a problem hiding this comment.
Solid release-train setup. The code-change gate, PSR config, and the Makefile pulling version from pyproject all hold together, and the two COPR trains with the Conflicts dance are clean.
One thing: the COPR dependencies workflow calls 'copr build' at the submit step but never installs copr-cli, so that job will fail with command not found on its first run. release.yml's tooling step does add copr-cli; the copr-deps one should too.
The submit step calls 'copr build' but the tooling step never
installed copr-cli, so the job would fail on first run. Match the
tooling in release.yml.
fixes: quadsproject#162
grafuls
left a comment
There was a problem hiding this comment.
Solid release-train setup — the code-change gate, PSR config, and Makefile version handling all hold together. One note on the RPM-detection in nginx.md (inline).
rpm -q qiip only matches the stable package, so a qiip-dev install fell through to curl from main even though qiip-dev ships the same /usr/share/qiip/nginx files. Test for the bundled files instead, and use the packaged gen-cert.sh in the RPM rotation snippet.
ttlogan
left a comment
There was a problem hiding this comment.
Verified head 4b59012 against the code. One thing the earlier reviews didn't cover: the systemd unit's env wiring. INFERENCE_PROXY_AUTH__DB_PATH and INFERENCE_PROXY_PROVISIONING__LOG_DB_PATH both resolve through the nested-delimiter settings loader (env_prefix + __), and /var/lib/qiip matches the unit's DB paths, so an RPM install lands the sqlite files where the service actually reads them. Combined with the spec %files entries resolving to real buildroot paths and the git-archive prefix matching %autosetup, the packaging holds together. Both prior findings (copr-cli, nginx.md bundled-file detection) are fixed in this head.
Implements #162.
What this adds
main-> stablevX.Y.Zreleases + COPRquadsdev/qiip(RPMqiip)development->vX.Y.Z-dev.Nprereleases + COPRquadsdev/qiip-dev(RPMqiip-dev,Conflicts: qiip)feat:/fix:/perf:commits bump;chore:/docs:and markdown-only changes never release. First releasev0.1.0. PSR maintainsCHANGELOG.md..github/workflows/release.yml: code-change gate, semantic job (tag + GitHub release), COPR submit job on merge only, fork-guarded.rpm/: noarch spec template + Makefile (version from pyproject, sanitized for RPM) + RPM systemd unit. Ships the gateway, node engine bundles (/usr/share/qiip), config examples (/etc/qiip/conf), nginx bundle (Requires: nginx >= 1.25.1,nginx.conf+gen-cert.sh), writable data at/var/lib/qiip.copr-deps/: six pinned system RPMs (structlog, huggingface-hub, fastapi, etcd3gw, uvicorn, click) published once toquadsdev/qiip-depsvia a manual-dispatch workflow; users never build anything.hf-xetdeliberately filtered (no Fedora provider; QIIP is download-only).docs/releases.md,nginx/nginx.mdbundled paths,UPGRADING.mdmigration.Why Fedora 43/44 only
Verified against Fedora/EPEL/AL10 repo metadata: EL10/Alma10 are missing several deps (structlog, etcd3gw, httpx-sse, huggingface-hub) and ship fastapi/pydantic/uvicorn/pydantic-settings below our floors; Fedora 45's default python3 is 3.15.0~rc2 (outside
requires-python <3.15).requires-pythonis now>=3.12,<3.15(suite passes on 3.14);uvicorn[standard]reduced touvicorn(no extra usage).Testing
uv0.12.9 vs pinned 0.12.17).qiipandqiip-dev: SRPM + binary RPM built in a Fedora 43 container; correct file list, autopython3.14dist(...)requires,Conflicts: qiip.copr-depsRPMs build end-to-end.COPR-side prerequisites (documented in README)
Create
quadsdev/qiip-devandquadsdev/qiip-deps, keep theCOPR_API_TOKENsecret, build the deps once, chroots fedora-43/44 only with the qiip-deps repo enabled.