Skip to content

Commit

Permalink
Add help command to the make file, to list to be able to list availab…
Browse files Browse the repository at this point in the history
…le commands (#4922)

Signed-off-by: Artem Barger <artem@bargr.net>
  • Loading branch information
C0rWin authored Jul 6, 2024
1 parent 7b7b853 commit 1601ad7
Showing 1 changed file with 60 additions and 50 deletions.
110 changes: 60 additions & 50 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -99,125 +99,135 @@ pkgmap.peer := $(PKGNAME)/cmd/peer
include docker-env.mk
include gotools.mk

.PHONY: help
# List all commands with documentation
help: ## List all commands with documentation
@echo "Available commands:"
@awk 'BEGIN {FS = ":.*?## "}; /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

.PHONY: all
all: check-go-version native docker checks
all: ## Builds all targets and runs all non-integration tests/checks
check-go-version native docker checks

.PHONY: checks
checks: basic-checks unit-test integration-test
checks: ## Runs basic checks along with unit and integration tests
basic-checks unit-test integration-test

.PHONY: basic-checks
basic-checks: check-go-version license spelling references trailing-spaces linter check-help-docs check-metrics-doc filename-spaces check-swagger
basic-checks: check-go-version license spelling references trailing-spaces linter check-help-docs check-metrics-doc filename-spaces check-swagger ## Performs basic checks like license, spelling, trailing spaces and linter


.PHONY: desk-checks
desk-check: checks verify
desk-check: ## Runs linters and verify to test changed packages
checks verify

.PHONY: help-docs
help-docs: native
help-docs: native ## Generate the command reference docs
@scripts/help_docs.sh

.PHONY: check-help-docs
check-help-docs: native
check-help-docs: native ## Check for outdated command reference documentation
@scripts/help_docs.sh check

.PHONY: spelling
spelling: gotool.misspell
spelling: gotool.misspell ## Check for spelling errors
@scripts/check_spelling.sh

.PHONY: references
references:
references: ## Check for outdated references
@scripts/check_references.sh

.PHONY: license
license:
license: ## Check for license headers
@scripts/check_license.sh

.PHONY: trailing-spaces
trailing-spaces:
trailing-spaces: ## Check for trailing spaces
@scripts/check_trailingspaces.sh

.PHONY: gotools
gotools: gotools-install
gotools: gotools-install ## Install go tools like golint

.PHONY: check-go-version
check-go-version:
check-go-version: ## Check for the correct go version
@scripts/check_go_version.sh $(GO_VER)

.PHONY: integration-test
integration-test: integration-test-prereqs
integration-test: integration-test-prereqs ## Runs the integration tests
./scripts/run-integration-tests.sh $(INTEGRATION_TEST_SUITE)

.PHONY: integration-test-prereqs
integration-test-prereqs: gotool.ginkgo baseos-docker ccenv-docker docker-thirdparty ccaasbuilder
integration-test-prereqs: gotool.ginkgo baseos-docker ccenv-docker docker-thirdparty ccaasbuilder ## Setup prerequisites for integration tests

.PHONY: unit-test
unit-test: unit-test-clean docker-thirdparty-couchdb
unit-test: unit-test-clean docker-thirdparty-couchdb ## Runs the go-test based unit tests
./scripts/run-unit-tests.sh

.PHONY: unit-tests
unit-tests: unit-test
unit-tests: unit-test ## Alias for unit-test

# Pull thirdparty docker images based on the latest baseimage release version
# Also pull ccenv-1.4 for compatibility test to ensure pre-2.0 installed chaincodes
# can be built by a peer configured to use the ccenv-1.4 as the builder image.
.PHONY: docker-thirdparty
docker-thirdparty: docker-thirdparty-couchdb
docker-thirdparty: docker-thirdparty-couchdb ## Pull thirdparty docker images
docker pull hyperledger/fabric-ccenv:1.4

.PHONY: docker-thirdparty-couchdb
docker-thirdparty-couchdb:
docker-thirdparty-couchdb: ## Pull couchdb docker image
docker pull couchdb:${COUCHDB_VER}

.PHONY: verify
verify: export JOB_TYPE=VERIFY
verify: unit-test
verify: export JOB_TYPE=VERIFY ## Runs unit tests for only the changed package tree
verify: unit-test # Runs unit tests for only the changed package tree

.PHONY: profile
profile: export JOB_TYPE=PROFILE
profile: unit-test
profile: export JOB_TYPE=PROFILE ## Runs unit tests for all packages in coverprofile mode (slow)
profile: unit-test # Runs unit tests for all packages in coverprofile mode (slow)

.PHONY: linter
linter: check-deps gotool.goimports gotool.gofumpt gotool.staticcheck
linter: check-deps gotool.goimports gotool.gofumpt gotool.staticcheck ## Runs all code checks
@echo "LINT: Running code checks.."
./scripts/golinter.sh

.PHONY: check-deps
check-deps:
check-deps: ## Check for vendored dependencies that are no longer used
@echo "DEP: Checking for dependency issues.."
./scripts/check_deps.sh

.PHONY: check-metrics-docs
check-metrics-doc: gotool.gendoc
check-metrics-doc: gotool.gendoc ## Check for outdated reference documentation
@echo "METRICS: Checking for outdated reference documentation.."
./scripts/metrics_doc.sh check

.PHONY: generate-metrics-docs
generate-metrics-doc: gotool.gendoc
generate-metrics-doc: gotool.gendoc ## Generate metrics reference documentation
@echo "Generating metrics reference documentation..."
./scripts/metrics_doc.sh generate

.PHONY: check-swagger
check-swagger: gotool.swagger
check-swagger: gotool.swagger ## Check for outdated swagger
@echo "SWAGGER: Checking for outdated swagger..."
./scripts/swagger.sh check

.PHONY: generate-swagger
generate-swagger: gotool.swagger
generate-swagger: gotool.swagger ## Generate swagger
@echo "Generating swagger..."
./scripts/swagger.sh generate

.PHONY: protos
protos: gotool.protoc-gen-go
protos: gotool.protoc-gen-go ## Generate all protobuf artifacts based on .proto files
@echo "Compiling non-API protos..."
./scripts/compile_protos.sh

.PHONY: native
native: $(RELEASE_EXES)
native: $(RELEASE_EXES) ## Ensures all native binaries are available

.PHONY: tools
tools: $(TOOLS_EXES)
tools: $(TOOLS_EXES) ## Builds all tools

.PHONY: $(RELEASE_EXES)
$(RELEASE_EXES): %: $(BUILD_DIR)/bin/%
$(RELEASE_EXES): %: $(BUILD_DIR)/bin/% ## Builds a native binary

$(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%)
$(BUILD_DIR)/bin/%:
Expand All @@ -227,10 +237,10 @@ $(BUILD_DIR)/bin/%:
@touch $@

.PHONY: docker
docker: $(RELEASE_IMAGES:%=%-docker) ccaasbuilder
docker: $(RELEASE_IMAGES:%=%-docker) ccaasbuilder ## Builds all docker images

.PHONY: $(RELEASE_IMAGES:%=%-docker)
$(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY)
$(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY) ## Builds a docker image

$(BUILD_DIR)/images/baseos/$(DUMMY): BUILD_CONTEXT=images/baseos
$(BUILD_DIR)/images/ccenv/$(DUMMY): BUILD_CONTEXT=images/ccenv
Expand All @@ -254,11 +264,11 @@ $(BUILD_DIR)/images/%/$(DUMMY):

# builds release packages for the host platform
.PHONY: release
release: check-go-version $(MARCH:%=release/%)
release: check-go-version $(MARCH:%=release/%) ## Builds release packages for the host platform

# builds release packages for all target platforms
.PHONY: release-all
release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%)
release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%) ## Builds release packages for all target platforms

