Moko Consulting

Open-source software for Joomla, Gitea, and web platforms. Home of MokoSuite, MokoGitea, and MokoCLI.

Tennessee
contributing/branching-strategy.-

Branching Strategy

Branch model for all MokoConsulting repositories.

Branch Types

main

  • Stable release branch — always deployable
  • Protected: no direct pushes, PR-only merges
  • Tags created from main for releases (e.g., v1.0.0)
  • All CI checks must pass before merge

dev/{description}

  • Feature and fix branches — all development work happens here
  • Created from main
  • Uses the dev/ prefix with a descriptive name:
dev/add-s3-uploader
dev/fix-backup-permissions
dev/update-cross-post-queue
dev/refactor-engine-steps
  • Deleted after merge to main

Workflow

main ──────────────────────────────────────────────── main
  │                                                     ▲
  └──── dev/add-feature ────── PR ────── squash merge ──┘
  1. Create branch from latest main:

    git checkout main
    git pull origin main
    git checkout -b dev/my-feature
    
  2. Develop on the branch with meaningful commits

  3. Push and create a PR:

    git push -u origin dev/my-feature
    
  4. Review — at least one maintainer approval, CI must pass

  5. Merge — squash merge preferred for feature branches

  6. Clean up — branch is deleted after merge (auto-delete enabled)

Rules

  • Never force-push to main
  • Never commit directly to main — always use PRs
  • Keep branches short-lived — merge within days, not weeks
  • Rebase on main if your branch falls behind (or merge main into your branch)
  • One logical change per branch — don't bundle unrelated work

Tags

Release tags follow semantic versioning:

v1.0.0    # Major release
v1.1.0    # Minor feature release
v1.1.1    # Patch/bugfix release

Tags are created from main only, either manually or by CI on release.

Hotfixes

For urgent production fixes:

  1. Create dev/hotfix-{description} from main
  2. Fix the issue with minimal changes
  3. PR with expedited review
  4. Merge and tag immediately