PyPI releases (open-fdd)
Canonical public install for the 2.x rules engine:
pip install open-fdd
That distribution ships open_fdd.engine (RuleRunner, YAML rules, same stack as the platform FDD loop). Why does PyPI “Release history” mix 0.1.x and 2.x? That is still one project, open-fdd: older 0.1.x uploads were the legacy, hard-coded pandas era; 2.x is the current config-driven engine + platform-capable tree. Pip resolves the latest 2.x unless you pin an old version.
openfdd-engine (optional second PyPI name)
The repo also contains packages/openfdd-engine/ (import name openfdd_engine): a thin re-export that depends on open-fdd. Its version is kept the same as open-fdd 2.x (e.g. both 2.0.13) so release numbers stay easy to reason about, even though it is a separate PyPI project name.
Publishing uses .github/workflows/publish-openfdd-engine.yml: push tag openfdd-engine-vX.Y.Z after the openfdd-engine PyPI project has a trusted publisher for that workflow (same OIDC idea as open-fdd). workflow_dispatch builds only; upload runs on matching tags.
Release baseline (PyPI)
- Check live version:
curl -s https://pypi.org/pypi/open-fdd/json | python3 -c "import sys, json; print(json.load(sys.stdin)['info']['version'])"
1) Before a release of open-fdd
- Version — Root
pyproject.toml→[project] version(e.g.2.0.11). openfdd-engine— Bumppackages/openfdd-engine/pyproject.tomlversionto the sameX.Y.Zasopen-fdd, and setopen-fdd>=X.Y.Zin dependencies. Tagopenfdd-engine-vX.Y.Zif you publish that project.
Transition checklist (legacy 0.1.x → 2.x on PyPI)
- Confirm root
pyproject.tomlsetsopen-fddto the intended2.xversion. - Merge/push release commits to
master(or your release branch). - Tag
open-fdd-vX.Y.Zand push the tag. - Confirm open-fdd on PyPI shows
X.Y.Z.
PyPI upload auth (open-fdd only)
CI uses PyPI Trusted Publishing (OIDC from GitHub). Configure one trusted publisher on the open-fdd PyPI project:
- pypi.org → project
open-fdd→ Manage project → Publishing (not Settings). - Add a GitHub trusted publisher:
- Owner:
bbartling - Repository:
open-fdd - Workflow name:
publish-open-fdd.yml
- Owner:
- Save.
Workflow file: .github/workflows/publish-open-fdd.yml. Tags open-fdd-v* trigger upload. workflow_dispatch is build/check only (no upload) if configured that way.
Official guide: Publishing with GitHub Actions OIDC.
Fallback: API token
If you cannot use OIDC, pass a project-scoped token, for example:
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
password: $
If CI shows invalid-publisher or 403
- Trusted publisher on PyPI doesn’t match the exact workflow filename or repository.
- Tag points to a commit before the OIDC workflow existed — merge fix, retag.
- Version already on PyPI — bump version and use a new tag.
2) Publish open-fdd (commands)
Local dry run
cd /path/to/open-fdd # repo root
python -m pip install --upgrade pip build twine
python -m build
twine check dist/*
GitHub Actions
git checkout master # or your release branch
# bump version in pyproject.toml, commit, push
git tag open-fdd-v2.0.11
git push origin open-fdd-v2.0.11
3) Publish openfdd-engine (second PyPI project)
- Create project
openfdd-engineon PyPI (if it does not exist). - Add a trusted publisher pointing at workflow
publish-openfdd-engine.yml(same repository asopen-fdd). - Tag
openfdd-engine-vX.Y.Z(same numbers asopen-fdd-vX.Y.Z) and push — only after PyPI is configured, or OIDC fails withinvalid-publisher.
Scope policy
- PyPI ships the Python packages (
open-fddis the supported public name for 2.x). - Full edge stack remains repo + Docker (
./scripts/bootstrap.sh).
See also: Engine-only deployment and external IoT pipelines.