@@ -3,17 +3,20 @@ version: 2
33defaults : &defaults
44 working_directory : /go/src/github.com/tendermint/tendermint
55 docker :
6- - image : circleci/golang:1.11.4
6+ - image : circleci/golang
77 environment :
88 GOBIN : /tmp/workspace/bin
99
1010docs_update_config : &docs_update_config
1111 working_directory : ~/repo
1212 docker :
13- - image : tendermint/docs_deployment
13+ - image : tendermintdev/jq_curl
1414 environment :
1515 AWS_REGION : us-east-1
1616
17+ release_management_docker : &release_management_docker
18+ machine : true
19+
1720jobs :
1821 setup_dependencies :
1922 << : *defaults
@@ -154,7 +157,7 @@ jobs:
154157 for pkg in $(go list github.com/tendermint/tendermint/... | circleci tests split --split-by=timings); do
155158 id=$(basename "$pkg")
156159
157- GOCACHE=off go test -v -timeout 5m -race -coverprofile=/tmp/workspace/profiles/$id.out -covermode=atomic "$pkg" | tee "/tmp/logs/$id-$RANDOM.log"
160+ go test -v -timeout 5m -race -coverprofile=/tmp/workspace/profiles/$id.out -covermode=atomic "$pkg" | tee "/tmp/logs/$id-$RANDOM.log"
158161 done
159162 - persist_to_workspace :
160163 root : /tmp/workspace
@@ -192,7 +195,7 @@ jobs:
192195 name : run localnet and exit on failure
193196 command : |
194197 set -x
195- docker run --rm -v "$PWD":/go/src/github.com/tendermint/tendermint -w /go/src/github.com/tendermint/tendermint golang:1.11.4 make build-linux
198+ docker run --rm -v "$PWD":/go/src/github.com/tendermint/tendermint -w /go/src/github.com/tendermint/tendermint golang make build-linux
196199 make localnet-start &
197200 ./scripts/localnet-blocks-test.sh 40 5 10 localhost
198201
@@ -239,7 +242,121 @@ jobs:
239242 - run :
240243 name : Trigger website build
241244 command : |
242- chamber exec tendermint -- start_website_build
245+ curl --silent \
246+ --show-error \
247+ -X POST \
248+ --header "Content-Type: application/json" \
249+ -d "{\"branch\": \"$CIRCLE_BRANCH\"}" \
250+ "https://circleci.com/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$WEBSITE_REPO_NAME/build?circle-token=$TENDERBOT_API_TOKEN" > response.json
251+
252+ RESULT=`jq -r '.status' response.json`
253+ MESSAGE=`jq -r '.message' response.json`
254+
255+ if [[ ${RESULT} == "null" ]] || [[ ${RESULT} -ne "200" ]]; then
256+ echo "CircleCI API call failed: $MESSAGE"
257+ exit 1
258+ else
259+ echo "Website build started"
260+ fi
261+
262+ prepare_build :
263+ << : *defaults
264+ steps :
265+ - checkout
266+ - run :
267+ name : Get next release number
268+ command : |
269+ export LAST_TAG="`git describe --tags --abbrev=0 --match "${CIRCLE_BRANCH}.*"`"
270+ echo "Last tag: ${LAST_TAG}"
271+ if [ -z "${LAST_TAG}" ]; then
272+ export LAST_TAG="${CIRCLE_BRANCH}"
273+ echo "Last tag not found. Possibly fresh branch or feature branch. Setting ${LAST_TAG} as tag."
274+ fi
275+ export NEXT_TAG="`python -u scripts/release_management/bump-semver.py --version "${LAST_TAG}"`"
276+ echo "Next tag: ${NEXT_TAG}"
277+ echo "export CIRCLE_TAG=\"${NEXT_TAG}\"" > release-version.source
278+ - run :
279+ name : Build dependencies
280+ command : |
281+ make get_tools get_vendor_deps
282+ - persist_to_workspace :
283+ root : .
284+ paths :
285+ - " release-version.source"
286+ - save_cache :
287+ key : v1-release-deps-{{ .Branch }}-{{ .Revision }}
288+ paths :
289+ - " vendor"
290+
291+ build_artifacts :
292+ << : *defaults
293+ parallelism : 4
294+ steps :
295+ - checkout
296+ - restore_cache :
297+ keys :
298+ - v1-release-deps-{{ .Branch }}-{{ .Revision }}
299+ - attach_workspace :
300+ at : /tmp/workspace
301+ - run :
302+ name : Build artifact
303+ command : |
304+ # Setting CIRCLE_TAG because we do not tag the release ourselves.
305+ source /tmp/workspace/release-version.source
306+ if test ${CIRCLE_NODE_INDEX:-0} == 0 ;then export GOOS=linux GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi
307+ if test ${CIRCLE_NODE_INDEX:-0} == 1 ;then export GOOS=darwin GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi
308+ if test ${CIRCLE_NODE_INDEX:-0} == 2 ;then export GOOS=windows GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi
309+ if test ${CIRCLE_NODE_INDEX:-0} == 3 ;then export GOOS=linux GOARCH=arm && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi
310+ - persist_to_workspace :
311+ root : build
312+ paths :
313+ - " *.zip"
314+ - " tendermint_linux_amd64"
315+
316+ release_artifacts :
317+ << : *defaults
318+ steps :
319+ - checkout
320+ - attach_workspace :
321+ at : /tmp/workspace
322+ - run :
323+ name : Deploy to GitHub
324+ command : |
325+ # Setting CIRCLE_TAG because we do not tag the release ourselves.
326+ source /tmp/workspace/release-version.source
327+ echo "---"
328+ ls -la /tmp/workspace/*.zip
329+ echo "---"
330+ python -u scripts/release_management/sha-files.py
331+ echo "---"
332+ cat /tmp/workspace/SHA256SUMS
333+ echo "---"
334+ export RELEASE_ID="`python -u scripts/release_management/github-draft.py`"
335+ echo "Release ID: ${RELEASE_ID}"
336+ #Todo: Parallelize uploads
337+ export GOOS=linux GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}"
338+ export GOOS=darwin GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}"
339+ export GOOS=windows GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}"
340+ export GOOS=linux GOARCH=arm && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}"
341+ python -u scripts/release_management/github-upload.py --file "/tmp/workspace/SHA256SUMS" --id "${RELEASE_ID}"
342+ python -u scripts/release_management/github-publish.py --id "${RELEASE_ID}"
343+
344+ release_docker :
345+ << : *release_management_docker
346+ steps :
347+ - checkout
348+ - attach_workspace :
349+ at : /tmp/workspace
350+ - run :
351+ name : Deploy to Docker Hub
352+ command : |
353+ # Setting CIRCLE_TAG because we do not tag the release ourselves.
354+ source /tmp/workspace/release-version.source
355+ cp /tmp/workspace/tendermint_linux_amd64 DOCKER/tendermint
356+ docker build --label="tendermint" --tag="tendermint/tendermint:${CIRCLE_TAG}" --tag="tendermint/tendermint:latest" "DOCKER"
357+ docker login -u "${DOCKERHUB_USER}" --password-stdin <<< "${DOCKERHUB_PASS}"
358+ docker push "tendermint/tendermint"
359+ docker logout
243360
244361workflows :
245362 version : 2
@@ -277,3 +394,25 @@ workflows:
277394 - upload_coverage :
278395 requires :
279396 - test_cover
397+ release :
398+ jobs :
399+ - prepare_build
400+ - build_artifacts :
401+ requires :
402+ - prepare_build
403+ - release_artifacts :
404+ requires :
405+ - prepare_build
406+ - build_artifacts
407+ filters :
408+ branches :
409+ only :
410+ - /v[0-9]+\.[0-9]+/
411+ - release_docker :
412+ requires :
413+ - prepare_build
414+ - build_artifacts
415+ filters :
416+ branches :
417+ only :
418+ - /v[0-9]+\.[0-9]+/
0 commit comments