Appendix D: Upload Guide
This guide details the procedures for uploading PyEQSP distributions and documentation to their respective hosting platforms using the project’s automation suite.
Important
Protected Branch Policy: These procedures assume the main branch is protected. All changes, including version bumps, must be performed on a release branch and merged via Pull Request after verification.
Release Distribution (PyPI / TestPyPI)
To build and upload the package, use the scripts in the release/ directory. These scripts ensure that all documentation links are converted to absolute GitHub URLs for correct rendering on project pages.
1. Create Release Branch & Version Bump
Start from an up-to-date main branch and create a dedicated staging area.
git checkout main
git pull origin main
git checkout -b release_branch_1_0b1
Edit pyproject.toml to set the new version (e.g., 1.0b1).
2. Run Build with verification (TestPyPI)
From the release branch, run the pre-flight check:
python3 release/upload_release.py --testpypi
This script will:
Initialize the
release/pypi_readme_fix.pylogic to swap relative links.Trigger
release/build_dist.pyfor a cleansdistandwheelcreation.Verify the artifact using
twine check.Attempt an upload to the TestPyPI repository.
Caution
TestPyPI Immutability: If an upload to TestPyPI fails after a successful partial upload, or if you need to fix a bug discovered during the check, you must increment the version number (e.g., 1.0b1 to 1.0b2) in pyproject.toml. TestPyPI does not allow re-uploading the same version string.
3. GitHub Synchronization & CI Verification
Once the TestPyPI rendering is confirmed, push your branch and open a PR.
Push Branch:
git add . git commit -m "Release 1.0b1: Open Beta Engagement Infrastructure" git push -u origin release_branch_1_0b1
Create Pull Request: Create a PR from your release branch to
main.Verify CI: Ensure that the GitHub Actions “CI” and “Verify Distribution Build” workflows pass 100%. This serves as the final gatekeeper before the production upload.
4. Production PyPI Upload & Tagging
Once the PR is approved and merged into main:
# Switch to the updated main branch
git checkout main
git pull origin main
# Perform production upload
python3 release/upload_release.py --pypi
# Create and push the release tag
git tag release_1_0b1
git push origin release_1_0b1
Caution
PyPI Immutability & Failure Recovery: Like TestPyPI, production PyPI is strictly immutable. If the upload fails after any artifact (sdist or wheel) has been successfully accepted, you cannot re-upload to that version string. To recover:
Fix the underlying issue (e.g., build error or metadata fix) on a new branch.
Increment the version in
pyproject.toml(e.g.,1.0b1→1.0b2).Restart the entire release process from Step 1.
SourceForge Documentation Mirror Upload
To update the project documentation mirror at http://pyeqsp.sourceforge.io:
1. Generate & Upload
The documentation upload is semi-automated via the release/upload_sourceforge.py script.
# This script builds the docs and generates the scp command
python3 release/upload_sourceforge.py
After reviewing the generated command, execute it to upload the doc/_build/html contents to your SourceForge htdocs directory.
2. Verify Web Rendering
Check http://pyeqsp.sourceforge.io to ensure all Markdown, mathematics symbols, and navigation elements render correctly.