blumeops/docs/tutorials/contributing.md
Erich Blume 50046f42f8 Add Phase 3 tutorials with audience targeting
Create tutorials directory with learning-oriented content:
- what-is-blumeops: High-level orientation (Reader, AI)
- exploring-the-docs: Navigation guide (All audiences)
- ai-assistance-guide: Context for AI assistance (AI, Owner)
- contributing: First contribution workflow (Contributor)
- replicating-blumeops: Overview for replicators

Add replication sub-tutorials:
- tailscale-setup: Networking foundation
- kubernetes-bootstrap: Cluster setup
- argocd-config: GitOps configuration
- observability-stack: Metrics, logs, dashboards

Each tutorial explicitly identifies target audiences and links
heavily to reference material rather than re-explaining.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:51:32 -08:00

3.4 KiB

title tags
contributing
tutorials
contributing

Your First Contribution

Audiences: Contributor

This tutorial walks through making your first contribution to BluemeOps - from understanding the codebase to submitting a pull request.

Prerequisites

Before contributing, you'll need:

Understanding the Codebase

BlumeOps manages infrastructure through three main systems:

System Directory What It Manages
Ansible ansible/ Services running directly on indri
ArgoCD argocd/ Kubernetes services in the cluster
Pulumi pulumi/ [[tailscale

Most contributions involve either Ansible roles or ArgoCD manifests.

The Contribution Workflow

1. Clone and Branch

git clone ssh://git@forge.ops.eblu.me:2222/eblume/blumeops.git
cd blumeops
git checkout -b feature/your-change-name

2. Make Your Changes

Depending on what you're changing:

For Kubernetes services:

  • Edit manifests in argocd/manifests/<service>/
  • Or create new Application in argocd/apps/

For Indri services:

  • Edit or create roles in ansible/roles/
  • Update ansible/playbooks/indri.yml if adding a role

For documentation:

  • Edit files in docs/
  • Add changelog fragment (see below)

3. Add a Changelog Fragment

For user-visible changes:

echo "Description of your change" > docs/changelog.d/your-branch.feature.md

Fragment types:

  • .feature.md - New functionality
  • .bugfix.md - Bug fixes
  • .infra.md - Infrastructure changes
  • .doc.md - Documentation
  • .misc.md - Other

4. Test Your Changes

Before pushing, always test:

For Kubernetes changes:

# Preview what will change
argocd app diff <service>

For Ansible changes:

# Dry run
mise run provision-indri -- --check --diff --tags <role>

5. Commit and Push

git add <files>
git commit -m "Brief description of change"
git push -u origin feature/your-change-name

6. Create a Pull Request

tea pr create --title "Your PR Title" --description "$(cat <<'EOF'
## Summary
- What you changed
- Why you changed it

## Deployment and Testing
- [ ] Tested locally / dry run
- [ ] Ready for ArgoCD sync / Ansible apply

EOF
)"

7. Wait for Review

Erich will review your PR and may leave comments. Check for feedback:

mise run pr-comments <pr_number>

Address each comment, then Erich will:

  1. Approve the changes
  2. Deploy them (you don't need to do this)
  3. Merge the PR

A simple first contribution - adding a service to the Homepage dashboard (go.ops.eblu.me):

  1. Find the service's Ingress in argocd/manifests/<service>/
  2. Add homepage annotations:
annotations:
  gethomepage.dev/enabled: "true"
  gethomepage.dev/name: "Service Name"
  gethomepage.dev/group: "Apps"
  gethomepage.dev/icon: "service.png"
  1. Create PR and wait for sync

Getting Help

  • Browse reference/index for technical details
  • Check CLAUDE.md in the repo for rules and conventions
  • Ask Erich directly (he's friendly)