New standard GO project layout
[ric-plt/appmgr.git] / Makefile
old mode 100755 (executable)
new mode 100644 (file)
similarity index 51%
rename from build/Makefile
rename to Makefile
index 266ac05..8061874
+++ b/Makefile
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
 
-BUILD_DIR=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))
 
-ROOT_DIR:=$(abspath $(BUILD_DIR)/..)
-
-BUILD_PREFIX?="${USER}-"
+#------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------- ----------
+ROOT_DIR:=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+BUILD_DIR:=$(abspath $(ROOT_DIR)/build)
 
-XAPP_MGR:=appmgr
-XAPP_MGR_DOCKER:=${BUILD_PREFIX}appmgr
+PACKAGEURL:="gerrit.oran-osc.org/r/ric-plt/appmgr"
+HELMVERSION:=v2.13.0-rc.1
 
-GOSRC := $(abspath $(BUILD_DIR)/../src)
-GOFILES := $(GOSRC)/*.go
+#------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------- ----------
 COVEROUT := $(abspath $(BUILD_DIR)/cover.out)
 COVERHTML := $(abspath $(BUILD_DIR)/cover.html)
 
+GOOS=$(shell go env GOOS)
 GOCMD=go
 GOBUILD=$(GOCMD) build -a -installsuffix cgo
 GORUN=$(GOCMD) run -a -installsuffix cgo
@@ -34,56 +37,68 @@ GOCLEAN=$(GOCMD) clean
 GOTEST=$(GOCMD) test -v -coverprofile $(COVEROUT)
 GOGET=$(GOCMD) get
 
-HELMVERSION:=v2.13.0-rc.1
+GOFILES := $(shell find $(ROOT_DIR) -name '*.go' -not -name '*_test.go')  go.mod go.sum
+GOFILES_NO_VENDOR := $(shell find $(ROOT_DIR) -path ./vendor -prune -o -name "*.go" -not -name '*_test.go' -print)
+
+CMDS:=$(BUILD_DIR)/appmgr
 
 #------------------------------------------------------------------------------
 #
 #-------------------------------------------------------------------- ----------
-.PHONY: FORCE build deps run unit-test test-pkg test clean docker-base-build docker-base-clean docker-build docker-run docker-clean docker-test-build docker-test-run-unittest docker-test-run-sanity docker-test-run docker-test-clean
-.DEFAULT: build
+ .DEFAULT: build
 
 default: build
 
+.PHONY: FORCE 
+
 FORCE:
 
 #------------------------------------------------------------------------------
 #
 #------------------------------------------------------------------------------
 
-XAPP_MGR_DOCKER:=$(shell echo $(XAPP_MGR_DOCKER) | tr '[:upper:]' '[:lower:]')
+$(CMDS): $(GOFILES)
+       GO111MODULE=on GO_ENABLED=0 GOOS=linux $(GOBUILD) -o $@ ./cmd/$(shell basename "$@")
 
-#XAPP_MGR_DOCKER:=$(subst /,_,${XAPP_MGR_DOCKER})
 
-#------------------------------------------------------------------------------
-#
-#------------------------------------------------------------------------------
+$(addsuffix _test,$(CMDS)): $(GOFILES)
+       GO111MODULE=on GO_ENABLED=0 GOOS=linux $(GOTEST) -c -o $@ ./cmd/$(patsubst %_test,%, $(shell basename "$@")) 
+       timeout -s KILL 5s $@ -test.coverprofile $(COVEROUT)
+       go tool cover -html=$(COVEROUT) -o $(COVERHTML)
 
-$(BUILD_DIR)$(XAPP_MGR): deps ${wildcard $(GOFILES)}
-       GO_ENABLED=0 GOOS=linux $(GOBUILD) -o $(BUILD_DIR)$(XAPP_MGR) $(GOFILES)
 
-build: $(BUILD_DIR)$(XAPP_MGR)
+build: $(CMDS)
 
-deps: ${wildcard $(GOFILES)}
-       cd $(GOSRC) && $(GOGET)
 
-run: $(BUILD_DIR)$(XAPP_MGR)
-       $(BUILD_DIR)$(XAPP_MGR) -host-addr="localhost:8080" -helm-host="localhost:31807" -helm-chart="./"
+test: $(addsuffix _test,$(CMDS))
+
+
+test-fmt: $(GOFILES_NO_VENDOR)
+       @(RESULT="$$(gofmt -l $^)"; test -z "$${RESULT}" || (echo -e "gofmt failed:\n$${RESULT}" && false) )
+
+
+fmt: $(GOFILES_NO_VENDOR)
+       gofmt -w -s $^
 
-unit-test:
-       cd $(GOSRC) && $(GOTEST)
-       go tool cover -html=$(COVEROUT) -o $(COVERHTML)
 
 clean:
        @echo "  >  Cleaning build cache"
-       @-rm -rf $(XAPP_MGR) 2> /dev/null
+       @-rm -rf $(CMDS)* 2> /dev/null
        go clean 2> /dev/null
 
 #------------------------------------------------------------------------------
 #
 #------------------------------------------------------------------------------
 
-DCKR_BUILD_OPTS:=${DCKR_BUILD_OPTS} --network=host --build-arg HELMVERSION=${HELMVERSION}
+BUILD_PREFIX?="${USER}-"
+
+DCKR_FILE:=docker/Dockerfile
+
+DCKR_NAME:=${BUILD_PREFIX}appmgr
+DCKR_NAME:=$(shell echo $(DCKR_NAME) | tr '[:upper:]' '[:lower:]')
+DCKR_NAME:=$(subst /,_,${DCKR_NAME})
+
+DCKR_BUILD_OPTS:=${DCKR_BUILD_OPTS} --network=host --build-arg HELMVERSION=${HELMVERSION} --build-arg PACKAGEURL=${PACKAGEURL}
 
 DCKR_RUN_OPTS:=${DCKR_RUN_OPTS} --rm -i
 DCKR_RUN_OPTS:=${DCKR_RUN_OPTS}$(shell test -t 0 && echo ' -t')
@@ -95,16 +110,16 @@ DCKR_RUN_OPTS:=${DCKR_RUN_OPTS}$(shell test -e /var/run/docker.sock && echo ' -v
 #
 #------------------------------------------------------------------------------
 docker-name:
-       @echo $(XAPP_MGR_DOCKER)
+       @echo $(DCKR_NAME)
 
 docker-build:
-       docker build --target release ${DCKR_BUILD_OPTS} -t $(XAPP_MGR_DOCKER) -f Dockerfile ../.
+       docker build --target release ${DCKR_BUILD_OPTS} -t $(DCKR_NAME) -f $(DCKR_FILE) .
 
 docker-run:
-       docker run ${DCKR_RUN_OPTS} -v /opt/ric:/opt/ric -p 8080:8080 $(XAPP_MGR_DOCKER)
+       docker run ${DCKR_RUN_OPTS} -v /opt/ric:/opt/ric -p 8080:8080 $(DCKR_NAME)
 
 docker-clean:
-       docker rmi $(XAPP_MGR_DOCKER)
+       docker rmi $(DCKR_NAME)
 
 
 #------------------------------------------------------------------------------
@@ -112,18 +127,31 @@ docker-clean:
 #------------------------------------------------------------------------------
 
 docker-test-build:
-       docker build --target test_unit ${DCKR_BUILD_OPTS} -t ${XAPP_MGR_DOCKER}-test_unit -f Dockerfile ../.
-       docker build --target test_sanity ${DCKR_BUILD_OPTS} -t ${XAPP_MGR_DOCKER}-test_sanity -f Dockerfile ../.
+       docker build --target test_unit ${DCKR_BUILD_OPTS} -t ${DCKR_NAME}-test_unit -f $(DCKR_FILE) .
+       docker build --target test_sanity ${DCKR_BUILD_OPTS} -t ${DCKR_NAME}-test_sanity -f $(DCKR_FILE) .
+       docker build --target test_fmt ${DCKR_BUILD_OPTS} -t ${DCKR_NAME}-test_fmt -f $(DCKR_FILE) .
 
 docker-test-run-unit:
-       docker run ${DCKR_RUN_OPTS} ${XAPP_MGR_DOCKER}-test_unit 
+       @( \
+               RETVAL=0;\
+               docker network create --driver bridge ${DCKR_NAME}-test_unit_network;\
+               docker run ${DCKR_RUN_OPTS} -d --name ${DCKR_NAME}-test_unit_redis --network ${DCKR_NAME}-test_unit_network redis;\
+               docker run ${DCKR_RUN_OPTS} --name ${DCKR_NAME}-test_unit_run --network ${DCKR_NAME}-test_unit_network -e DBAAS_SERVICE_HOST=${DCKR_NAME}-test_unit_redis ${DCKR_NAME}-test_unit;\
+               RETVAL=$$?;\
+               docker stop ${DCKR_NAME}-test_unit_redis;\
+               docker network rm ${DCKR_NAME}-test_unit_network;\
+               exit $${RETVAL};\
+       )
 
-docker-test-run-sanity:
-       docker run ${DCKR_RUN_OPTS} ${XAPP_MGR_DOCKER}-test_sanity
 
-docker-test-run: docker-test-run-sanity docker-test-run-unit
+docker-test-run-fmt:
+       docker run ${DCKR_RUN_OPTS} ${DCKR_NAME}-test_fmt
+
+docker-test-run-sanity:
+       docker run ${DCKR_RUN_OPTS} ${DCKR_NAME}-test_sanity
 
 docker-test-clean:
-       docker rmi -f ${XAPP_MGR_DOCKER}-test_unit
-       docker rmi -f ${XAPP_MGR_DOCKER}-test_sanity
+       docker rmi -f ${DCKR_NAME}-test_unit
+       docker rmi -f ${DCKR_NAME}-test_sanity
+       docker rmi -f ${DCKR_NAME}-test_fmt