Development
Build instructions
Prerequisites
Building
# Build mani for your platform target
make build
# Build mani binaries and archives for all platforms using goreleaser
make build-all
# Generate Manpage
make gen-man
Developing
# Format code
make gofmt
# Manage dependencies (download/remove unused)
make tidy
# Lint code
make lint
# Build mani and get an interactive docker shell with completion
make build-exec
# Standing in _example directory you can run the following to debug faster
(cd .. && make build-and-link && cd - && ../dist/mani run multi -p template-generator)
Releasing
The following workflow is used for releasing a new mani
version:
- Create pull request with changes
- Verify build works (especially windows build)
make build
make build-all
- Pass all integration and unit tests locally
make test-integration
make test-unit
- Update
config.man
andconfig.md
if any config changes and generate manpagemake gen-man
- Update
Makefile
andCHANGELOG.md
with correct version, and add all changes toCHANGELOG.md
- Squash-merge to main with
Release vx.y.z
and description of changes - Run
make release
, which will:- Create a git tag with release notes
- Trigger a build in Github that builds cross-platform binaries and generates release notes of changes between current and previous tag
Dependency Graph
Create SVG dependency graphs using graphviz and goda
goda graph "github.com/alajmo/mani/..." | dot -Tsvg -o res/graph.svg
goda graph "github.com/alajmo/mani:all" | dot -Tsvg -o res/graph-full.svg