qingcloud-sdk-go/Makefile

182 lines
5.5 KiB
Makefile

SHELL := /bin/bash
.PHONY: all check vet lint update generate build unit test release clean
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")
PKGS_TO_CHECK=$(shell go list ./... | grep -vE "vendor|test")
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)"
LINT_IGNORE_METHOD="GetGlobalUniqueId"
help:
@echo "Please use \`make <target>\` where <target> is one of"
@echo " all to check, build, test and release this SDK"
@echo " check to vet and lint the SDK"
@echo " generate to generate service code"
@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"
@echo " test to run service test"
@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); \
lint=$$(echo "$${lint}" | grep -vE -e ${LINT_IGNORE_DOC} -e ${LINT_IGNORE_CONFLICT} -e ${LINT_IGNORE_METHOD}); \
if [[ -n $${lint} ]]; then echo "$${lint}"; exit 1; fi
@echo "ok"
generate: snips ../qingcloud-api-specs/package.json
./snips \
-f=../qingcloud-api-specs/2013-08-30/swagger/api_v2.0.json \
-t=./template \
-o=./service
go fmt ./service/...
@echo "ok"
snips:
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
../qingcloud-api-specs/package.json:
-go get -d github.com/yunify/qingcloud-api-specs
file %@
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"
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"
unit-runtime: unit-runtime-go-1.9 unit-runtime-go-1.10 unit-runtime-go-1.11
export define DOCKERFILE_GO_1_11
FROM golang:1.11
ADD . /go/src/github.com/yunify/qingcloud-sdk-go
WORKDIR /go/src/github.com/yunify/qingcloud-sdk-go
CMD ["make", "build", "unit"]
endef
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"
@echo "ok"
export define DOCKERFILE_GO_1_10
FROM golang:1.10
ADD . /go/src/github.com/yunify/qingcloud-sdk-go
WORKDIR /go/src/github.com/yunify/qingcloud-sdk-go
CMD ["make", "build", "unit"]
endef
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"
@echo "ok"
export define DOCKERFILE_GO_1_9
FROM golang:1.9
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
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"
@echo "ok"
test:
pushd "./test"; go test ; popd
@echo "ok"
release: release-source release-source-with-vendor
release-source:
@echo "pack the source code"
mkdir -p "release"
@zip -FS "release/${PREFIX}-source-v${VERSION}.zip" ${FILES_TO_RELEASE}
@echo "ok"
release-source-with-vendor:
@echo "pack the source code"
mkdir -p "release"
@zip -FS "release/${PREFIX}-source-with-vendor-v${VERSION}.zip" ${FILES_TO_RELEASE_WITH_VENDOR}
@echo "ok"
clean:
rm -rf $${PWD}/coverage
@echo "ok"