Maintainers

CI and PyPI releases

Publish foldlitedb through a GitHub release using the same Trusted Publishing flow as ParticleGAN. GitHub builds and tests the native distributions before PyPI receives them.

Register the first publisher

Before the first upload, sign in to the existing PyPI account and add a pending publisher in PyPI publishing settings with these exact values:

FieldValue
PyPI project namefoldlitedb
GitHub owner255BITS
Repositoryfoldlitedb
Workflow filenamerelease.yml
Environmentpypi

The repository's pypi environment permits tags matching v*. The publishing job alone receives id-token: write. No stored PyPI password or API token is needed. A pending publisher creates the project on its first successful upload; see the PyPI instructions.

Release checks

release.yml runs when a GitHub release is published. It requires the tag to equal v plus the version in pyproject.toml, and checks that the Python module and both Rust crates declare that same version. Every build checks out the resolved source commit.

The reusable wheels.yml workflow runs the Rust tests, AssemblyScript checks, Python and browser tests, replay smoke, and documentation examples. It builds and tests CPython 3.11+ stable ABI wheels for Linux x86-64 and ARM64, macOS Intel and Apple Silicon, and Windows x86-64. It also rebuilds a wheel from the source archive and tests that installed package outside the checkout.

After every check succeeds, Twine validates the metadata and README. The workflow saves the tested source archive and five wheels as python-package-distributions. The publishing job downloads those exact artifacts and uploads them without rebuilding. Manually running wheels.yml performs the checks and builds without publishing.

Publish 0.1.0

Commit and push the complete release source, including the workflow files, native code, bundled Wasm assets, and version metadata. After the pending publisher is registered, create the GitHub release against that verified commit:

RELEASE_SHA=$(git rev-parse HEAD)
gh release create v0.1.0 --repo 255BITS/foldlitedb \
  --target "$RELEASE_SHA" --title "Foldlite DB 0.1.0" \
  --notes-file /tmp/foldlitedb-0.1.0-release-notes.txt

Write the release notes file before running this command. A tag push or draft release does not trigger publication. Monitor the release workflow and confirm every test, build, and publishing job passed. A skipped job does not establish a successful release.

Verify the published package

Confirm version 0.1.0 and distribution hashes on PyPI, then install in a fresh environment outside the checkout. Supported wheel platforms need Python 3.11+ and no Rust compiler. Building the source archive requires Rust/Cargo 1.90+ and a C compiler and linker.

python -m venv /tmp/foldlitedb-release-smoke
/tmp/foldlitedb-release-smoke/bin/python -m pip install --only-binary=:all: foldlitedb==0.1.0
cd /tmp
/tmp/foldlitedb-release-smoke/bin/python -I -c 'from importlib.metadata import version; from foldlitedb import Database, View; assert version("foldlitedb") == "0.1.0"; db = Database(":memory:", View.bundled("metrics")); db.add_many([{"metric": "loss", "value": 4}, {"metric": "loss", "value": 8}]); assert next(db.rows()).result["mean"] == 6; db.rebuild(); assert next(db.rows()).result["sum"] == 12; db.close()'

On Windows, use the virtual environment's Scripts\python.exe. Retain the GitHub Actions run and artifact hashes as the release receipt.