Publishing pydevices

August 18, 2026 · View on GitHub

The release procedure itself is org-wide and lives in one place: .github/docs/publishing-automation.md. It covers the standard steps, the shared reusable workflows, the required secrets, monitoring the MIP queue, retrying an interrupted publication, and correcting a bad release — for every publishing repository, not just this one.

This page covers only what is specific to pydevices: what a release of this repository actually produces.

One published GitHub Release named vX.Y.Z publishes every artifact generated from this repository with version X.Y.Z. VERSION must already contain that same version.

Generated products

Every non-debris top-level module or package under lib/ is discovered as a leaf. Today those leaves are audiodev, displaydev, events, eventsys, keys, and multimer. Adding another component under lib/ automatically adds its unprefixed MIP package and its pydevices-<name> TestPyPI distribution; there is no include list.

The dependency-only pydevices meta-package installs every discovered leaf, including eventsys. The pydevices-desktop meta-package depends on pydevices and also installs the desktop board files plus every runtime module discovered under utils/. Utilities do not have separate distributions.

All internal TestPyPI requirements use exact ==X.Y.Z pins. MIP meta-package requirements intentionally resolve latest, while each generated manifest records X.Y.Z as its own version.

Board installers

Board package.json files are not published in the MIP index. Install them directly from their raw GitHub directory. Hardware installers depend on pydevices at latest and carry their board-specific Python drivers in their own urls. Optional Python bus fallbacks are not pulled: firmware-provided i80bus, i2cbus, spibus, and similar native modules take precedence.

The one desktop board installer depends on pydevices-desktop at latest. Run python scripts/validate_board_mip_installers.py to validate every board installer discovered under board_configs/.

PyScript filesystem

pydevices-desktop.toml is a generated, committed filesystem mapping that tracks main. It contains the complete Python payload of the desktop package with explicit /lib/... destinations. CI fails if any discovered lib/ or utils/ source, or one of the fixed desktop board files, is missing or stale.

Before you release

Confirm the generated package set is what you expect — adding or removing a publishable entry under lib/ or utils/ changes the next release automatically — then follow the standard procedure in the org-wide runbook.

Published TestPyPI files and MIP releases are immutable in practice; publish a new version to correct a release.