.PHONY: $(RELEASE_PLATFORMS:%=release/%)
$(RELEASE_PLATFORMS:%=release/%): GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%)
Expand All @@ -275,30 +285,30 @@ $(foreach platform, $(RELEASE_PLATFORMS), $(RELEASE_EXES:%=release/$(platform)/b
GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" -buildvcs=false $(pkgmap.$(@F))

.PHONY: dist
dist: dist-clean dist/$(MARCH)
dist: dist-clean dist/$(MARCH) # Builds release packages for the host platform

.PHONY: dist-all
dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%)
dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%) ## Builds release packages for all target platforms
dist/%: release/% ccaasbuilder
mkdir -p release/$(@F)/config
cp -r sampleconfig/*.yaml release/$(@F)/config
cd release/$(@F) && tar -czvf hyperledger-fabric-$(@F).$(PROJECT_VERSION).tar.gz *

.PHONY: docker-list
docker-list: $(RELEASE_IMAGES:%=%-docker-list)
docker-list: $(RELEASE_IMAGES:%=%-docker-list) ## Generates a list of docker images that 'make docker' produces
%-docker-list:
@echo $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG)

.PHONY: docker-clean
docker-clean: $(RELEASE_IMAGES:%=%-docker-clean)
docker-clean: $(RELEASE_IMAGES:%=%-docker-clean) ## Ensures all docker images are available
%-docker-clean:
-@for image in "$$(docker images --quiet --filter=reference='$(DOCKER_NS)/fabric-$*')"; do \
[ -z "$$image" ] || docker rmi -f $$image; \
done
-@rm -rf $(BUILD_DIR)/images/$* || true

.PHONY: docker-tag-latest
docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest)
docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest) ## Re-tags the images made by 'make docker' with the :latest tag
%-docker-tag-latest:
docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:latest

Expand All @@ -314,34 +324,34 @@ publish-images: $(RELEASE_IMAGES:%=%-publish-images)
@docker push $(DOCKER_NS)/fabric-$*:$(PROJECT_VERSION)

.PHONY: clean
clean: docker-clean unit-test-clean release-clean
clean: docker-clean unit-test-clean release-clean ## Cleans the build area
-@rm -rf $(BUILD_DIR)

.PHONY: clean-all
clean-all: clean gotools-clean dist-clean
clean-all: clean gotools-clean dist-clean ## Cleans the build area and removes persistent state
-@rm -rf /var/hyperledger/*
-@rm -rf docs/build/

.PHONY: dist-clean
dist-clean:
dist-clean: ## Clean release packages for all target platforms
-@for platform in $(RELEASE_PLATFORMS) ""; do \
[ -z "$$platform" ] || rm -rf release/$${platform}/hyperledger-fabric-$${platform}.$(PROJECT_VERSION).tar.gz; \
done

.PHONY: release-clean
release-clean: $(RELEASE_PLATFORMS:%=%-release-clean)
release-clean: $(RELEASE_PLATFORMS:%=%-release-clean) ## Clean release packages for all target platforms
%-release-clean:
-@rm -rf release/$*

.PHONY: unit-test-clean
unit-test-clean:
unit-test-clean:

.PHONY: filename-spaces
spaces:
spaces: # Check for spaces in file names
@scripts/check_file_name_spaces.sh

.PHONY: docs
docs:
docs: # Builds the documentation in html format
@docker run --rm -v $$(pwd):/docs n42org/tox:3.4.0 sh -c 'cd /docs && tox -e docs'

.PHONY: ccaasbuilder-clean
Expand All @@ -362,8 +372,8 @@ ccaasbuilder/%: ccaasbuilder-clean
ccaasbuilder: ccaasbuilder/$(MARCH)

.PHONY: scan
scan: scan-govulncheck
scan: scan-govulncheck ## Run all security scans

.PHONY: scan-govulncheck
scan-govulncheck: gotool.govulncheck
scan-govulncheck: gotool.govulncheck ## Run gosec security scan
govulncheck ./...

0 comments on commit 1601ad7

Please sign in to comment.