Open-Source Wikis

/

MinIO

/

How to contribute

/

Tooling

minio/minio

Tooling

The tools the build, test, and release process rely on, plus how the repo configures them.

Make

The single entry point. Makefile declares ~40 phony targets. The headline ones:

Target What it does
make help Lists every documented target.
make checks Runs buildscripts/checkdeps.sh to verify Go and required tools.
make getdeps Installs golangci-lint into .bin/golangci/<version>/.
make build Compiles ./minio with version stamps from buildscripts/gen-ldflags.go.
make install Same as build but installs into $GOPATH/bin/minio.
make install-race Race-instrumented build (CGO_ENABLED=1 -race).
make crosscompile Cross-compiles for every supported platform via buildscripts/cross-compile.sh.
make verifiers Lint + check-gen.
make test go test ./... with -tags kqueue,dev.
make test-race Race-instrumented unit tests.
make verify*, make test-* The integration test buckets covered in Testing.
make hotfix One-off patched build using Dockerfile.hotfix and the pkger packager.
make docker Build a Docker image with the local ./minio.
make clean Remove ./minio, build artefacts, release scratch directories.

Linters

  • golangci-lint — driven by .golangci.yml. Pinned via make getdeps, downloaded into .bin/golangci/<version>/ so CI and local runs match.
  • typos — optional. If the binary is on PATH, make lint runs it with the allowlist in .typos.toml.

Code generation

Two go generate tools, both declared in the tool block of go.mod so they ship with the module:

  • github.com/tinylib/msgp — MessagePack encoder/decoder generation. Triggered by //go:generate msgp directives. Produces <file>_gen.go and <file>_gen_test.go.
  • golang.org/x/tools/cmd/stringer — generates String() methods for typed enums. Triggered by //go:generate stringer -type=<T> -output=<T>_string.go directives.

make verifiers runs go generate ./... and fails if any _gen.go or _string.go file changed but wasn't committed (Makefile:check-gen).

Build version stamping

buildscripts/gen-ldflags.go produces the -ldflags value used at build time. It encodes the release timestamp, git SHA, and any hotfix marker into compiled-in symbols read by cmd/build-constants.go.

CI

Workflows live in .github/workflows/. They cover:

  • Lint + unit tests on push and pull request.
  • Resiliency suites and integration tests for the bigger feature areas.
  • Release tag handling.

Local reproduction is just make verifiers && make test && make verify.

Docker

Dockerfile Use
Dockerfile Community image. Expects a pre-built ./minio binary.
Dockerfile.cicd Image used by CI for running shell-based suites.
Dockerfile.release Released community image (per-release).
Dockerfile.release.old_cpu Build for older AMD64 CPUs without modern ISA extensions.
Dockerfile.hotfix Hotfix-tagged image produced by make hotfix.
Dockerfile.scratch "From scratch" image; no shell or package manager.

docker-buildx.sh and dockerscripts/docker-entrypoint.sh are the runtime wrappers that the images use.

Release packager

pkger (a MinIO-internal Debian packager) is downloaded by the make hotfix target and produces .deb artefacts. Hotfix binaries are signed with minisign (the minisign Go package) using a key checked in only to MinIO's own release infrastructure.

Helm

helm/minio/ is the community-maintained chart. helm-releases/ keeps every prior chart bundle for reproducibility. helm-reindex.sh regenerates index.yaml after a new chart is added.

Misc

  • update-credits.sh regenerates CREDITS (a 1.8 MB textual list of every dependency's licence).
  • _config.yml tells GitHub Pages how to render the README in the project landing page.
  • CNAME pins the documentation domain.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Tooling – MinIO wiki | Factory