- PyPI Account: Create accounts on PyPI and TestPyPI
- API Tokens: Generate API tokens for both (Account Settings → API tokens)
- Configure credentials:
cat > ~/.pypirc << 'EOF'
[distutils]
index-servers =
pypi
testpypi
[pypi]
username = __token__
password = pypi-YOUR_PYPI_TOKEN_HERE
[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = pypi-YOUR_TESTPYPI_TOKEN_HERE
EOF
chmod 600 ~/.pypircUse the automated scripts in scripts/ directory:
./scripts/bump-version.sh 0.2.0This updates pyproject.toml, commits, and creates a git tag.
./scripts/test-build.shBuilds and tests the package with uvx before uploading.
./scripts/publish-testpypi.shRuns tests, builds, and uploads to TestPyPI.
uvx --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ moneyflow --demo./scripts/publish-pypi.shPublishes to production PyPI (with confirmation prompts).
git push && git push --tags./scripts/post-publish.sh v0.2.0This automates:
- Updating stable branch to release tag
- Pushing to GitHub (triggers docs deployment with screenshot generation)
# Full release workflow
./scripts/bump-version.sh 0.2.0
./scripts/test-build.sh
./scripts/publish-testpypi.sh
# Test from TestPyPI...
./scripts/publish-pypi.sh
git push && git push --tags
./scripts/post-publish.sh v0.2.0See scripts/README.md for detailed script documentation.
chmod +x scripts/*.shYou can't re-upload the same version. Bump version and try again.
TestPyPI allows re-uploads for testing.
Check entry point in pyproject.toml:
[project.scripts]
moneyflow = "moneyflow.app:main"Your package will be available at:
- PyPI: https://pypi.org/project/moneyflow/
- Install:
pip install moneyflow - Run:
uvx moneyflow