diff --git a/Makefile b/Makefile index 0d11db6fb2..01f8e04190 100644 --- a/Makefile +++ b/Makefile @@ -12,24 +12,30 @@ CGO_ENABLED?=0 export GEN_BASEPATH := $(shell pwd) +.PHONY: api api: $(MAKE) --environment-overrides -C internal/api/genapi api +.PHONY: cli cli: $(MAKE) --environment-overrides -C internal/cmd/gencli cli +.PHONY: tools tools: go generate -tags tools tools/tools.go +.PHONY: cleangen cleangen: @rm -f ${GENERATED_CODE} +.PHONY: dev dev: BUILD_TAGS+=dev dev: BUILD_TAGS+=ui dev: build-ui-ifne @echo "==> Building Boundary with dev and UI features enabled" @CGO_ENABLED=$(CGO_ENABLED) BUILD_TAGS='$(BUILD_TAGS)' sh -c "'$(CURDIR)/scripts/build.sh'" +.PHONY: fmt fmt: gofumpt -w $$(find . -name '*.go' | grep -v pb.go | grep -v pb.gw.go) @@ -43,6 +49,7 @@ $(UI_TARGETS): export UI_DEFAULT_BRANCH := main $(UI_TARGETS): export UI_CURRENT_COMMIT := $(shell head -n1 < "$(UI_VERSION_FILE)" | cut -d' ' -f1) $(UI_TARGETS): export UI_COMMITISH ?= +.PHONY: update-ui-version update-ui-version: @if [ -z "$(UI_COMMITISH)" ]; then \ echo "==> Setting UI version to latest commit on branch '$(UI_DEFAULT_BRANCH)'"; \ @@ -52,6 +59,7 @@ update-ui-version: fi; \ ./scripts/uiclone.sh && ./scripts/uiupdate.sh +.PHONY: build-ui build-ui: @if [ -z "$(UI_COMMITISH)" ]; then \ echo "==> Building default UI version from $(UI_VERSION_FILE): $(UI_CURRENT_COMMIT)"; \ @@ -61,6 +69,7 @@ build-ui: fi; \ ./scripts/uiclone.sh && ./scripts/uigen.sh +.PHONY: build-ui-ifne build-ui-ifne: ifeq (,$(wildcard internal/ui/.tmp/boundary-ui)) @echo "==> No UI assets found, building..." @@ -69,15 +78,19 @@ else @echo "==> UI assets found, use build-ui target to update" endif +.PHONY: perms-table perms-table: @go run internal/website/permstable/permstable.go +.PHONY: gen gen: cleangen proto api cli perms-table fmt ### oplog requires protoc-gen-go v1.20.0 or later # GO111MODULE=on go get -u github.com/golang/protobuf/protoc-gen-go@v1.40 +.PHONY: proto proto: protolint protobuild +.PHONY: protobuild protobuild: # To add a new directory containing a proto pass the proto's root path in # through the --proto_path flag. @@ -150,37 +163,47 @@ protobuild: @rm -R ${TMP_DIR} +.PHONY: protolint protolint: @buf check lint @buf check breaking --against 'https://github.com/hashicorp/boundary.git#branch=stable-website' +.PHONY: website # must have nodejs and npm installed website: website-install website-start +.PHONY: website-install website-install: @npm install --prefix website/ +.PHONY: website-start website-start: @npm start --prefix website/ +.PHONY: test-database-up test-database-up: make -C testing/dbtest/docker database-up +.PHONY: test-database-down test-database-down: make -C testing/dbtest/docker clean +.PHONY: test-ci test-ci: install-go test-ci: export CI_BUILD=1 test-ci: CGO_ENABLED=$(CGO_ENABLED) BUILD_TAGS='$(BUILD_TAGS)' sh -c "'$(CURDIR)/scripts/build.sh'" ~/.go/bin/go test ./... -v $(TESTARGS) -timeout 120m +.PHONY: test-sql test-sql: $(MAKE) -C internal/db/sqltest/ test +.PHONY: test test: go test ./... -timeout 30m +.PHONY: install-go install-go: ./ci/goinstall.sh @@ -192,8 +215,10 @@ IMAGE_TAG=$(REGISTRY_NAME)/$(IMAGE_NAME):$(VERSION) IMAGE_TAG_DEV=$(REGISTRY_NAME)/$(IMAGE_NAME):latest-$(shell git rev-parse --short HEAD) DOCKER_DIR=./docker +.PHONY: docker docker: docker-build docker-publish +.PHONY: docker-build # builds from releases.hashicorp.com official binary docker-build: docker build -t $(IMAGE_TAG) \ @@ -201,6 +226,7 @@ docker-build: -f $(DOCKER_DIR)/Release.dockerfile docker/ docker tag $(IMAGE_TAG) hashicorp/boundary:latest +.PHONY: docker-multiarch-build # builds multiarch from releases.hashicorp.com official binary docker-multiarch-build: docker buildx build \ @@ -211,6 +237,7 @@ docker-multiarch-build: --platform linux/amd64,linux/arm64 \ --file $(DOCKER_DIR)/Release.dockerfile docker/ +.PHONY: docker-build-dev # builds from locally generated binary in bin/ docker-build-dev: export XC_OSARCH=linux/amd64 docker-build-dev: dev @@ -218,18 +245,19 @@ docker-build-dev: dev docker build -t $(IMAGE_TAG_DEV) \ -f $(DOCKER_DIR)/Dev.dockerfile docker/ +.PHONY: docker-publish # requires appropriate permissions in dockerhub docker-publish: docker push $(IMAGE_TAG) docker push hashicorp/boundary:latest -.PHONY: api cli tools gen proto website ci-config ci-verify set-ui-version docker docker-build docker-build-dev docker-publish test-database-up test-database-down - .NOTPARALLEL: +.PHONY: ci-config ci-config: @$(MAKE) -C .circleci ci-config +.PHONY: ci-verify ci-verify: @$(MAKE) -C .circleci ci-verify