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>
3.4 KiB
3.4 KiB
| title | tags | ||
|---|---|---|---|
| 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:
- Access to the tailscale network (request from Erich)
- SSH key added to forgejo (https://forge.ops.eblu.me)
teaCLI installed for PR creation
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.ymlif 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:
- Approve the changes
- Deploy them (you don't need to do this)
- Merge the PR
Example: Adding a Homepage Link
A simple first contribution - adding a service to the Homepage dashboard (go.ops.eblu.me):
- Find the service's Ingress in
argocd/manifests/<service>/ - Add homepage annotations:
annotations:
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Service Name"
gethomepage.dev/group: "Apps"
gethomepage.dev/icon: "service.png"
- Create PR and wait for sync
Getting Help
- Browse reference/index for technical details
- Check
CLAUDE.mdin the repo for rules and conventions - Ask Erich directly (he's friendly)
Related
- ai-assistance-guide - If using AI assistance for contributions
- replicating-blumeops - If you want to build your own instead