Contributing
Thank you for your interest in myriarch. This project welcomes contributions of all kinds. This document explains how to get started and what we expect from a contribution. Please also read our Code of Conduct.
Ways to contribute
- Report a bug or request a feature in GitHub Issues. Use the issue forms; they ask for the details we need.
- Improve the documentation: fix a typo, clarify a step, add a task guide. The documentation is in docs/.
- Test and give feedback: try the quickstart, run the Kubernetes probe, report what surprised you.
- Fix a bug or implement a feature with a pull request.
- Tell us how you use myriarch by adding your organization to ADOPTERS.md.
Security vulnerabilities are never reported in public issues. Follow SECURITY.md.
Before you start
For anything larger than a small fix, open an issue first (or comment on an existing one) and describe the problem and your idea. That avoids duplicate work and lets a maintainer say early whether the change fits the project. Architecture-level changes need a decision record, see Documentation and decision records.
Issues labeled good first issue or help wanted are good starting points once they exist.
Development setup
The development guide covers the toolchain, the repository layout, the build tags, the web UI, the tests and the documentation tooling. In short:
git clone https://github.com/<your-account>/myriarch.git # your fork
cd myriarch
make web-build && make build
make dev # http://localhost:8080, dev logins in the README
Checks before you open a pull request
Run make check-local. It runs the gates that CI runs and the end-to-end test: Go build, vet and gofmt, go test -race,
the web checks, the example repositories, shellcheck, the workflow checks, the Helm chart checks, the language guard and the
documentation checks. make check-local SKIP=e2e leaves out the long end-to-end test, and make tools installs the pinned tools.
The details and the variables are in the development guide; how CI runs the same gates, and how to
reproduce a job, is in Continuous integration.
Please also make sure that:
- new behavior has tests;
- generated files are regenerated:
pnpm gen:apiinweb/after a change ofapi/openapi.yaml, andmake docs-genafter a change of commands, flags, help texts,api/openapi.yaml, configuration keys, environment reads, metrics or values of the Helm chart (docs/reference/cli,docs/reference/api, the configuration, environment variable and metrics pages anddeploy/helm/myriarch/values.schema.jsonare generated); - the documentation is updated: every new setting, field, flag or API path appears in the matching page under
docs/(the GitOps field reference is docs/reference/gitops-schema.md); - user-visible changes have a line under “Unreleased” in CHANGELOG.md.
Pull request flow
- Fork the repository and create a branch from
mainin your fork. - Make small, focused changes. One pull request should do one thing; unrelated cleanups belong in their own pull request.
- Open a pull request against
main. Fill in the template: what changes and why, the linked issue, and the checklist. - A maintainer reviews it. Reviews are about correctness, security, maintainability and fit; expect questions and requests for changes. Push follow-up commits to the same branch.
- The required checks must pass: the DCO check and
ci-ok, the aggregate of all CI jobs. CI runs automatically for maintainers; the first workflow run of a pull request from a new contributor starts after a maintainer approves it. - A maintainer merges, by squash or rebase. CODEOWNERS lists who is requested for review.
Commit messages
Commit messages are written in English, in the imperative mood. The first line is a short summary (about 72 characters
at most), followed by a blank line and, when it helps, a body that explains the why. Reference issues with Fixes #123.
English is the language of the whole project, including code comments, log messages, documentation, issues and discussions (ADR-0020).
Sign-off: Developer Certificate of Origin
Every commit must carry a Signed-off-by: line that matches the commit author. It certifies that you wrote the change or
have the right to submit it under the project license, according to the
Developer Certificate of Origin 1.1. The project uses the DCO and no Contributor
License Agreement (ADR-0019).
Add the line with -s:
git commit -s -m "Fix the maintenance window check for negative offsets"
This produces Signed-off-by: Your Real Name <your-email@example.com>, using the name and e-mail address from your Git
configuration. Use your real, non-anonymous name; a GitHub noreply address is fine as the e-mail address.
If you forgot the sign-off, fix it before the merge:
git commit --amend -s --no-edit # the last commit only
git rebase --signoff main # every commit of the branch (rebase onto the current main)
git push --force-with-lease # update your pull request
The DCO check is a required status check; a pull request with an unsigned commit cannot be merged.
AI-assisted contributions
You may use AI coding tools. The rules are the same as for every contribution, and they put the responsibility on you:
- You review and understand every line you submit, and you can explain and defend it in review.
- You are responsible for the result: correctness, security, license compatibility and tests.
- You sign the DCO personally. An AI tool never adds a
Signed-off-by:line, and nobody forges one on behalf of another person. - Disclose substantial AI assistance in the pull request description (which tool, for what). Optionally add a trailer to
the commit message, for example
Assisted-by: <tool name>. - Do not submit generated text or code that you have not verified, and do not paste confidential material into external tools.
Maintainers may ask for changes or close pull requests that look like unreviewed generated output.
AGENTS.md contains guidance written for coding agents.
Documentation and decision records
The documentation under docs/ follows the structure and rules in the
development guide: Hugo-compatible front matter, relative links, neutral examples,
English text. make docs-check verifies the mechanical rules.
Decisions that shape the architecture, the public interfaces, the security model, the license or the governance are recorded as architecture decision records (ADRs). Copy docs/adr/0000-template.md, use the next free number, and propose the record in a pull request. The process is described in docs/adr/README.md. Accepted records are not rewritten; a change of mind is a new record. Editorial fixes such as links and typos are fine.
Licensing of contributions
By contributing you agree that your contribution is licensed under the license of the part of the project you change:
- Source code (Go, TypeScript, shell, Helm templates, build files), data and configuration files: Apache License 2.0.
- Documentation (all Markdown files:
docs/, the decision records, website text, README and the other root documents): Creative Commons Attribution 4.0 (CC-BY-4.0). Code snippets inside documentation are Apache-2.0. - Brand artwork (
assets/brand/,web/public/): CC-BY-4.0. - Exceptions under Apache-2.0:
GOVERNANCE.mdandCONTRIBUTOR_LADDER.md(adapted from an Apache-2.0 template) and the GitOps template (gitops-template/).
See ADR-0018. The project does not collect copyright assignments.
Headers and REUSE
The repository follows the REUSE specification (ADR-0030).
New source files (Go, TypeScript, JavaScript, shell, PowerShell, Python, SQL, CSS, HTML, Dockerfiles, Helm templates and the Makefile) start with exactly these two lines in the comment syntax of the file, followed by one empty line (HTML and Helm templates: the content follows the header directly):
Copyright The Myriarch Authors SPDX-License-Identifier: Apache-2.0The header goes at the top of the file. Only a shebang, a
shellcheckdirective, a Dockerfile parser directive such as# syntax=...or a leading<!doctype>line stays in front of it. Do not add years or personal names.make license-headersinserts the header where it is missing.make licenses-check(also the gatelicensesofmake check-local) reports files without a correct header.Files without comments (JSON, YAML, data files, images) and third-party content get an entry in REUSE.toml. Third-party content needs an attributed entry: the upstream source (URL and tag or commit), the license and the copyright holder of the original, kept verbatim. Generated code and vendored assets keep their original headers.
ci/reuse-lint.shrunsreuse lint; install the pinned tool withci/install-tools.sh reuse. Details are in the development guide.
Getting help
Open an issue with the “Question” form for questions, or write to maintainers@myriarch.dev for matters that are not suited for public discussion (not for security reports, see SECURITY.md).