Release process
The project publishes wheels, source distributions, and checksum manifests through GitHub Releases. It is not currently published to PyPI. GitHub Releases, GitHub Marketplace, and Python package-registry publishing are separate operations and must be verified independently.
Distribution name
The original pyproject.toml used necs, but that distribution name is already
used on PyPI by another project. The metadata now uses the deliberately specific
candidate name neural-ecommerce-search-madhvansh; the import package remains
necs for source compatibility.
Distribution-name availability is not reserved and must be checked immediately
before any registry publication. If it is unavailable, choose another
project-specific distribution name and update this document, the changelog,
and pyproject.toml together. Never upload over or impersonate an unrelated
package.
GitHub Release preflight
- Confirm every README result is backed by a complete bundle under
results/. - Run
pytestandruff check src tests scriptsfrom a clean checkout. - Keep the version in
pyproject.toml,src/necs/__init__.py, andCITATION.cffsynchronized. -
Build in an isolated environment:
python -m pip install build twine python -m build python -m twine check dist/* -
Confirm the build produced exactly one wheel and one source distribution, then install each into a separate fresh environment and run:
necs-demo --query "wireless gaming mouse" python -c "import necs; print(necs.__version__)" - Generate a SHA-256 manifest that names exactly those two archives, and run
scripts/verify_release_manifest.pyagainst the manifest and both files. - Create release notes from
CHANGELOG.md; do not claim unpublished models, artifacts, integrations, or performance.
Optional Python package registry
These steps apply only when intentionally publishing to PyPI or another Python package registry; they are not required for a GitHub Release or Marketplace Action patch.
- Recheck the distribution name on the target registry and its test service.
- Upload to the test registry first.
- Install the uploaded wheel and source distribution into separate clean environments and repeat the smoke tests.
- Publish to the production registry only after the uploaded artifacts pass.
GitHub Action and Marketplace
The root action.yml is independently versioned by the repository release tag.
Do not move an existing release tag to pick up later action fixes. Publish a new
semantic patch release instead.
- Run
pytest, Ruff, and theaction-smokematrix from the exact candidate commit. The matrix must pass on GitHub-hosted Linux, macOS, and Windows. - Confirm the candidate has exactly one root
action.ymloraction.yaml, and that its name, description, inputs, composite step, icon, and color pass the release page’s metadata validator. - Open the action metadata file on GitHub and use Draft a release. Upload the already-verified wheel, source archive, and manifest to that draft. Do not proceed until the Marketplace panel says Everything looks good!; that UI is authoritative for the unique action-name check.
- Select Publish this Action to the GitHub Marketplace, then choose Code quality as the primary category and Testing as the secondary category. The validator checks evaluation artifacts before metric computation; it is not a deployment or security scanner.
- Prefer an immutable release-specific tag. If immutable releases are not enabled, publish the exact full commit SHA alongside the readable version tag in every workflow example.
- Verify the release notes include checkout and Python setup. The repository owner must complete the Marketplace agreement and two-factor authentication, then publish the release and Marketplace version together. Never move or recreate the version tag after publication.
- After publication, verify the public listing, install snippet, source link, categories, and a fresh downstream run. Record maintainer-run checks as compatibility evidence, not independent adoption.
The Verify published release assets workflow retries the automatic
release: published download to tolerate short asset-visibility delays. That
automatic run is a convenience signal only. After every wheel, source archive,
and SHA-256 manifest is visible on the release page, manually dispatch the same
workflow with the exact tag. Treat that post-upload workflow_dispatch run as
the authoritative published-artifact gate: both the wheel and source archive
must install outside the checkout and pass the version, help, valid-fixture,
and expected-failure checks.
CI verifies the candidate source and an isolated build before publication; the post-publication workflow verifies the exact GitHub Release assets. Registry uploads remain manual maintainer actions.