version: 2.1 commands: setup-home-local-bin: steps: - run: shell: /bin/bash -euo pipefail command: | mkdir -p "$HOME/.local/bin" line='export PATH="$HOME/.local/bin:$PATH"' if grep "$line" $BASH_ENV >/dev/null; then echo "$line" >> $BASH_ENV fi invoke-lazy-sh: parameters: subcommand: type: string steps: - run: environment: TERM: xterm command: ./lazy.sh <> apt-update-and-install-common-deps: steps: - run: sudo apt update && sudo apt install gawk make restore-cache-gomod: steps: - restore_cache: key: go-mod-v4-{{ checksum "go.sum" }} save-cache-gomod: steps: - save_cache: key: go-mod-v4-{{ checksum "go.sum" }} paths: - "/go/pkg/mod" install-godep: steps: - apt-update-and-install-common-deps - invoke-lazy-sh: subcommand: godep install-docdep: steps: - apt-update-and-install-common-deps - run: sudo apt install python3 python3-pip libgirepository1.0-dev - invoke-lazy-sh: subcommand: docdep download-and-install-minio-client: steps: - setup-home-local-bin - restore_cache: key: minio-client-v2 - run: shell: /bin/bash -eo pipefail command: | if which mc; then exit 0; fi sudo curl -sSL https://dl.min.io/client/mc/release/linux-amd64/archive/mc.RELEASE.2020-08-20T00-23-01Z \ -o "$HOME/.local/bin/mc" sudo chmod +x "$HOME/.local/bin/mc" - save_cache: key: minio-client-v2 paths: - "$HOME/.local/bin/mc" upload-minio: parameters: src: type: string dst: type: string steps: - 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 mc config host add --api s3v4 zrepl-minio https://minio.cschwarz.com ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY} # keep in sync with set-github-minio-status jobprefix=zrepl-ci-artifacts/test/${CIRCLE_SHA1}/${CIRCLE_JOB} # Upload artifacts mkdir -p ./artifacts mc cp -r <> "zrepl-minio/$jobprefix/<>" set-github-minio-status: parameters: context: type: string description: type: string minio-dst: type: string steps: - 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 to external artifact store, use CircleCI's instead." exit 0 fi set -u # from now on # keep in sync with with upload-minio command jobprefix=zrepl-ci-artifacts/test/${CIRCLE_SHA1}/${CIRCLE_JOB} # Push Artifact Link to GitHub REPO="zrepl/zrepl" COMMIT="${CIRCLE_SHA1}" JOB_NAME="${CIRCLE_JOB}" CONTEXT="<>" DESCRIPTION="<>" TARGETURL=https://minio.cschwarz.com/minio/"$jobprefix"/"<>" 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":"'"$CONTEXT"'", "state": "success", "description":"'"$DESCRIPTION"'", "target_url":"'"$TARGETURL"'"}' workflows: version: 2 build: jobs: - quickcheck-docs - quickcheck-go: &quickcheck-go-smoketest name: quickcheck-go-amd64-linux-1.15 goversion: &latest-go-release "1.15" goos: linux goarch: amd64 - test-go-on-latest-go-release: goversion: *latest-go-release - quickcheck-go: requires: - quickcheck-go-amd64-linux-1.15 #quickcheck-go-smoketest.name matrix: &quickcheck-go-matrix alias: quickcheck-go-matrix parameters: goversion: [*latest-go-release, "1.11"] goos: ["linux", "freebsd"] goarch: ["amd64", "arm64"] exclude: # don't re-do quickcheck-go-smoketest - goversion: *latest-go-release goos: linux goarch: amd64 # not supported by Go 1.11 - goversion: "1.11" goos: freebsd goarch: arm64 - request-release-build: type: approval requires: - quickcheck-docs - quickcheck-go-amd64-linux-1.15 #quickcheck-go-smoketest.name - quickcheck-go-matrix - test-go-on-latest-go-release - release-build: requires: - request-release-build - release-deb: requires: - release-build - release-rpm: requires: - release-build - release-upload: requires: - release-build - release-deb - release-rpm jobs: quickcheck-docs: docker: - image: cimg/base:2020.08 steps: - checkout - install-docdep - run: make docs quickcheck-go: parameters: goversion: type: string goos: type: string goarch: type: string docker: - image: circleci/golang:<> environment: GOOS: <> GOARCH: <> steps: - checkout - restore-cache-gomod - run: go mod download - run: cd build && go mod download - save-cache-gomod - install-godep - run: make formatcheck - run: make generate-platform-test-list - run: make zrepl-bin test-platform-bin - run: make vet - run: make lint - download-and-install-minio-client - run: rm -f artifacts/generate-platform-test-list - store_artifacts: path: artifacts - upload-minio: src: artifacts dst: "" - set-github-minio-status: context: artifacts/${CIRCLE_JOB} description: artifacts of CI job ${CIRCLE_JOB} minio-dst: "" test-go-on-latest-go-release: parameters: goversion: type: string docker: - image: circleci/golang:<> steps: - checkout - restore-cache-gomod - run: make test-go # don't save-cache-gomod here, test-go doesn't pull all the dependencies release-build: machine: true steps: - checkout - run: make release-docker - persist_to_workspace: root: . paths: [.] release-deb: machine: true steps: - attach_workspace: at: . - run: make debs-docker - persist_to_workspace: root: . paths: - "artifacts/*.deb" release-rpm: machine: true steps: - attach_workspace: at: . - run: make rpms-docker - persist_to_workspace: root: . paths: - "artifacts/*.rpm" release-upload: docker: - image: cimg/base:2020.08 steps: - attach_workspace: at: . - store_artifacts: path: artifacts - download-and-install-minio-client - upload-minio: src: artifacts dst: "" - set-github-minio-status: context: artifacts/release description: CI-generated release artifacts minio-dst: ""