A helpful CLI and project generator.
Project description
python-jbussdieker
A modern Python project generator — zero to PyPI with automated releases.
🚀 What it does
jbussdieker scaffolds a best-practice Python project with:
- ✅
pyproject.tomlusing PEP 621 - ✅ GitHub Actions CI for linting, typing, tests, and publishing
- ✅
Makefilewith simple install, lint, test commands - ✅
.gitignorefor Python best practices - ✅ release-please workflow for versioning and changelogs
- ✅ Publish to PyPI using Trusted Publishers
No tokens. No manual uploads. Just push, merge, and release.
📦 Install
pip install jbussdieker --upgrade
🧑💻 Create a new project
jbussdieker create myproject
cd myproject
git init
git add .
git commit -m "feat: initial commit"
gh repo create --source=. --public --push
✅ Set up automated releases
1️⃣ Ensure GitHub Actions has required permissions
For release-please to work, your repository’s Actions must have write access and permission to create PRs.
-
Allow workflows to write to your repo:
- Go to your repo’s Settings → Actions → General (GitHub Actions settings)
- Under Workflow permissions, select Read and write permissions
-
Allow Actions to create PRs:
- In the same Actions settings
- Check Allow GitHub Actions to create and approve pull requests
These are required so the workflows can open changelog PRs and publish your releases automatically.
2️⃣ Add a Trusted Publisher on PyPI
Configure PyPI to trust your GitHub repo for publishing
-
Visit PyPI Publishing
-
Scroll down to “Add a new pending publisher”
-
Fill out:
-
GitHub Owner → your username or org
-
Repository Name → your repo name (
myproject) -
Workflow Name →
publish.yml
-
Environment Name →
release
-
-
Click Add.
Note: The generated publish.yml uses an environment named release by default. You can edit or remove this later — just keep it in sync with your PyPI settings.
3️⃣ Push your first tag
Once release-please opens a version bump PR, merging it will automatically publish your package. No API keys needed — PyPI trusts your GitHub Action.
Want to learn more? See the release-please GitHub repo.
🧹 Local development
Your project includes a simple Makefile:
make venv # create .venv
make install # pip install -e .
make lint # black + mypy
make format # run black
make test # run unittest
make clean # remove .venv
🔒 Recommended GitHub repo settings
- ✅ Use Squash merge only (keeps your history tidy and compatible with release-please) See release-please’s recommendation for a linear git commit history
- ✅ Enable Auto-delete branches after merge
📢 Example workflow
# 1. Scaffold
jbussdieker create myproject
# 2. Init and push
cd myproject
git init
git add .
git commit -m "chore: initial commit"
gh repo create --source=. --public --push
# 3. Configure GitHub Actions permissions (required!)
# 4. Link Trusted Publisher on PyPI
# 5. Merge your first release-please PR
# 6. Done! 🚀
📝 License
This project is licensed under MIT.
🎉 Ship faster
No config sprawl. No secrets rotation. Just git push and publish Python packages the modern way.
Enjoy! 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jbussdieker-0.11.4.tar.gz.
File metadata
- Download URL: jbussdieker-0.11.4.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdd817d21a832a82ff7d63c15c352870ec53623fb11efa80f9d783731b20d1f3
|
|
| MD5 |
69185d65e7be674d7452d3edba1d9747
|
|
| BLAKE2b-256 |
6769ebaf7d5f738350eea20bc4f3ef21004de6338271cc7d459ffb3321f59dbf
|
File details
Details for the file jbussdieker-0.11.4-py3-none-any.whl.
File metadata
- Download URL: jbussdieker-0.11.4-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3c986635df424a41322d5d815064028a343bc844c505af5c810c81cb1ab17b5
|
|
| MD5 |
ec3e6aeafb047f432a20214dc2069e3d
|
|
| BLAKE2b-256 |
ce335a1f50787615c5ece1686847fcbeb66a3455cb56a491feefd765eaf4110e
|