2016-12-03 09:42:26 +00:00
|
|
|
SHELL := /bin/bash
|
|
|
|
|
2016-12-25 03:59:31 +00:00
|
|
|
.PHONY: all check vet lint update generate build unit test release clean
|
2016-12-03 09:42:26 +00:00
|
|
|
|
|
|
|
PREFIX=qingcloud-sdk-go
|
|
|
|
VERSION=$(shell cat version.go | grep "Version\ =" | sed -e s/^.*\ //g | sed -e s/\"//g)
|
|
|
|
DIRS_TO_CHECK=$(shell ls -d */ | grep -vE "vendor|test")
|
2017-08-12 17:53:10 +00:00
|
|
|
PKGS_TO_CHECK=$(shell go list ./... | grep -vE "vendor|test")
|
2016-12-03 09:42:26 +00:00
|
|
|
PKGS_TO_RELEASE=$(shell go list ./... | grep -vE "/vendor/|/test")
|
|
|
|
FILES_TO_RELEASE=$(shell find . -name "*.go" | grep -vE "/vendor/|/test|.*_test.go")
|
|
|
|
FILES_TO_RELEASE_WITH_VENDOR=$(shell find . -name "*.go" | grep -vE "/test|.*_test.go")
|
|
|
|
LINT_IGNORE_DOC="service\/.*\.go:.+(comment on exported|should have comment or be unexported)"
|
|
|
|
LINT_IGNORE_CONFLICT="service\/.*\.go:.+(type name will be used as)"
|
2018-12-19 12:13:52 +00:00
|
|
|
LINT_IGNORE_METHOD="GetGlobalUniqueId"
|
2016-12-03 09:42:26 +00:00
|
|
|
|
|
|
|
help:
|
|
|
|
@echo "Please use \`make <target>\` where <target> is one of"
|
2016-12-03 16:16:45 +00:00
|
|
|
@echo " all to check, build, test and release this SDK"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo " check to vet and lint the SDK"
|
2017-09-05 07:45:32 +00:00
|
|
|
@echo " generate to generate service code"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo " build to build the SDK"
|
|
|
|
@echo " unit to run all sort of unit tests except runtime"
|
|
|
|
@echo " unit-test to run unit test"
|
|
|
|
@echo " unit-benchmark to run unit test with benchmark"
|
|
|
|
@echo " unit-coverage to run unit test with coverage"
|
|
|
|
@echo " unit-race to run unit test with race"
|
|
|
|
@echo " unit-runtime to run test with go1.5, go1.6, go 1.7 in docker"
|
2016-12-25 03:59:31 +00:00
|
|
|
@echo " test to run service test"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo " release to build and release current version"
|
|
|
|
@echo " release-source to pack the source code"
|
|
|
|
@echo " clean to clean the coverage files"
|
|
|
|
|
|
|
|
all: check build unit release
|
|
|
|
|
|
|
|
check: vet lint
|
|
|
|
|
|
|
|
vet:
|
|
|
|
@echo "go tool vet, skipping vendor packages"
|
|
|
|
@go tool vet -all ${DIRS_TO_CHECK}
|
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
lint:
|
|
|
|
@echo "golint, skipping vendor packages"
|
|
|
|
@lint=$$(for pkg in ${PKGS_TO_CHECK}; do golint $${pkg}; done); \
|
2018-12-19 12:13:52 +00:00
|
|
|
lint=$$(echo "$${lint}" | grep -vE -e ${LINT_IGNORE_DOC} -e ${LINT_IGNORE_CONFLICT} -e ${LINT_IGNORE_METHOD}); \
|
2016-12-03 09:42:26 +00:00
|
|
|
if [[ -n $${lint} ]]; then echo "$${lint}"; exit 1; fi
|
|
|
|
@echo "ok"
|
|
|
|
|
2017-11-10 06:41:43 +00:00
|
|
|
generate: snips ../qingcloud-api-specs/package.json
|
2017-09-05 09:11:36 +00:00
|
|
|
./snips \
|
2017-11-10 06:31:30 +00:00
|
|
|
-f=../qingcloud-api-specs/2013-08-30/swagger/api_v2.0.json \
|
2017-09-05 07:45:32 +00:00
|
|
|
-t=./template \
|
|
|
|
-o=./service
|
|
|
|
go fmt ./service/...
|
|
|
|
@echo "ok"
|
|
|
|
|
2017-09-05 09:11:36 +00:00
|
|
|
snips:
|
2017-11-10 06:31:30 +00:00
|
|
|
curl -L https://github.com/yunify/snips/releases/download/v0.2.16/snips-v0.2.16-${shell go env GOOS}_amd64.tar.gz | tar zx
|
2017-09-05 07:45:32 +00:00
|
|
|
|
|
|
|
../qingcloud-api-specs/package.json:
|
|
|
|
-go get -d github.com/yunify/qingcloud-api-specs
|
|
|
|
file %@
|
|
|
|
|
2016-12-03 09:42:26 +00:00
|
|
|
build:
|
|
|
|
@echo "build the SDK"
|
|
|
|
GOOS=linux GOARCH=amd64 go build ${PKGS_TO_CHECK}
|
|
|
|
GOOS=darwin GOARCH=amd64 go build ${PKGS_TO_CHECK}
|
|
|
|
GOOS=windows GOARCH=amd64 go build ${PKGS_TO_CHECK}
|
|
|
|
@echo "ok"
|
|
|
|
|
2017-09-05 07:45:32 +00:00
|
|
|
|
2016-12-03 09:42:26 +00:00
|
|
|
unit: unit-test unit-benchmark unit-coverage unit-race
|
|
|
|
|
|
|
|
unit-test:
|
|
|
|
@echo "run unit test"
|
|
|
|
go test -v ${PKGS_TO_CHECK}
|
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
unit-benchmark:
|
|
|
|
@echo "run unit test with benchmark"
|
|
|
|
go test -v -bench=. ${PKGS_TO_CHECK}
|
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
unit-coverage:
|
|
|
|
@echo "run unit test with coverage"
|
|
|
|
for pkg in ${PKGS_TO_CHECK}; do \
|
|
|
|
output="coverage$${pkg#github.com/yunify/qingcloud-sdk-go}"; \
|
|
|
|
mkdir -p $${output}; \
|
|
|
|
go test -v -cover -coverprofile="$${output}/profile.out" $${pkg}; \
|
|
|
|
if [[ -e "$${output}/profile.out" ]]; then \
|
|
|
|
go tool cover -html="$${output}/profile.out" -o "$${output}/profile.html"; \
|
|
|
|
fi; \
|
|
|
|
done
|
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
unit-race:
|
|
|
|
@echo "run unit test with race"
|
|
|
|
go test -v -race -cpu=1,2,4 ${PKGS_TO_CHECK}
|
|
|
|
@echo "ok"
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
unit-runtime: unit-runtime-go-1.9 unit-runtime-go-1.10 unit-runtime-go-1.11
|
2016-12-03 09:42:26 +00:00
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
export define DOCKERFILE_GO_1_11
|
|
|
|
FROM golang:1.11
|
2016-12-03 09:42:26 +00:00
|
|
|
|
|
|
|
ADD . /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
WORKDIR /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
|
|
|
|
CMD ["make", "build", "unit"]
|
|
|
|
endef
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
unit-runtime-go-1.11:
|
|
|
|
@echo "run test in go 1.11"
|
|
|
|
echo "$${DOCKERFILE_GO_1_11}" > "dockerfile_go_1.11"
|
|
|
|
docker build -f "./dockerfile_go_1.11" -t "${PREFIX}:go-1.11" .
|
|
|
|
rm -f "./dockerfile_go_1.11"
|
|
|
|
docker run --name "${PREFIX}-go-1.11-unit" -t "${PREFIX}:go-1.11"
|
|
|
|
docker rm "${PREFIX}-go-1.11-unit"
|
|
|
|
docker rmi "${PREFIX}:go-1.11"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
export define DOCKERFILE_GO_1_10
|
|
|
|
FROM golang:1.10
|
2016-12-03 09:42:26 +00:00
|
|
|
|
|
|
|
ADD . /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
WORKDIR /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
|
|
|
|
CMD ["make", "build", "unit"]
|
|
|
|
endef
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
unit-runtime-go-1.10:
|
|
|
|
@echo "run test in go 1.10"
|
|
|
|
echo "$${DOCKERFILE_GO_1_10}" > "dockerfile_go_1.10"
|
|
|
|
docker build -f "./dockerfile_go_1.10" -t "${PREFIX}:go-1.10" .
|
|
|
|
rm -f "./dockerfile_go_1.10"
|
|
|
|
docker run --name "${PREFIX}-go-1.10-unit" -t "${PREFIX}:go-1.10"
|
|
|
|
docker rm "${PREFIX}-go-1.10-unit"
|
|
|
|
docker rmi "${PREFIX}:go-1.10"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
export define DOCKERFILE_GO_1_9
|
|
|
|
FROM golang:1.9
|
2016-12-03 09:42:26 +00:00
|
|
|
ENV GO15VENDOREXPERIMENT="1"
|
|
|
|
|
|
|
|
ADD . /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
WORKDIR /go/src/github.com/yunify/qingcloud-sdk-go
|
|
|
|
|
|
|
|
CMD ["make", "build", "unit"]
|
|
|
|
endef
|
|
|
|
|
2018-12-19 12:13:52 +00:00
|
|
|
unit-runtime-go-1.9:
|
|
|
|
@echo "run test in go 1.9"
|
|
|
|
echo "$${DOCKERFILE_GO_1_9}" > "dockerfile_go_1.9"
|
|
|
|
docker build -f "./dockerfile_go_1.9" -t "${PREFIX}:go-1.9" .
|
|
|
|
rm -f "./dockerfile_go_1.9"
|
|
|
|
docker run --name "${PREFIX}-go-1.9-unit" -t "${PREFIX}:go-1.9"
|
|
|
|
docker rm "${PREFIX}-go-1.9-unit"
|
|
|
|
docker rmi "${PREFIX}:go-1.9"
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
2016-12-25 03:59:31 +00:00
|
|
|
test:
|
2017-08-12 17:53:10 +00:00
|
|
|
pushd "./test"; go test ; popd
|
2016-12-25 03:59:31 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
2017-03-14 09:15:22 +00:00
|
|
|
release: release-source release-source-with-vendor
|
2016-12-03 09:42:26 +00:00
|
|
|
|
|
|
|
release-source:
|
|
|
|
@echo "pack the source code"
|
|
|
|
mkdir -p "release"
|
2017-03-14 09:15:22 +00:00
|
|
|
@zip -FS "release/${PREFIX}-source-v${VERSION}.zip" ${FILES_TO_RELEASE}
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
release-source-with-vendor:
|
|
|
|
@echo "pack the source code"
|
|
|
|
mkdir -p "release"
|
2017-03-14 09:15:22 +00:00
|
|
|
@zip -FS "release/${PREFIX}-source-with-vendor-v${VERSION}.zip" ${FILES_TO_RELEASE_WITH_VENDOR}
|
2016-12-03 09:42:26 +00:00
|
|
|
@echo "ok"
|
|
|
|
|
|
|
|
clean:
|
|
|
|
rm -rf $${PWD}/coverage
|
|
|
|
@echo "ok"
|