diff --git a/.circleci/config.yml b/.circleci/config.yml index 1a9c4c8..0c09c00 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,44 +1,132 @@ -version: 2 -jobs: - build: +alias: + default: &default working_directory: /go/src/github.com/yahoojapan/gongt docker: - - image: circleci/golang:1.10.1 + - image: circleci/golang:1.11.4 environment: - GO15VENDOREXPERIMENT: 1 + GOPATH: "/go" + GO111MODULE: "on" LD_LIBRARY_PATH: /usr/local/lib - environment: - TEST_RESULTS: /tmp/test-results + NGT_VERSION: 1.6.1 + REPO_NAME: "yahoojapan" + IMAGE_NAME: "gongt" + GITHUB_API: "https://api.github.com/" + - image: redis + +version: 2 +jobs: + test: + <<: *default steps: - checkout + - restore_cache: + key: gosum-{{ .Branch }}-{{ checksum "go.sum" }} - run: - name: preparation + name: install dependencies command: | - mkdir -p $TEST_RESULTS sudo apt-get update sudo apt-get install cmake - cd ~ - git clone https://github.com/yahoojapan/NGT - mkdir -p NGT/build - cd NGT/build - cmake .. - make -j - sudo make install - go get -u github.com/jstemmer/go-junit-report - cd /go/src/github.com/yahoojapan/gongt - make init + sudo apt-get install libhdf5-dev + sudo -E make deps - run: - name: run test + name: preparation command: | - trap "go-junit-report < ${TEST_RESULTS}/go-test.out > ${TEST_RESULTS}/go-test-report.xml" EXIT - go test -v -race -coverprofile=coverage.out -covermode=atomic gongt.go gongt_test.go | tee ${TEST_RESULTS}/go-test.out + go mod vendor - run: - name: prepare bench + name: run tests command: | - sudo apt-get install libhdf5-dev - make download - make index + rm -rf example + go test -v -race -covermode=atomic -coverprofile=coverage.out ./... + go tool cover -html=coverage.out -o coverage.html + bash <(curl -s https://codecov.io/bash) + - store_artifacts: + path: ./coverage.html + - save_cache: + key: gosum-{{ .Branch }}-{{ checksum "go.sum" }} + paths: + - ./vendor + versioning: + <<: *default + steps: + - checkout + - run: + name: check + command: | + mkdir -p $HOME/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config + LAST_COMMIT=`git log -1 --pretty=%B` + VERSION=`git describe --abbrev=0 --tags` + touch ./.tag + if [ ! -z "`git diff $VERSION`" -o -z "$VERSION" ]; then + VERSION=${VERSION:-'0.0.0'} + MAJOR="${VERSION%%.*}"; VERSION="${VERSION#*.}" + MINOR="${VERSION%%.*}"; VERSION="${VERSION#*.}" + PATCH="${VERSION%%.*}"; VERSION="${VERSION#*.}" + if echo $LAST_COMMIT | grep "\[\(major\|MAJOR\)\]" > /dev/null; then + MAJOR=$((MAJOR+1)) + echo "$MAJOR.0.0" > ./.tag + elif echo $LAST_COMMIT | grep "\[\(minor\|MINOR\)\]" > /dev/null; then + MINOR=$((MINOR+1)) + echo "$MAJOR.$MINOR.0" > ./.tag + elif echo $LAST_COMMIT | grep "\[\(patch\|PATCH\)\]" > /dev/null; then + PATCH=$((PATCH+1)) + echo "$MAJOR.$MINOR.$PATCH" > ./.tag + fi + fi + - persist_to_workspace: + root: . + paths: + - . + push: + <<: *default + steps: + - attach_workspace: + at: . - run: - name: run bench + name: push tag and check PR body command: | - make bench + mkdir -p $HOME/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config + TAG=`cat ./.tag` + if [ ! -z "$TAG" ]; then + echo $TAG + git tag $TAG + git push https://${GITHUB_ACCESS_TOKEN}:x-oauth-basic@github.com/${REPO_NAME}/${IMAGE_NAME} --tags + # git push git@github.com:${REPO_NAME}/${IMAGE_NAME} --tags + fi + - persist_to_workspace: + root: . + paths: + - . + gh_release: + <<: *default + steps: + - attach_workspace: + at: . + - run: + name: release + command: | + mkdir -p $HOME/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config + TAG=`cat ./.tag` + if [ ! -z "$TAG" ]; then + echo "Create release: ${TAG}" + curl -H "Authorization: token ${GITHUB_ACCESS_TOKEN}" \ + -X POST \ + -d "{\"tag_name\": \"${TAG}\"}" \ + ${GITHUB_API}repos/${REPO_NAME}/${IMAGE_NAME}/releases + fi + +workflows: + version: 2 + build: + jobs: + - test + - versioning: + filters: + branches: + only: + - master + - push: + requires: + - versioning + - gh_release: + requires: + - push diff --git a/Makefile b/Makefile index 40f4f35..1558043 100644 --- a/Makefile +++ b/Makefile @@ -4,9 +4,12 @@ GO_VERSION := $(shell go version) REVISION := $(shell git rev-parse --short HEAD) PROJECT_ROOT := $(shell pwd) -init: - go get -u github.com/golang/dep/cmd/dep - dep ensure +deps: + curl -LO https://github.com/yahoojapan/NGT/archive/v$(NGT_VERSION).tar.gz + tar zxf v$(NGT_VERSION).tar.gz -C /tmp + cd /tmp/NGT-$(NGT_VERSION); cmake . + make -j -C /tmp/NGT-$(NGT_VERSION) + make install -C /tmp/NGT-$(NGT_VERSION) build: go build gongt.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..522be74 --- /dev/null +++ b/go.mod @@ -0,0 +1,6 @@ +module github.com/yahoojapan/gongt + +require ( + github.com/kpango/glg v1.2.7 + gonum.org/v1/hdf5 v0.0.0-20180702054324-c257073619f4 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..50399d6 --- /dev/null +++ b/go.sum @@ -0,0 +1,6 @@ +github.com/kpango/fastime v1.0.0 h1:tZeI+eEyHHYKkTkKOiOZ5MeeRJmliuZlGV7aK7S2rkE= +github.com/kpango/fastime v1.0.0/go.mod h1:Y5XY5bLG5yc7g2XmMUzc22XYV1XaH+KgUOHkDvLp4SA= +github.com/kpango/glg v1.2.7 h1:aVnv89IIWXSFNOm93SnDQGIKF27Jzz9olieOL2b23Xc= +github.com/kpango/glg v1.2.7/go.mod h1:sEwy6Va116x0eKdbVsilHPanIrsoE9AR/9vHwdo4ytQ= +gonum.org/v1/hdf5 v0.0.0-20180702054324-c257073619f4 h1:3GnLlVt6JOlXwffishXEToqGjH7hx/G8UK7RP7HTqX0= +gonum.org/v1/hdf5 v0.0.0-20180702054324-c257073619f4/go.mod h1:g+PDU5ogjIKcc3Cg4ALAK7X4c8bBQvPzPKWNW5NB7I0= diff --git a/gongt.go b/gongt.go index f522e46..28d715a 100644 --- a/gongt.go +++ b/gongt.go @@ -118,8 +118,8 @@ const ( var ( once = &sync.Once{} ngt *NGT - - // ErrCAPINotImplemented raises using not implemented function in C API + + // ErrCAPINotImplemented raises using not implemented function in C API ErrCAPINotImplemented = errors.New("Not implemented in C API") ) @@ -247,7 +247,7 @@ func SetSearchEdgeSize(size int) *NGT { // gongt.Get().SetSearchEdgeSize(10) // SearchEdgeSize Setting // gongt.New("").SetSearchEdgeSize(10) // SearchEdgeSize Setting func (n *NGT) SetSearchEdgeSize(size int) *NGT { - if size > 0 { + if size >= 0 { n.mu.Lock() n.prop.SearchEdgeSize = size n.mu.Unlock()