version: 2.0 workflows: version: 2 build: jobs: - build-1.11 - build-1.12 - build-1.13 - build-1.14 - build-latest - test-build-in-docker jobs: # build-latest serves as the template # we use YAML anchors & aliases to exchange the docker image (and hence Go version used for the build) build-latest: &build-latest description: Builds zrepl parameters: image: description: "the docker image that the job should use" type: string docker: - image: circleci/golang:latest environment: # required by lazy.sh TERM: xterm working_directory: /go/src/github.com/zrepl/zrepl steps: - run: name: Setup environment variables command: | # used by pip (for docs) echo 'export PATH="$HOME/.local/bin:$PATH"' >> $BASH_ENV # we use modules echo 'export GO111MODULE=on' >> $BASH_ENV - restore_cache: keys: - source - protobuf - checkout - save_cache: key: source paths: - ".git" # install deps - run: wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip - run: echo "6003de742ea3fcf703cfec1cd4a3380fd143081a2eb0e559065563496af27807 protoc-3.6.1-linux-x86_64.zip" | sha256sum -c - run: sudo unzip -d /usr protoc-3.6.1-linux-x86_64.zip - save_cache: key: protobuf paths: - "/usr/include/google/protobuf" - run: sudo apt update && sudo apt install python3 python3-pip libgirepository1.0-dev gawk - run: ./lazy.sh devsetup - run: make zrepl-bin - run: make vet - run: make lint - run: make release - run: make test-go # cannot run test-platform because circle-ci runs in linux containers - store_artifacts: path: ./artifacts/release when: always - run: shell: /bin/bash -eo pipefail when: always command: | if [ -n "$CIRCLE_PR_NUMBER" ]; then # CIRCLE_PR_NUMBER is guaranteed to be only present in forked PRs (external) echo "Forked PR detected. Sry, can't trust you with credentials to external artifact store, use CircleCI's instead." exit 0 fi set -u # from now on # Download and install minio curl -sSL https://dl.minio.io/client/mc/release/linux-amd64/mc -o ${GOPATH}/bin/mc chmod +x ${GOPATH}/bin/mc mc config host add --api s3v4 zrepl-minio https://minio.cschwarz.com ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY} # Upload artifacts echo "$CIRCLE_BUILD_URL" > ./artifacts/release/cirlceci_build_url mc cp -r artifacts/release "zrepl-minio/zrepl-ci-artifacts/${CIRCLE_SHA1}/${CIRCLE_JOB}/" # Push Artifact Link to GitHub REPO="zrepl/zrepl" COMMIT="${CIRCLE_SHA1}" JOB_NAME="${CIRCLE_JOB}" curl "https://api.github.com/repos/$REPO/statuses/$COMMIT" \ -H "Content-Type: application/json" \ -H "Authorization: token $GITHUB_COMMIT_STATUS_TOKEN" \ -X POST \ -d '{"context":"zrepl/publish-ci-artifacts", "state": "success", "description":"CI Build Artifacts for '"$JOB_NAME"'", "target_url":"https://minio.cschwarz.com/minio/zrepl-ci-artifacts/'"$COMMIT"'/"}' # kick off binary packaging workflow - run: shell: /bin/bash -eo pipefail command: | if [ -n "$CIRCLE_PR_NUMBER" ]; then # CIRCLE_PR_NUMBER is guaranteed to be only present in forked PRs (external) echo "Forked PR detected. Sry, can't trust you with credentials." exit 0 fi set -u # from now on GITHUB_ACCESS_TOKEN="$ZREPL_DEBIAN_BINARYPACKAGIN_TRIGGER_BUILD_GITHUB_TOKEN" .circleci/trigger_debian_binary_packaging_workflow.bash "$CIRCLE_SHA1" "${CIRCLE_JOB##build-}" build-1.11: <<: *build-latest docker: - image: circleci/golang:1.11 build-1.12: <<: *build-latest docker: - image: circleci/golang:1.12 build-1.13: <<: *build-latest docker: - image: circleci/golang:1.13 build-1.14: <<: *build-latest docker: - image: circleci/golang:1.14 # this job tests the build-in-docker instructions # given in docs/installation/compile-from-source.rst test-build-in-docker: description: Check that build-in-docker works machine: image: default steps: - checkout - run: docker build -t zrepl_build -f build.Dockerfile . - run: command: | docker run -it --rm \ -v "${PWD}:/src" \ --user "$(id -u):$(id -g)" \ zrepl_build make release