From 6914a4050a78eaef13e183657b71362e2275b138 Mon Sep 17 00:00:00 2001 From: Christian Goll Date: Fri, 14 Feb 2025 12:09:10 +0100 Subject: [PATCH] Add help to Makefile Signed-off-by: Christian Goll --- CHANGELOG.md | 1 + Makefile | 185 +++++++++++++++++++++---------------- userdocs/quickstart/el.rst | 2 +- warewulf.spec.in | 2 +- 4 files changed, 107 insertions(+), 83 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b57c4bae..02de4550 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added `wwctl image build --syncuser`. #1321 - Added support for a DNSSEARCH netdev tag in network configuration overlays. #1256 - Added `WW_HISTFILE` to control shell history location during `wwctl image shell`. #1732 +- Added target help in Makefile. #1740 ### Changed diff --git a/Makefile b/Makefile index 7b0c2447..9444f78d 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,44 @@ +.DEFAULT_GOAL := help + .PHONY: all all: build +##@ General + +# https://gist.github.com/prwhite/8168133 +# Maybe use https://github.com/drdv/makefile-doc in the future +help: ## Display this help + @awk 'BEGIN {FS = ":.*##"; printf "The Warewulf Makefile\n\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + @echo + @echo "Define OFFLINE_BUILD=1 to avoid requiring network access." + include Variables.mk include Tools.mk +##@ Build + .PHONY: build -build: wwctl wwclient etc/bash_completion.d/wwctl +build: wwctl wwclient etc/bash_completion.d/wwctl ## Build the Warewulf binaries .PHONY: api api: wwapid wwapic wwapird .PHONY: docs -docs: man_pages reference +docs: man_pages reference ## Build the documentation -vendor: - go mod vendor +.PHONY: spec +spec: warewulf.spec ## Create an RPM spec file -.PHONY: tidy -tidy: - go mod tidy - -.PHONY: fmt -fmt: - go fmt ./... +.PHONY: dist +dist: $(config) ## Create a distributable source tarball + rm -rf .dist/ + mkdir -p .dist/$(WAREWULF)-$(VERSION) + git ls-files >.dist/dist-files + tar -c --files-from .dist/dist-files | tar -C .dist/$(WAREWULF)-$(VERSION) -x + test -d vendor/ && cp -a vendor/ .dist/$(WAREWULF)-$(VERSION) || : + scripts/get-version.sh >.dist/$(WAREWULF)-$(VERSION)/VERSION + tar -C .dist -czf $(WAREWULF)-$(VERSION).tar.gz $(WAREWULF)-$(VERSION) + rm -rf .dist/ config = include/systemd/warewulfd.service \ internal/pkg/config/buildconfig.go \ @@ -65,28 +81,49 @@ etc/bash_completion.d/wwctl: wwctl mkdir -p etc/bash_completion.d/ ./wwctl --emptyconf completion bash >etc/bash_completion.d/wwctl +.PHONY: reference +reference: wwctl + mkdir -p userdocs/reference + ./wwctl --emptyconf genconfig reference userdocs/reference/ + +latexpdf: reference + make -C userdocs latexpdf + +##@ Development + +vendor: ## Create the vendor directory (if it does not exist) + go mod vendor + +.PHONY: tidy +tidy: ## Clean up golang dependencies + go mod tidy + +.PHONY: fmt +fmt: ## Update source code formatting + go fmt ./... + .PHONY: lint -lint: $(config) +lint: $(config) ## Run the linter $(GOLANGCI_LINT) run --build-tags "$(WW_GO_BUILD_TAGS)" --timeout=5m ./... .PHONY: staticcheck -staticcheck: $(GOLANG_STATICCHECK) $(config) +staticcheck: $(GOLANG_STATICCHECK) $(config) ## Run static code check $(GOLANG_STATICCHECK) ./... .PHONY: deadcode -deadcode: $(config) +deadcode: $(config) ## Check for unused code $(GOLANG_DEADCODE) -test ./... .PHONY: vet -vet: $(config) +vet: $(config) ## Check for invalid code go vet ./... .PHONY: test -test: $(config) +test: $(config) ## Run full test suite TZ=UTC go test ./... .PHONY: test-cover -test-cover: $(config) +test-cover: $(config) ## Generate a coverage report for the test suite rm -rf coverage mkdir coverage go list -f '{{if gt (len .TestGoFiles) 0}}"TZ=UTC go test -covermode count -coverprofile {{.Name}}.coverprofile -coverpkg ./... {{.ImportPath}}"{{end}}' ./... | xargs -I {} bash -c {} @@ -95,8 +132,57 @@ test-cover: $(config) rm *.coverprofile go tool cover -html=coverage/cover.out -o=coverage/cover.html +.PHONY: LICENSE_DEPENDENCIES.md +LICENSE_DEPENDENCIES.md: $(GOLANG_LICENSES) scripts/update-license-dependencies.sh + rm -rf vendor + GOLANG_LICENSES=$(GOLANG_LICENSES) scripts/update-license-dependencies.sh + +.PHONY: licenses +licenses: LICENSE_DEPENDENCIES.md # Update LICENSE_DEPENDENCIES.md + +.PHONY: cleanconfig +cleanconfig: + rm -f $(config) + rm -rf etc/bash_completion.d/ + +.PHONY: cleantest +cleantest: + rm -rf *.coverprofile + +.PHONY: cleandist +cleandist: + rm -f $(WAREWULF)-$(VERSION).tar.gz + rm -rf .dist/ + +.PHONY: cleanmake +cleanmake: + rm -f Defaults.mk + +.PHONY: cleanbin +cleanbin: + rm -f wwapi{c,d,rd} + rm -f wwclient + rm -f wwctl + rm -f update_configuration + +.PHONY: cleandocs +cleandocs: + rm -rf userdocs/_* + rm -rf userdocs/reference/* + rm -rf docs/man/man1 + rm -rf docs/man/man5/*.gz + +.PHONY: cleanvendor +cleanvendor: + rm -rf vendor + +.PHONY: clean +clean: cleanconfig cleantest cleandist cleantools cleanmake cleanbin cleandocs ## Remove built configuration, docs, binaries, and artifacts + +##@ Installation + .PHONY: install -install: build docs +install: build docs ## Install Warewulf from source install -d -m 0755 $(DESTDIR)$(BINDIR) install -d -m 0755 $(DESTDIR)$(WWCHROOTDIR) install -d -m 0755 $(DESTDIR)$(WWOVERLAYDIR) @@ -162,64 +248,6 @@ init: cp -r tftpboot/* $(WWTFTPDIR)/ipxe/ restorecon -r $(WWTFTPDIR) -.PHONY: dist -dist: $(config) - rm -rf .dist/ - mkdir -p .dist/$(WAREWULF)-$(VERSION) - git ls-files >.dist/dist-files - tar -c --files-from .dist/dist-files | tar -C .dist/$(WAREWULF)-$(VERSION) -x - test -d vendor/ && cp -a vendor/ .dist/$(WAREWULF)-$(VERSION) || : - scripts/get-version.sh >.dist/$(WAREWULF)-$(VERSION)/VERSION - tar -C .dist -czf $(WAREWULF)-$(VERSION).tar.gz $(WAREWULF)-$(VERSION) - rm -rf .dist/ - -.PHONY: reference -reference: wwctl - mkdir -p userdocs/reference - ./wwctl --emptyconf genconfig reference userdocs/reference/ - -latexpdf: reference - make -C userdocs latexpdf - -.PHONY: cleanconfig -cleanconfig: - rm -f $(config) - rm -rf etc/bash_completion.d/ - -.PHONY: cleantest -cleantest: - rm -rf *.coverprofile - -.PHONY: cleandist -cleandist: - rm -f $(WAREWULF)-$(VERSION).tar.gz - rm -rf .dist/ - -.PHONY: cleanmake -cleanmake: - rm -f Defaults.mk - -.PHONY: cleanbin -cleanbin: - rm -f wwapi{c,d,rd} - rm -f wwclient - rm -f wwctl - rm -f update_configuration - -.PHONY: cleandocs -cleandocs: - rm -rf userdocs/_* - rm -rf userdocs/reference/* - rm -rf docs/man/man1 - rm -rf docs/man/man5/*.gz - -.PHONY: cleanvendor -cleanvendor: - rm -rf vendor - -.PHONY: clean -clean: cleanconfig cleantest cleandist cleantools cleanmake cleanbin cleandocs - ifndef OFFLINE_BUILD wwctl: vendor wwclient: vendor @@ -254,8 +282,3 @@ cleanproto: clean: cleanvendor endif - -.PHONY: LICENSE_DEPENDENCIES.md -LICENSE_DEPENDENCIES.md: $(GOLANG_LICENSES) scripts/update-license-dependencies.sh - rm -rf vendor - GOLANG_LICENSES=$(GOLANG_LICENSES) scripts/update-license-dependencies.sh diff --git a/userdocs/quickstart/el.rst b/userdocs/quickstart/el.rst index 069634d6..22add0a2 100644 --- a/userdocs/quickstart/el.rst +++ b/userdocs/quickstart/el.rst @@ -30,7 +30,7 @@ If you prefer, you can also install Warewulf from source. git clone https://github.com/warewulf/warewulf.git cd warewulf - make + make all make install Configure firewalld diff --git a/warewulf.spec.in b/warewulf.spec.in index 3882a753..9a2ae138 100644 --- a/warewulf.spec.in +++ b/warewulf.spec.in @@ -129,7 +129,7 @@ make defaults \ IPXESOURCE=/usr/share/ipxe \ DRACUTMODDIR=/usr/lib/dracut/modules.d \ CACHEDIR=%{_localstatedir}/cache -make +make build %if %{api} make api %endif