From 909e159aaa0080b63fb25416e135288b2bfc38ef Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 09:09:53 -0500 Subject: [PATCH 01/10] attempt to build release artifacts in CI (using updated Go version) most of this is stolen from the 3.x branch for building the release artifacts I removed the restriction of only master branch, so we should be able to see if it works before the PR is merged. --- .circleci/config.yml | 29 ++++++++++++++++++++++++++++- Dockerfile | 2 +- Makefile | 7 ++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ce623b054..57e117251 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -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 @@ -237,6 +248,22 @@ workflows: - linter - check-license-headers - test-golang-1.15.5 + - 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/Dockerfile b/Dockerfile index 955f499ed..969396a74 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.10 as builder +FROM golang:latest as builder ARG BUILD_FLAGS ARG MAKE_FLAGS diff --git a/Makefile b/Makefile index 2e6cc7331..263a7a165 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) @@ -205,6 +205,11 @@ docker-tag-push: vendor docker push $(DOCKER_TARGET) @echo Pushed docker image: $(DOCKER_TARGET) +docker-release: check-clean generate-statik + $(MAKE) docker-build GOOS=linux GOARCH=amd64 + $(MAKE) docker-build GOOS=darwin GOARCH=amd64 + $(MAKE) docker-build GOOS=darwin GOARCH=arm64 + # 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) From ddfaa65d0e1e60840125b8991f61b93bf5bf6e22 Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 09:25:31 -0500 Subject: [PATCH 02/10] backport Dockerfile and docker build command we got "build dependency yarn not installed" in CI when it tried to build the release. The new Dockerfile has a separate lattice builder which does "yarn install" --- Dockerfile | 41 ++++++++++++++++++++++++++++++++++------- Makefile | 11 ++++++++++- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 969396a74..20170e420 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,46 @@ -FROM golang:latest 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 263a7a165..4153c2ab8 100644 --- a/Makefile +++ b/Makefile @@ -212,7 +212,16 @@ docker-release: check-clean generate-statik # 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: From 86526dc15d138584785c02cb1454e0b50543624d Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 10:42:33 -0500 Subject: [PATCH 03/10] fix .dockerignore so lattice gets passed into builder --- .dockerignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 + From 40ffa899c917f46a464e3e8471a5a5c7e1bebc22 Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 12:22:06 -0500 Subject: [PATCH 04/10] docker-release should not try to build lattice locally --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4153c2ab8..c8ef3e8ac 100644 --- a/Makefile +++ b/Makefile @@ -205,7 +205,7 @@ docker-tag-push: vendor docker push $(DOCKER_TARGET) @echo Pushed docker image: $(DOCKER_TARGET) -docker-release: check-clean generate-statik +docker-release: check-clean lattice require-statik $(MAKE) docker-build GOOS=linux GOARCH=amd64 $(MAKE) docker-build GOOS=darwin GOARCH=amd64 $(MAKE) docker-build GOOS=darwin GOARCH=arm64 From 59a4f26b03965ab169fa275ed48d5004e161ea3d Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 12:25:17 -0500 Subject: [PATCH 05/10] don't need statik installed locally either --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c8ef3e8ac..1e24242bf 100644 --- a/Makefile +++ b/Makefile @@ -205,7 +205,7 @@ docker-tag-push: vendor docker push $(DOCKER_TARGET) @echo Pushed docker image: $(DOCKER_TARGET) -docker-release: check-clean lattice require-statik +docker-release: check-clean lattice $(MAKE) docker-build GOOS=linux GOARCH=amd64 $(MAKE) docker-build GOOS=darwin GOARCH=amd64 $(MAKE) docker-build GOOS=darwin GOARCH=arm64 From 42eaf9e226ef66de86bd21c98a4d6d9c2789c57c Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 12:34:48 -0500 Subject: [PATCH 06/10] fix docker-build part with appropriate docker-login for new Dockerfile --- .circleci/config.yml | 12 +++++++++--- Makefile | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 57e117251..9ab36decd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -163,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: @@ -171,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 @@ -181,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 diff --git a/Makefile b/Makefile index 1e24242bf..bb60f062a 100644 --- a/Makefile +++ b/Makefile @@ -196,7 +196,9 @@ 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 build \ + --build-arg GO_VERSION=$(GO_VERSION) \ + --tag pilosa:$(VERSION) . @echo Created docker image: pilosa:$(VERSION) # Tag and push a Docker image From be55a4f0516461a767452783bb6bb5fb7f9dbe65 Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 13:02:09 -0500 Subject: [PATCH 07/10] remove arm from build causing an issue with syscall.Dup3 that I think we fixed in 3.x, but we don't need ARM support in 2.8.x AFAIK --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index bb60f062a..3dea75928 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,6 @@ docker-tag-push: vendor docker-release: check-clean lattice $(MAKE) docker-build GOOS=linux GOARCH=amd64 $(MAKE) docker-build GOOS=darwin GOARCH=amd64 - $(MAKE) docker-build GOOS=darwin GOARCH=arm64 # Compile Pilosa inside Docker container docker-build: vendor From c1796ee9ca411ec9ed213c1e6eb217ccb466fcf5 Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Thu, 9 Sep 2021 14:12:39 -0500 Subject: [PATCH 08/10] update test matrices and remove COPY lines COPY lines in Dockerfile were backported from 3.x where we have package.json and yarn.lock checked in directly. In 2.x we're pulling in lattice as a submodule and it does not have those... I think this means that versions of dependencies aren't necessarily pinned, but given that Q2 isn't heavily dependent on the UI this should be OK. --- .circleci/config.yml | 4 ++-- Dockerfile | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9ab36decd..7cf4a8b16 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -226,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 @@ -235,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" diff --git a/Dockerfile b/Dockerfile index 20170e420..fed4ef58b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,8 +7,6 @@ ARG GO_VERSION=latest FROM moleculacorp/nodejs:latest as lattice-builder WORKDIR /lattice -COPY lattice/package.json ./ -COPY lattice/yarn.lock ./ RUN yarn install COPY lattice ./ From 8edcf2868a35068485e7ef688de1812f53612088 Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Fri, 10 Sep 2021 11:30:39 -0500 Subject: [PATCH 09/10] update golang versions --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7cf4a8b16..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" @@ -253,7 +253,7 @@ workflows: requires: - linter - check-license-headers - - test-golang-1.15.5 + - test-golang-1.16.7 - release: context: molecula requires: From dceebd433750e6943c0452f026224458148c943c Mon Sep 17 00:00:00 2001 From: Matthew Jaffee Date: Fri, 10 Sep 2021 12:15:34 -0500 Subject: [PATCH 10/10] add lattice files back in I think docker-build was failing not because those particular files weren't there, but because the submodule wasn't being fetched... giving that a try. --- Dockerfile | 3 +++ Makefile | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fed4ef58b..2a4ef4b83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,9 @@ ARG GO_VERSION=latest FROM moleculacorp/nodejs:latest as lattice-builder WORKDIR /lattice +COPY lattice/package.json ./ +COPY lattice/yarn.lock ./ + RUN yarn install COPY lattice ./ diff --git a/Makefile b/Makefile index 3dea75928..e7339a9e6 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ 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: vendor lattice docker build \ --build-arg GO_VERSION=$(GO_VERSION) \ --tag pilosa:$(VERSION) .