diff --git a/.circleci/config.yml b/.circleci/config.yml index ce623b054..2a3c7e8a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ executors: parameters: version: type: string - default: "1.15.5" + default: "1.16.7" resource_class: type: string default: medium @@ -84,7 +84,7 @@ jobs: default: medium golang_version: type: string - default: "1.15.5" + default: "1.16.7" shard_width: type: string default: "20" @@ -132,12 +132,23 @@ jobs: - checkout-plus - attach_workspace: at: . - - run: make release + - setup_remote_docker: + version: 19.03.13 # see https://support.circleci.com/hc/en-us/articles/360050934711 + - run: echo -n $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin + - run: make docker-release - store_artifacts: path: build - persist_to_workspace: root: . paths: build + publish_release: + executor: + name: golang + steps: + - attach_workspace: + at: . + - run: go get github.com/tcnksm/ghr + - run: ghr -t ${GITHUB_PERSONAL_ACCESS_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${CIRCLE_TAG} ./build/ prerelease-upload: docker: - image: circleci/python:2.7-jessie @@ -152,7 +163,9 @@ jobs: name: golang steps: - checkout-plus - - setup_remote_docker + - setup_remote_docker: + version: 19.03.13 # see https://support.circleci.com/hc/en-us/articles/360050934711 + - run: echo -n $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin - run: make docker - run: docker run pilosa:$(git describe --tags) help dockerhub-upload-unstable: @@ -160,7 +173,9 @@ jobs: name: golang steps: - checkout-plus - - setup_remote_docker + - setup_remote_docker: + version: 19.03.13 # see https://support.circleci.com/hc/en-us/articles/360050934711 + - run: echo -n $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin - run: make docker - run: docker run pilosa:$(git describe --tags) help - run: docker login -u $DOCKER_USER -p $DOCKER_PASS @@ -170,7 +185,9 @@ jobs: name: golang steps: - checkout-plus - - setup_remote_docker + - setup_remote_docker: + version: 19.03.13 # see https://support.circleci.com/hc/en-us/articles/360050934711 + - run: echo -n $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin - run: make docker - run: docker run pilosa:$(git describe --tags) help - run: docker login -u $DOCKER_USER -p $DOCKER_PASS @@ -209,7 +226,7 @@ workflows: - setup matrix: parameters: - golang_version: ["1.14.12", "1.15.5"] + golang_version: ["1.16.7"] - test: name: << matrix.test_make_target >> resource_class: xlarge @@ -218,7 +235,7 @@ workflows: - setup matrix: parameters: - test_make_target: ["test-race", "test-txstore-rbf", "test-txstore-rbf_bolt"] + test_make_target: ["test-race"] - test: name: test-shardwidth-22 shard_width: "22" @@ -236,7 +253,23 @@ workflows: requires: - linter - check-license-headers - - test-golang-1.15.5 + - test-golang-1.16.7 + - release: + context: molecula + requires: + - setup + filters: + tags: + only: /^v.*/ + - publish_release: + context: molecula + requires: + - release + filters: + tags: + only: /^v.*/ + branches: + ignore: /.*/ - dockerhub-upload-unstable: context: molecula requires: diff --git a/.dockerignore b/.dockerignore index d5de893f3..6e392a727 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,6 @@ -lattice +lattice/.git +lattice/node_modules +lattice/build +statik/statik.go +build + diff --git a/Dockerfile b/Dockerfile index 955f499ed..2a4ef4b83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,47 @@ -FROM golang:1.14.10 as builder +ARG GO_VERSION=latest -ARG BUILD_FLAGS +####################### +### Lattice builder ### +####################### + +FROM moleculacorp/nodejs:latest as lattice-builder +WORKDIR /lattice + +COPY lattice/package.json ./ +COPY lattice/yarn.lock ./ + +RUN yarn install + +COPY lattice ./ +RUN yarn build + +###################### +### Pilosa builder ### +###################### + +FROM golang:${GO_VERSION} as pilosa-builder ARG MAKE_FLAGS +WORKDIR /pilosa -COPY . pilosa +RUN go get github.com/rakyll/statik -RUN cd pilosa && make install FLAGS="-a -mod=vendor ${BUILD_FLAGS}" ${MAKE_FLAGS} +COPY . ./ +COPY --from=lattice-builder /lattice/build /lattice +RUN /go/bin/statik -src=/lattice -dest=/pilosa -FROM alpine:3.12.1 +RUN make build FLAGS="-o build/pilosa" ${MAKE_FLAGS} -LABEL maintainer "dev@pilosa.com" +##################### +### Pilosa runner ### +##################### + +FROM alpine:3.13.2 as runner + +LABEL maintainer "dev@molecula.com" RUN apk add --no-cache curl jq -COPY --from=builder /go/bin/pilosa /pilosa +COPY --from=pilosa-builder /pilosa/build/pilosa / COPY LICENSE /LICENSE COPY NOTICE /NOTICE diff --git a/Makefile b/Makefile index 2e6cc7331..e7339a9e6 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ BUILD_TIME := $(shell date -u +%FT%T%z) SHARD_WIDTH = 20 COMMIT := $(shell git describe --exact-match >/dev/null 2>&1 || git rev-parse --short HEAD) LDFLAGS="-X github.com/pilosa/pilosa/v2.Version=$(VERSION) -X github.com/pilosa/pilosa/v2.BuildTime=$(BUILD_TIME) -X github.com/pilosa/pilosa/v2.Variant=$(VARIANT) -X github.com/pilosa/pilosa/v2.Commit=$(COMMIT) -X github.com/pilosa/pilosa/v2.LatticeCommit=$(LATTICE_COMMIT)" -GO_VERSION=1.14.10 +GO_VERSION=1.16.7 RELEASE ?= 0 RELEASE_ENABLED = $(subst 0,,$(RELEASE)) BUILD_TAGS += $(if $(RELEASE_ENABLED),release) @@ -195,8 +195,10 @@ generate-proto-grpc: require-protoc require-protoc-gen-go generate: generate-protoc generate-statik generate-stringer generate-pql # Create Docker image from Dockerfile -docker: vendor - docker build --build-arg BUILD_FLAGS="${FLAGS}" -t "pilosa:$(VERSION)" . +docker: vendor lattice + docker build \ + --build-arg GO_VERSION=$(GO_VERSION) \ + --tag pilosa:$(VERSION) . @echo Created docker image: pilosa:$(VERSION) # Tag and push a Docker image @@ -205,9 +207,22 @@ docker-tag-push: vendor docker push $(DOCKER_TARGET) @echo Pushed docker image: $(DOCKER_TARGET) +docker-release: check-clean lattice + $(MAKE) docker-build GOOS=linux GOARCH=amd64 + $(MAKE) docker-build GOOS=darwin GOARCH=amd64 + # Compile Pilosa inside Docker container docker-build: vendor - docker run --rm -v $(PWD):/go/src/$(CLONE_URL) -w /go/src/$(CLONE_URL) -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) golang:$(GO_VERSION) make build FLAGS="$(FLAGS) -mod=vendor" RELEASE=$(RELEASE) + docker build \ + --build-arg GO_VERSION=$(GO_VERSION) \ + --build-arg MAKE_FLAGS="GOOS=$(GOOS) GOARCH=$(GOARCH)" \ + --target pilosa-builder \ + --tag pilosa:build . + docker create --name pilosa-build pilosa:build + mkdir -p build/pilosa-$(VERSION_ID) + docker cp pilosa-build:/pilosa/build/. ./build/pilosa-$(VERSION_ID) + docker rm pilosa-build + tar -cvz -C build -f build/pilosa-$(VERSION_ID).tar.gz pilosa-$(VERSION_ID)/ # Install diagnostic pilosa-keydump tool. Allows viewing the keys in a transaction-engine directory. pilosa-keydump: