home-lab/BRANCHING_STRATEGY.md
Geir Okkenhaug Jerstad f30013723e feat: initial NixOS home lab infrastructure setup
- Add modular flake-based NixOS configuration
- Implement GitOps foundation with CI/CD pipeline
- Create comprehensive documentation and branching strategy
- Add modular desktop environments (GNOME, Cosmic, Sway)
- Configure virtualization stack (Incus, Libvirt, Podman)
- Set up development tools and hardware-specific modules
- Establish user configuration with literate programming support

This commit represents the completion of Phase 1: Flakes Migration
with modular configuration, virtualization, and GitOps foundation.
2025-06-04 16:10:13 +02:00

7.1 KiB

🌳 Git Branching Strategy for Home Lab Infrastructure

Branch Structure

🚀 Main Branches

main

  • Purpose: Production-ready configurations
  • Protection: Protected branch with required reviews
  • Deployment: Automatically deployed to production machines
  • Stability: Should always be stable and tested

develop

  • Purpose: Integration branch for new features
  • Testing: Continuous integration testing
  • Merging: Features merge here first
  • Deployment: Deployed to staging/test environments

🔧 Supporting Branches

Feature Branches: feature/<description>

  • Purpose: Development of new features or modules
  • Naming: feature/add-cosmic-desktop, feature/sleeper-service-config
  • Lifetime: Temporary, deleted after merge
  • Source: Branch from develop
  • Merge: Merge back to develop

Machine Branches: machine/<machine-name>

  • Purpose: Machine-specific configuration changes
  • Naming: machine/congenital-optimist, machine/sleeper-service
  • Use Case: Testing machine-specific changes
  • Merge: Merge to develop after testing

Hotfix Branches: hotfix/<issue>

  • Purpose: Critical fixes for production
  • Naming: hotfix/security-patch, hotfix/boot-failure
  • Source: Branch from main
  • Merge: Merge to both main and develop

Module Branches: module/<module-name>

  • Purpose: Development of specific modules
  • Naming: module/virtualization, module/desktop-gnome
  • Scope: Single module focus
  • Testing: Module-specific testing

🏷️ Tagging Strategy

Version Tags: v<major>.<minor>.<patch>

  • Purpose: Mark stable releases
  • Format: v1.0.0, v1.2.1
  • Trigger: Major configuration milestones
  • Deployment: Tag triggers deployment workflows

Machine Tags: <machine>-v<version>

  • Purpose: Machine-specific deployments
  • Format: congenital-optimist-v1.0.0
  • Use Case: Track per-machine configurations
  • Rollback: Enable machine-specific rollbacks

Phase Tags: phase-<number>-complete

  • Purpose: Mark migration phase completion
  • Format: phase-1-complete, phase-2-complete
  • Documentation: Link to plan.md milestones

🔄 Workflow Examples

Standard Feature Development

# Start new feature
git checkout develop
git pull origin develop
git checkout -b feature/add-incus-clustering

# Develop and test
# ... make changes ...
nix flake check
sudo nixos-rebuild test --flake .#congenital-optimist

# Commit and push
git add .
git commit -m "feat: add Incus clustering support"
git push origin feature/add-incus-clustering

# Create PR to develop
# ... review process ...
# Merge to develop

Machine-Specific Changes

# Machine-specific branch
git checkout develop
git checkout -b machine/sleeper-service

# Test on specific machine
sudo nixos-rebuild test --flake .#sleeper-service

# Commit and merge
git add .
git commit -m "feat(sleeper-service): add NFS server configuration"

Hotfix Process

# Critical fix needed
git checkout main
git checkout -b hotfix/zfs-boot-failure

# Fix the issue
# ... emergency fix ...
sudo nixos-rebuild test --flake .#congenital-optimist

# Deploy to main
git add .
git commit -m "fix: resolve ZFS boot failure"
git checkout main
git merge hotfix/zfs-boot-failure
git tag v1.0.1

# Backport to develop
git checkout develop
git merge hotfix/zfs-boot-failure

📋 Commit Convention

Format

<type>(<scope>): <description>

[optional body]

[optional footer]

Types

  • feat: New feature or module
  • fix: Bug fix
  • docs: Documentation changes
  • style: Formatting, missing semicolons, etc.
  • refactor: Code refactoring
  • test: Adding tests
  • chore: Maintenance tasks

Scopes

  • machine: (congenital-optimist), (sleeper-service)
  • module: (desktop), (virtualization), (users)
  • config: (flake), (ci)
  • docs: (readme), (plan)

Examples

feat(desktop): add Cosmic desktop environment module
fix(virtualization): resolve Incus networking issues
docs(readme): update installation instructions
refactor(modules): reorganize desktop environment modules
chore(ci): update GitHub Actions workflow

🛡️ Branch Protection Rules

Main Branch Protection

  • Required Reviews: 1 reviewer minimum
  • Status Checks: All CI checks must pass
  • Up-to-date: Branch must be up to date before merging
  • Admin Override: Allow admin override for hotfixes
  • Force Push: Disabled
  • Deletion: Disabled

Develop Branch Protection

  • Required Reviews: 1 reviewer (can be self-review)
  • Status Checks: All CI checks must pass
  • Auto-merge: Allow auto-merge after checks
  • Force Push: Disabled for others

🔄 Merge Strategies

Feature to Develop

  • Strategy: Squash and merge
  • Reason: Clean history, single commit per feature
  • Title: Use conventional commit format

Develop to Main

  • Strategy: Merge commit
  • Reason: Preserve feature branch history
  • Testing: Full integration testing required

Hotfix to Main

  • Strategy: Fast-forward if possible
  • Reason: Immediate deployment needed
  • Testing: Minimal but critical testing

🚀 Deployment Strategy

Automatic Deployment

  • main → Production machines (congenital-optimist, sleeper-service)
  • develop → Test environment (if available)

Manual Deployment

  • Feature branches can be manually deployed for testing
  • Use nixos-rebuild test for non-persistent testing
  • Use nixos-rebuild switch for persistent changes

Rollback Strategy

# Rollback to previous version
git checkout main
git revert <commit-hash>
git tag rollback-v1.0.0-to-v0.9.9

# Or rollback to specific tag
git checkout v1.0.0
sudo nixos-rebuild switch --flake .#congenital-optimist

📊 Branch Lifecycle

Weekly Maintenance

  • Monday: Review open feature branches
  • Wednesday: Merge develop to main if stable
  • Friday: Clean up merged feature branches
  • Sunday: Update dependencies (automated)

Monthly Tasks

  • Review and update branch protection rules
  • Clean up old tags and releases
  • Update documentation
  • Security audit of configurations

🎯 Best Practices

Branch Naming

  • Use descriptive names: feature/improve-zfs-performance
  • Include issue numbers: feature/123-add-cosmic-desktop
  • Use lowercase with hyphens
  • Keep names under 50 characters

Commit Messages

  • Use imperative mood: "add", "fix", "update"
  • Keep first line under 50 characters
  • Include body for complex changes
  • Reference issues: "Fixes #123"

Testing Requirements

  • Always run nix flake check before committing
  • Test with nixos-rebuild test on relevant machines
  • Document testing performed in PR description
  • Consider impact on other machines

Code Review

  • Focus on configuration correctness
  • Check for security implications
  • Verify documentation updates
  • Ensure rollback plan exists
  • Test locally when possible

This branching strategy ensures stable, tested configurations while enabling rapid development and emergency fixes when needed.