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"'/"}' - run: shell: /bin/bash -euo pipefail command: | # Trigger Debian Package Build curl -v -X POST https://api.github.com/repos/zrepl/debian-binary-packaging/dispatches \ -H 'Accept: application/vnd.github.v3+json' \ -H "Authorization: token $ZREPL_DEBIAN_BINARYPACKAGIN_TRIGGER_BUILD_GITHUB_TOKEN" \ --data '{"event_type": "push", "client_payload": { "zrepl_main_repo_commit": "'"$CIRCLE_SHA1"'", "go_version": "'"${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 tries to mimic the build-in-docker instructions # given in docs/installation.rst # # However, CircleCI doesn't support volume mounts, so we have to copy # the source into the build-container by modifying the Dockerfile test-build-in-docker: description: Check that build-in-docker works docker: - image: circleci/golang:latest environment: working_directory: /go/src/github.com/zrepl/zrepl steps: - checkout - setup_remote_docker - run: name: (hacky) circleci doesn't allow volume mounts, so copy src to container command: echo "ADD . /src" >> build.Dockerfile - run: name: (hacky) commit modified Dockerfile to avoid failing git clean check in Makefile command: git -c user.name='circleci' -c user.email='circleci@localhost' commit -m 'CIRCLECI modified Dockerfile with zrepl src' --author 'autoauthor ' -- build.Dockerfile - run: name: build the build image (build deps) command: docker build -t zrepl_build -f build.Dockerfile . - run: name: try compiling command: docker run -it zrepl_build make release