argoproj/argo-cd
Tooling
The build, lint, and codegen tooling that ships with argoproj/argo-cd.
Make is the canonical interface
Every workflow has a Make target. make help lists them. The most-used are listed in development workflow. The Makefile itself is ~27 KB and is the single source of truth — CI runs the same targets.
Containerized toolchain
Argo CD also ships a Docker-based dev environment so contributors do not need to install Go, Node, or protoc on their host:
Dockerfile.dev— pre-installs the Go toolchain and node for ad-hoc shells.hack/Dockerfile.dev-tools— the "test tools" image used bymaketargets that mount the source into a container (seerun-in-test-toolsmacros in the Makefile).Dockerfile— the production image actually shipped on container registries.Dockerfile.tilt,Dockerfile.ui.tilt— used by the Tilt-based dev workflow (Tiltfile).
Linters
| Linter | Config | Target |
|---|---|---|
golangci-lint |
.golangci.yaml |
make lint |
| ESLint | ui/eslint.config.mjs |
make lint-ui |
| Prettier | ui/.prettierrc |
invoked from UI lint |
goreleaser config check |
.goreleaser.yaml |
release pipeline |
| Snyk | .snyk, hack/snyk-*.sh |
scheduled update-snyk.yaml workflow |
| CodeQL | .github/workflows/codeql.yml |
scheduled scans |
| Dependency hygiene | renovate.json, renovate-presets/ |
continuous chore(deps): PRs |
Code generation
The codegen story is split across several scripts under hack/:
| Script | Purpose |
|---|---|
hack/generate-proto.sh |
Runs protoc over every *.proto to produce pb.go, gRPC stubs, and OpenAPI specs. |
hack/update-codegen.sh |
controller-gen deepcopy + CRD spec generation (used via make codegen). |
hack/update-openapi.sh |
openapi-gen over the API types into openapi_generated.go. |
hack/update-manifests.sh |
Re-renders the install YAML bundles via kustomize build over manifests/base/ and the variant overlays. |
hack/generate-mock.sh |
Wraps mockery with the project config. |
hack/generate-actions-list.sh |
Generates the supported resource actions list from resource_customizations/. |
hack/generate-icons-typescript.sh |
Generates TypeScript icon constants for the UI. |
hack/gen-resources/ |
Helper for generating bulk test resources used by load tests. |
hack/gen-crd-spec/ |
Standalone generator binary for CRD specs. |
hack/gen-docs/ |
Auto-generates portions of the CLI docs from cobra. |
hack/gen-catalog/ |
Generates the notifications catalog docs from notifications_catalog/. |
The single command that orchestrates all of this is:
make codegenCI/CD
.github/workflows/ defines all CI:
| Workflow | What it does |
|---|---|
ci-build.yaml |
Lint, codegen verify, build, unit tests, e2e tests, image build, CodeQL. The main PR gate. |
pr-title-check.yml |
Enforces the semantic PR title prefix. |
release.yaml, init-release.yaml |
Cut and publish releases. |
image.yaml, image-reuse.yaml |
Build and reuse container images across jobs. |
cherry-pick.yml, cherry-pick-single.yml |
Backports to release branches. |
bump-major-version.yaml |
Mechanical major-version bumps (e.g., /v3 → /v4). |
codeql.yml |
Static security analysis. |
scorecard.yaml |
OpenSSF scorecard. |
stale.yaml |
Closes stale issues/PRs. |
update-snyk.yaml, renovate.yaml |
Dependency hygiene. |
Release artifacts are produced by goreleaser (.goreleaser.yaml) for the CLI and by the workflow YAMLs for container images.
Tilt
Tiltfile (~7.5 KB) brings up the entire stack inside a local k3d/kind cluster with hot-reload for both Go and UI. It is an alternative to goreman start for contributors who prefer cluster-style development.
Read the Docs
mkdocs.yml and .readthedocs.yaml configure the docs site at https://argo-cd.readthedocs.io/. Local preview:
make serve-docs # runs mkdocs serve in a Docker containerBuilt by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.