Contributing
Thanks for contributing! This project is hosted on Codeberg (Forgejo). We use a fork + pull request workflow and require small changelog fragments for most changes.
Ground rules
Be respectful and constructive.
Keep changes focused and reasonably scoped.
Follow the repository Code of Conduct.
Where to ask questions / report problems
Use the repository Issues tracker for:
Bug reports (include steps to reproduce, expected/actual behavior, environment details)
Feature requests (include motivation, proposed API/usage, alternatives)
Questions (if you’re unsure whether something is a bug or feature request)
Contributor Workflow Quickstart (Codeberg + Forks + PRs)
This is the minimal workflow we expect from contributors (students included).
It assumes you are contributing via a fork on Codeberg and opening a pull request into the upstream main branch.
One-Time Setup (first contribution)
1) Fork the repository on Codeberg
Open the upstream repo (e.g.
https://codeberg.og/BuffaloHerd/BuffaloBlueprint)Click Fork
Choose your account as the destination
2) Clone your fork locally
Replace placeholders as needed:
git clone https://codeberg.org/<your-username>/BuffaloBlueprint.git
cd BuffaloBlueprint
Add the upstream (main) repo so you can stay in sync:
git remote add upstream https://codeberg.og/BuffaloHerd/BuffaloBlueprint.git
git remote -v
The “5 Commands” Workflow (Every PR)
1) Sync your local main to upstream
Before starting new work make sure your repo is update-to-date:
git checkout main
git fetch upstream
git pull --ff-only upstream main
git push origin main
2) Create a feature branch
Do not work directly on main:
git checkout -b feature/<short-description>
where <short-description> is the feature branch name that should briefly encapsulate the purpose of this branch.
3) Make changes and run checks
Generate a new project and check that the expected files are created and the project works as intended.
4) Add a Towncrier changelog fragment
Create exactly one file under newsfragments/ for each issue this PR addresses.
(Note that one PR that addresses too many issues might need to be split into multiple PRs):
newsfragments/<ID>.<type>.md
<ID>is the issue number if you know it; otherwise use a placeholder like000and rename before merge.<type>is one of:feature— new user-facing capability (“Added …”)bugfix— fix a user-visible defect (“Fixed …”)doc— documentation changes (“Documented …”)removal— removed/deprecated behavior (“Removed …”)misc— small changes that don’t fit above but are still worth noting
Use the type that best matches what a user would care about. If you’re unsure:
Prefer
bugfixwhen you corrected wrong behavior.Prefer
featurewhen you added new behavior.Prefer
miscfor small user-facing improvements.
Example:
newsfragments/123.feature.md
Content: one short, user-facing sentence:
Added ability to regenerate settings with default values.
Check your news fragment using Towncrier:
uv run python -m towncrier check
5) Push your branch and open a PR
Push to your fork:
git push -u origin feature/<short-description>
Then open a pull request on Codeberg:
Base:
https://codeberg.org/BuffaloHerd/BuffaloBlueprintbranchmainHead:
<your-username>/BuffaloBlueprintbranchfeature/<short-description>
Common Mistakes to Avoid
Committing directly to
main(always use a branch)Forgetting the
newsfragments/entry for user-facing changesWriting fragments about internal refactors instead of user-visible outcomes
Opening a PR without running tests
Where to Find More Details
Release steps for maintainers
Licensing
By contributing, you agree that your contributions will be licensed under the repository’s license.