--- title: contributing tags: - 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: - Access to the [[tailscale|Tailscale]] network (request from Erich) - SSH key added to [[forgejo|Forgejo]] (https://forge.ops.eblu.me) - `tea` CLI 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|Tailscale]] ACLs and DNS | Most contributions involve either Ansible roles or ArgoCD manifests. ## The Contribution Workflow ### 1. Clone and Branch ```bash 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//` - 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: ```bash 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: ```bash # Preview what will change argocd app diff ``` For Ansible changes: ```bash # Dry run mise run provision-indri -- --check --diff --tags ``` ### 5. Commit and Push ```bash git add git commit -m "Brief description of change" git push -u origin feature/your-change-name ``` ### 6. Create a Pull Request ```bash 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: ```bash mise run pr-comments ``` Address each comment, then Erich will: 1. Approve the changes 2. Deploy them (you don't need to do this) 3. Merge the PR ## Example: Adding a Homepage Link A simple first contribution - adding a service to the Homepage dashboard (go.ops.eblu.me): 1. Find the service's Ingress in `argocd/manifests//` 2. Add homepage annotations: ```yaml annotations: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Service Name" gethomepage.dev/group: "Apps" gethomepage.dev/icon: "service.png" ``` 3. Create PR and wait for sync ## Getting Help - Browse [[reference/index|Reference]] for technical details - Check `CLAUDE.md` in 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