PR Creation (runbook)
A deterministic checklist to make a change merge-ready. Do the steps in order; STOP on any failure.
Prechecks
- Confirm you're on a feature branch (not
master) with a descriptive name. - Confirm the working tree contains only intended changes (
git status).
Build & test (gates)
- Build clean:
dotnet build /v:q— no errors, no new analyzer/StyleCop warnings. - Run the associated tests locally — MANDATORY before any push. Identify the tests covering your change and run
them (
dotnet test <project> --filter "FullyQualifiedName~<Type>"), then run the affected project(s) in full. All green. NEVER push untested changes and let CI be the first run — it wastes CI compute and slows feedback. If some path can't be exercised locally (e.g. an arch-specific case), state explicitly what was and wasn't verified. See testing-guide.
Localization gate (MUST if UI changed)
- If you added/changed any form, control, menu/toolbar item, or
TranslationString: run.\update-loc.cmdfrom the repo root and stage the regenerated English.xlf. CI fails if it's stale. See translation-system.
Commit
- Use Conventional Commits (e.g.
feat:,fix:,docs:,perf:,refactor:). - If any file under
src/app/GitExtensions.Extensibility/changed, note the plugin interface version impact in the commit message. - Create a new commit (do not amend published commits).
Postchecks (STOP conditions)
- NEVER leave
fixup!/squash!commits on the branch — thegitworkflow blocks merge. Autosquash locally. - Ensure the CLA is signed (the
cla-checkworkflow gates it). - Files MUST be CRLF and satisfy
.editorconfig/StyleCop. - Do not use
--no-verifyor disable CI checks to force a pass — fix the cause.
Do NOT push unless explicitly asked
Prepare the commit(s); only run git push when the user explicitly requests it.