version: 2.1 orbs: # NB: this is not the Go version, but the Orb version # https://circleci.com/developer/orbs/orb/circleci/go#usage-go-modules-cache go: circleci/go@1.11.0 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-get update - run: sudo apt-get install -y gawk make # CircleCI doesn't update its cimg/go images. # So, need to update manually to get up-to-date trust chains. # The need for this was required for cimg/go:1.12, but let's future proof this here and now. - run: sudo apt-get install -y git ca-certificates 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 docs-publish-sh: parameters: push: type: boolean steps: - checkout - run: command: | git config --global user.email "zreplbot@cschwarz.com" git config --global user.name "zrepl-github-io-ci" # if we're pushing, we need to add the deploy key # which is stored as "Additional SSH Keys" in the CircleCI project settings. # We can't use the CircleCI-manage deploy key because we're pushing # to a different repo than the one we're building. - when: condition: << parameters.push >> steps: # https://circleci.com/docs/2.0/add-ssh-key/#adding-multiple-keys-with-blank-hostnames - run: ssh-add -D # the default circleci ssh config only additional ssh keys for Host !github.com - run: command: | cat > ~/.ssh/config \<> steps: - run: bash -x docs/publish.sh -c -a -P - when: condition: not: << parameters.push >> steps: - run: bash -x docs/publish.sh -c -a parameters: do_ci: type: boolean default: true do_release: type: boolean default: false workflows: version: 2 ci: when: << pipeline.parameters.do_ci >> jobs: - quickcheck-docs - quickcheck-go: name: quickcheck-go-amd64-linux-1.23.1 goversion: &latest-go-release "1.23.1" goos: linux goarch: amd64 - test-go: goversion: *latest-go-release - quickcheck-go: requires: - quickcheck-go-amd64-linux-1.23.1 #quickcheck-go-smoketest.name matrix: alias: quickcheck-go-matrix parameters: goversion: [*latest-go-release, "1.22.7"] goos: ["linux", "freebsd"] goarch: ["amd64", "arm64"] exclude: # don't re-do quickcheck-go-smoketest - goversion: *latest-go-release goos: linux goarch: amd64 - platformtest: matrix: parameters: goversion: [*latest-go-release] goos: ["linux"] goarch: ["amd64"] requires: - test-go - quickcheck-go-<< matrix.goarch >>-<< matrix.goos >>-<< matrix.goversion >> release: when: << pipeline.parameters.do_release >> jobs: - release-build - release-deb: requires: - release-build - release-rpm: requires: - release-build - release-upload: requires: - release-build - release-deb - release-rpm publish-zrepl.github.io: jobs: - publish-zrepl-github-io: filters: branches: only: - stable jobs: quickcheck-docs: docker: - image: cimg/base:2024.09 steps: - checkout - install-docdep # do the current docs build - run: make docs # does the publish.sh script still work? - docs-publish-sh: push: false quickcheck-go: parameters: goversion: type: string goos: type: string goarch: type: string docker: # any toolchain >= 1.22 will auto-download GOTOOLCHAIN - image: &cimg_with_modern_go cimg/go:1.22 environment: GOOS: <> GOARCH: <> GOTOOLCHAIN: "go<>" steps: - checkout - go/load-cache: key: quickcheck-<> - install-godep - run: go mod download - run: cd build && go mod download - go/save-cache: key: quickcheck-<> - run: make formatcheck - run: make generate-platform-test-list - run: make zrepl-bin test-platform-bin - run: make vet - run: make lint - run: rm -f artifacts/generate-platform-test-list - store_artifacts: path: artifacts - persist_to_workspace: root: . paths: [.] platformtest: parameters: goversion: type: string goos: type: string goarch: type: string machine: image: ubuntu-2204:current resource_class: medium environment: GOOS: <> GOARCH: <> steps: - attach_workspace: at: . - run: sudo apt-get update - run: sudo apt-get install -y zfsutils-linux - run: sudo zfs version - run: sudo make test-platform GOOS="$GOOS" GOARCH="$GOARCH" test-go: parameters: goversion: type: string docker: - image: *cimg_with_modern_go environment: GOTOOLCHAIN: "go<>" steps: - checkout - go/load-cache: key: make-test-go - run: make test-go - go/save-cache: key: make-test-go release-build: machine: image: ubuntu-2004:202201-02 steps: - checkout - run: make release-docker - persist_to_workspace: root: . paths: [.] release-deb: machine: image: ubuntu-2004:202201-02 steps: - attach_workspace: at: . - run: make debs-docker - persist_to_workspace: root: . paths: - "artifacts/*.deb" release-rpm: machine: image: ubuntu-2004:202201-02 steps: - attach_workspace: at: . - run: make rpms-docker - persist_to_workspace: root: . paths: - "artifacts/*.rpm" release-upload: docker: - image: cimg/base:2024.09 steps: - attach_workspace: at: . - run: make wrapup-and-checksum - store_artifacts: path: artifacts publish-zrepl-github-io: docker: - image: cimg/base:2024.09 steps: - checkout - install-docdep - docs-publish-sh: push: true