This post will describe how to manage GitHub releases. This assumes that you have an online GitHub repo, a local repo for development. See this post on how to initially set this environment up. This workflow can be used generically for any project, but I am using Thonny on Windows to develop a python package which is published on PyPI so there are steps related to that.
Single Day Development Workflow
This “single day” workflow illustrates the entire process and assumes you will complete this in one day. Keep scrolling down for a description of the process taking place over multiple days (the more likely scenario).
Step # 1. Always start from the latest main (do this every day)
!git checkout main
!git pull origin main
Step # 2. Create a short, descriptive feature/bugfix branch
# Examples:
!git checkout -b feature/wifi-support # new feature
!git checkout -b fix/led-blink-race # bug fix
!git checkout -b docs/update-readme # documentation
!git checkout -b release/v0.2.0 # preparing a new release
Step # 3. Make your changes (edit files, test on Pico/Pi/Windows, etc.)
# → Test everything works!
Step # 4. Stage & commit often (small, logical commits are best)
!git add .
!git commit -m "feat: add WiFi connection manager"
!git commit -m "fix: prevent LED double-blink on Pico W"
!git commit -m "docs: add Pico deployment instructions"
Step # 5. Push your branch to GitHub (creates it remotely)
!git push -u origin feature/wifi-support
→ Now open a Pull Request on GitHub:
- Go to https://github.com/your-username/your-repo-name
- You’ll see a yellow banner: “feature/wifi-support had recent pushes” → click Compare & pull request
- Write a clear title/description
- Click Create pull request
Step # 6. Wait for review (or just merge yourself since you’re the owner)
# → On GitHub → Pull Requests → your PR → **Merge pull request** → **Confirm merge**
# → Optionally delete the branch (GitHub offers a checkbox)
Step # 7. Update your local main
!git checkout main
!git pull origin main
When you’re ready for a new release (e.g., v0.1.1 or v0.2.0)
Step # 1. Make sure main is clean and up-to-date
!git checkout main
!git pull origin main
Step # 2. Bump the version in pyproject.toml
# Change: version = "0.1.0" → version = "0.1.1" (or "0.2.0")
Step # 3. Commit the version bump
!git add pyproject.toml
!git commit -m "chore: release v0.1.1"
Step # 4. Create and push the new tag
!git tag v0.1.1
!git push origin v0.1.1
!git push origin main
Step # 5. Build the package
!python -m build
Step # 6. Upload to real PyPI
!python -m twine upload dist/*
The new version is now live on PyPI!
Single Day Workflow Summary
| Task | Command / Action |
|---|---|
| Start work | git checkout main && git pull |
| New feature/fix | git checkout -b feature/name |
| Commit | git add . && git commit -m “message” |
| Push branch | git push -u origin feature/name |
| Merge | Create & merge PR on GitHub |
| Release new version to PyPI | Bump version → tag → build → twine upload |
Multi-day Workflow
This workflow is used when your development will take multiple days to complete.
# ── Day 1 ─────────────────────────────────────
!git checkout main
!git pull origin main
!git checkout -b feature/wifi-support # create once
# … code, test on Pico/Pi, etc.
!git add .
!git commit -m "feat(wifi): add connection manager skeleton"
!git push -u origin feature/wifi-support # only needed the very first time
# ── Day 2 ─────────────────────────────────────
!git checkout feature/wifi-support
!git pull origin feature/wifi-support # get any remote changes (if collaborating)
# … more coding
!git add .
!git commit -m "feat(wifi): implement reconnect logic"
!git commit -m "test(wifi): add connection test cases"
!git push # just push, no -u needed anymore
# ── Day 3, 4, 5… ───────────────────────────────
# (repeat the same 4 lines every day)
!git checkout feature/wifi-support
!git pull origin feature/wifi-support
# … code, test, add, commit, push …
!git add .
!git commit -m "your message here"
!git push
Pro tips for long-running features
| Situation | What to do |
|---|---|
| You want to keep your branch up-to-date | !git pull origin main –rebase (keeps history linear) |
| Someone else merged something into main | !git fetch && !git rebase origin/main |
| You need a quick hotfix on main | !git checkout main && !git pull → fix → push → then !git checkout feature/wifi-support and continue |
| You’re done and ready to merge | Push final commit → open PR on GitHub → merge → delete branch |
Your daily loop
Bash
# Every morning (or after a break)
!git checkout feature/your-branch-name
!git pull origin feature/your-branch-name # or git pull --rebase origin main
# Work → test → repeat as many times as you want
!git add .
!git commit -m "short, clear message"
!git push
Finally…
This post described how to manage GitHub releases. This is the process I use to manage development on the RPI-APP-FRAMEWORK. Please check out my other posts on this topic.