Skip to content

Rhiza-Go Glossary

A comprehensive glossary of terms used in the Rhiza-Go template system.

Core Concepts

Living Templates

A template approach where configuration files remain synchronized with an upstream source over time, as opposed to traditional "one-shot" template generators (like cookiecutter or copier) that generate files once and then disconnect from the source.

Template Sync

The process of pulling updates from the upstream Rhiza-Go repository into a downstream project. Executed via make sync. Allows projects to receive ongoing improvements without manual copying.

Downstream Project

A project that has adopted Rhiza-Go templates. It receives updates from the upstream Rhiza-Go repository through template sync.

Upstream Repository

The source Rhiza-Go repository (jebel-quant/rhiza-go) that contains the canonical template configurations. Changes here propagate to downstream projects via sync.

Directory Structure

.rhiza/

The core directory containing Rhiza's template system files. This directory is synced from upstream and should generally not be modified directly.

.rhiza/rhiza.mk

The main Makefile containing core Rhiza functionality. Included by the project's root Makefile. Contains 268+ lines of make targets and logic.

.rhiza/make.d/

Directory for modular Makefile extensions. Files are auto-loaded in numeric order: - 00-19: Configuration files - 20-79: Task definitions - 80-99: Hook implementations

.rhiza/scripts/

Shell scripts for Rhiza operations (e.g., release.sh). POSIX-compliant for portability.

.rhiza/template.yml

Configuration file defining which files to sync from upstream, include/exclude patterns, and sync behavior.

local.mk

Optional file for project-specific Makefile extensions. Not synced from upstream, allowing local customization without conflicts.

Makefile System

Double-Colon Targets (::)

Make targets defined with :: instead of :. These are "hook" targets that can be extended by downstream projects without overriding the original implementation.

Hook Targets

Extension points in the Makefile system. Available hooks: - pre-install:: / post-install:: - Before/after dependency installation - pre-sync:: / post-sync:: - Before/after template sync - pre-validate:: / post-validate:: - Before/after project validation - pre-release:: / post-release:: - Before/after release creation - pre-bump:: / post-bump:: - Before/after version bump

Make Target

A named command in the Makefile (e.g., make test, make fmt). Rhiza provides 40+ targets out of the box.

Version Management

Version Bump

Incrementing the version number in the VERSION file. Types: - major: Breaking changes (1.0.0 → 2.0.0) - minor: New features (1.0.0 → 1.1.0) - patch: Bug fixes (1.0.0 → 1.0.1)

Release Tag

A git tag prefixed with v (e.g., v1.2.3) that triggers the release workflow.

CI/CD

SLSA Provenance

Supply-chain Levels for Software Artifacts. Cryptographic attestations proving that build artifacts were produced by a specific CI workflow. Enables supply chain verification.

SBOM (Software Bill of Materials)

A formal record of components used to build software. Generated in SPDX or CycloneDX formats for supply chain transparency. Generated via syft for Go binaries.

Tools

Go

The Go programming language. Rhiza-Go uses Go for all project development, testing, and building.

golangci-lint

A fast, configurable Go linter aggregator. Runs 25+ linters in parallel. Configured in .golangci.yml.

goimports

A tool that updates Go import lines, adding missing ones and removing unreferenced ones. Also formats code like gofmt.

go vet

Go's built-in static analysis tool. Examines Go source code and reports suspicious constructs.

go test

Go's built-in testing framework. Supports unit tests, benchmarks, and examples. Run via make test.

CodeQL

GitHub's semantic code analysis engine. Scans for security vulnerabilities in Go code and GitHub Actions workflows.

Configuration Files

go.mod

The Go module definition file. Contains the module path, Go version, and dependency requirements.

go.sum

Checksums file containing cryptographic hashes of module dependencies. Ensures reproducible builds across environments.

.go-version

Single-line file specifying the Go version for the project. Used by tooling and CI to ensure consistent Go versions.

.golangci.yml

Configuration for golangci-lint. Defines enabled linters, rules, and per-file exceptions.

.pre-commit-config.yaml

Configuration for pre-commit hooks. Defines checks that run before each git commit.

.editorconfig

Cross-editor configuration for consistent coding style (indentation, line endings, etc.).

renovate.json

Configuration for Renovate, an automated dependency update bot. Configured for gomod manager.

VERSION

Single-line file containing the project version (e.g., 0.1.0). Single source of truth for versioning.

Workflows

CI Workflow

Continuous Integration workflow that runs tests on every push and pull request.

Release Workflow

Multi-phase workflow triggered by version tags. Builds Go binaries for multiple platforms, creates GitHub releases, generates SBOM, and optionally publishes devcontainer images.

Sync Workflow

Workflow that synchronizes template files from upstream Rhiza-Go repository.

CodeQL Workflow

Workflow running code security analysis using GitHub's CodeQL engine for Go and GitHub Actions.

Commands Reference

Command Description
make install Install dependencies and set up environment
make test Run go test with coverage and race detection
make fmt Format code with go fmt, goimports, and golangci-lint --fix
make lint Run golangci-lint with 25+ linters
make vet Run go vet static analysis
make sync Sync templates from upstream
make bump Bump version number
make release Create and push release tag
make help Show all available targets