jbussdieker
A modern Python development toolkit with a modular plugin architecture — from project scaffolding to AI-powered commits with automated releases.
🚀 What it does
jbussdieker is your complete Python development toolkit built with a modular plugin system:
Core CLI Framework:
- ✅ Lightweight CLI with plugin discovery via entry points
- ✅ Configurable logging and settings management
- ✅ Extensible command system for plugins
Plugin Ecosystem:
- ✅
jbussdieker-project— Project scaffolding and templates - ✅
jbussdieker-commit— AI-powered conventional commit messages - ✅
jbussdieker-app— Application framework and utilities - ✅
jbussdieker-service— Service layer and API utilities - ✅
jbussdieker-storage— Data storage and persistence layer - ✅
jbussdieker-config— Configuration management (core dependency)
Modern Python Development:
- ✅ release-please workflow for versioning and changelogs
- ✅ Publish to PyPI using Trusted Publishers
- ✅ GitHub Actions CI for linting, typing, tests, and publishing
No tokens. No manual uploads. Just push, merge, and release.
📦 Install
Core CLI
pip install jbussdieker
With all plugins
pip install jbussdieker[all]
Individual plugins
# Project scaffolding
pip install jbussdieker[project]
# AI-powered commits
pip install jbussdieker[commit]
# Application framework
pip install jbussdieker[app]
# Service layer
pip install jbussdieker[service]
# Storage layer
pip install jbussdieker[storage]
🔌 Plugin Ecosystem
jbussdieker-project — Project Scaffolding
Create modern Python projects with zero friction:
jbussdieker project create myproject
cd myproject
git init
git commit --allow-empty -m "chore: init"
gh repo create --source=. --private --push
git add .
git commit -m "feat: initial commit"
git push
Features:
- ✅
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
jbussdieker-commit — AI-Powered Commits
Generate conventional commit messages using AI:
# Stage your changes
git add .
# Generate and edit a commit message
jbussdieker commit
# Or preview the message without committing
jbussdieker commit --dry-run
Features:
- 📝 Generate conventional commit messages (feat, fix, docs, etc.)
- 🔍 Analyze your staged changes and project context
- ✏️ Open your editor for final review and editing
- 🚀 Create the commit with your approved message
Requirements:
- OpenAI API key in
OPENAI_API_KEYenvironment variable - Staged changes in your git repository
- Your preferred editor (defaults to
vim)
jbussdieker-app — Application Framework
Build modern Python applications with best practices:
jbussdieker app create myapp
cd myapp
# Start building your application
Features:
- 🏗️ Application scaffolding with proper structure
- 🔧 Configuration management integration
- 📦 Dependency management and packaging
- 🧪 Testing framework setup
- 🚀 Deployment-ready structure
jbussdieker-service — Service Layer
Build robust service-oriented applications:
jbussdieker service create myservice
cd myservice
# Build your service layer
Features:
- 🔌 Service discovery and registration
- 📡 API utilities and middleware
- 🔒 Authentication and authorization helpers
- 📊 Monitoring and health checks
- 🚀 Scalable service architecture
jbussdieker-storage — Data Storage
Manage data persistence across different backends:
jbussdieker storage create mystorage
cd mystorage
# Configure your storage layer
Features:
- 💾 Multi-backend storage support
- 🔄 Data migration utilities
- 🔍 Query builders and ORM helpers
- 🛡️ Data validation and sanitization
- 📈 Performance monitoring
jbussdieker-config — Configuration Management
Centralized configuration for all your applications:
# Configuration is automatically managed
# across all jbussdieker plugins
Features:
- ⚙️ Environment-based configuration
- 🔐 Secure secret management
- 📝 YAML/TOML/JSON support
- 🔄 Hot-reload capabilities
- 🧪 Test configuration helpers
✅ 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
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.
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.
🧹 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 is required for a linear commit history. See why release-please recommends this.
- ✅ Enable Auto-delete branches after merge
📢 Example workflow
# 1️⃣ Scaffold the project locally
jbussdieker project create myproject
cd myproject
# 2️⃣ Init the repo with an empty commit to push just the structure
git init
git commit --allow-empty -m "chore: init" # ensures a branch exists for first push
gh repo create --source=. --public --push
# ⏸️ This step ensures your repo exists on GitHub first,
# so you can safely configure required Actions + PyPI before any workflows run!
# 3️⃣ Now pause — go to GitHub and:
# ✅ Set Workflow permissions to Read & Write
# ✅ Allow Actions to create & approve PRs
# ✅ Add PyPI Trusted Publisher if you like
# 4️⃣ Add the actual files
git add .
# Optionally use AI-powered commits:
# jbussdieker commit
# Or traditional commit:
git commit -m "feat: initial code"
git push
# 5️⃣ Merge your first release-please PR 🚀
🔌 Plugin Development
Want to extend jbussdieker with your own plugins? The CLI uses entry points for plugin discovery:
# In your plugin's setup.py or pyproject.toml
[project.entry-points."jbussdieker.cli"]
myplugin = "myplugin.cli:register"
# myplugin/cli.py
def register(subparsers):
parser = subparsers.add_parser("myplugin", help="My plugin command")
parser.add_argument("--option", help="My option")
parser.set_defaults(func=myplugin_command)
def myplugin_command(args, config):
# Your plugin logic here
pass
📝 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 with a modular, extensible toolkit.
Enjoy! 🚀
Metadata
Release files for jbussdieker 0.21.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jbussdieker-0.21.1.tar.gz | 20.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jbussdieker-0.21.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.7 kB
Release files / jbussdieker-0.21.1.tar.gz
| Download URL | jbussdieker-0.21.1.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
881ab4db4b2a45ecc128836d8e293645d07992fd62bb4ca05fd35d2325e585f1
|
|
BLAKE2b-256 checksum How to use checksums |
54efcb906632a58a6d60841f3507a6d253362023951c5b6f0f8f2812599009a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.11
|
Release files / jbussdieker-0.21.1-py3-none-any.whl
| Download URL | jbussdieker-0.21.1-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3be7aeeb59c0dd61ec8b0663849322f6c5bf21f14ad2eff0a399b80542fb8eaf
|
|
BLAKE2b-256 checksum How to use checksums |
410568e8704cc3a941ab8d7e1149c59fa9a4acd0cd4992ef3653e632847f1cab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.11
|