@CONTRIBUTING.md
This file is for AI coding agents (Claude Code, Codex CLI, Gemini CLI, etc.).
See CONTRIBUTING.md for the human contributor guide and the
canonical style references under docs/.
aqua-registry is consumed by mise as a backend, but it is an aqua project. Bug reports that only reproduce through mise (or asdf) get closed and redirected to the mise community.
Before opening an issue or PR for a bug, install aqua, write a minimal
aqua.yaml, and reproduce the failure with aqua directly. In the report,
include:
aquaversion- OS and CPU architecture
- the
aqua.yaml - the exact command and its output (expected vs. actual)
Background: aquaproj/aqua-registry#30430.
The most common reasons the maintainer closes PRs without merging. Check each before starting work.
-
Duplicates. Search open and recently-closed PRs for the package name before opening one:
gh pr list --repo aquaproj/aqua-registry --search "<package>" --state all -
Doesn't install as a single binary on
$PATH. aqua installs commands intoAQUA_ROOT_DIR/bin. Out of scope: tools that expect a different install location (e.g., Helm plugins, Vim/Neovim plugins, Gauge plugins),libexec/layouts, env-var-based install roots, and anything installed viapip/npm/gem. In scope: standalone binaries that act as plugins for another tool by naming convention — e.g.,kubectl-foobinaries are supported because kubectl just looks forkubectl-*on$PATH. See docs/support_policy.md. -
Upstream repo doesn't resolve.
github.com/<owner>/<repo>must be a real GitHub repo whose tags match release versions. The maintainer will not repoint an existing package to a fork — submit the fork as a new package instead. -
Unsigned commits. Auto-flagged by CI and won't merge. Set up commit signing before pushing. See docs/manner.md.
-
Manual
pkg.yamlversion bumps.pkg.yamlis test data, not a version source. The Renovate bot owns version updates; manual bumps get reverted or closed.
mkdir -p .ai
if [ ! -d .ai/aqua ]; then
git clone https://github.com/aquaproj/aqua .ai/aqua
fi
git -C .ai/aqua pull origin mainKey paths:
.ai/aqua/website/docs/reference/registry-config/*.md— every field inregistry.yaml..ai/aqua/json-schema/registry.json— JSON Schema forregistry.yaml.
When the project docs link to https://aquaproj.github.io/docs/<path>, the
source markdown is at .ai/aqua/website/docs/<path>.
For github_release and cargo packages, run:
argd s "<owner>/<repo>" # e.g. argd s cli/cliFor other types, argd s -l 1 "<package>" generates a stub. The maintainer
rejects PRs that hand-write configuration the scaffolder could have generated,
because manual code reliably misses old versions and uncommon platforms. See
docs/add_package.md for details and edge cases.
Run argd t <package> and paste the command + a snippet of the output into the
PR description. "I tested it" without evidence delays review.
These come up repeatedly on PR review. Check each before submitting.
- End the file with a single trailing newline.
- Don't quote strings unless YAML requires it.
description: foo, notdescription: "foo". Same forsrc,asset, etc. descriptionis one short sentence. No leading/trailing whitespace, no trailing.or!, no emojis. Aim for ~80 characters.format: raw⇒ omitfiles[].src. Thefilesblock is unnecessary when there's no archive to extract.supported_envs: list arch-qualified entries when arch coverage is partial. Barelinuximplies bothlinux/amd64andlinux/arm64. If only one arch is supported, write it out:[darwin, linux/amd64, windows].- Use
amd64/arm64, notx64/aarch64. CI will fail otherwise. version_prefixmust match the actual tag prefix. If releases are taggedlychee-v0.15.0, useversion_prefix: lychee-v, notlychee-.version_filteris not for dropping support for old versions. Useversion_constraint+no_asset/error_messagefor that.version_filteronly excludes versions fromargd sscaffolding.- Drop empty
replacements:blocks. If you're not transforming the template, the field shouldn't be there. - Prefer
{{.Asset}}.sha256over repeating the full asset template when the checksum URL is just the asset URL with a suffix. aliasesis for renames only. Usesearch_wordsfor discoverability — don't put marketing terms or alternate spellings inaliases.- Pick
type:per the precedence in docs/registry_yaml.md. Prefergithub_release>http>go_build— only fall back when the simpler type can't work. - Don't add a
checksum:block when the checksum file is just a bare hash (file_format: raw); the defaults handle it.
- Pin one test version per
version_overridesbranch. If you add an override for versions <1.5, also add apkg.yamlentry pinned in that range so CI exercises the override. - Don't drop existing test versions without explaining why in the PR body. Deleted versions weaken regression coverage.
- Show the verification command and its output.
- Disclose AI usage per docs/ai.md: add the agent as a commit co-author or note it in the PR body. Don't respond to maintainer questions with "I don't know, the AI wrote it" — review and own the output.
The .agents/skills/ and .claude/skills/ directories contain reusable
workflows (e.g., fetch-doc to pull aqua spec docs, review-change to lint
proposed package changes). Prefer invoking them over re-deriving the procedure.