mirror of
https://github.com/zrepl/zrepl.git
synced 2024-11-25 09:54:47 +01:00
312 lines
7.7 KiB
YAML
312 lines
7.7 KiB
YAML
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 <<parameters.subcommand>>
|
|
|
|
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
|
|
|
|
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
|
|
|
|
trigger-pipeline:
|
|
parameters:
|
|
body_no_shell_subst:
|
|
type: string
|
|
steps:
|
|
- run: |
|
|
curl -X POST https://circleci.com/api/v2/project/github/zrepl/zrepl/pipeline \
|
|
-H 'Content-Type: application/json' \
|
|
-H 'Accept: application/json' \
|
|
-H "Circle-Token: $ZREPL_BOT_CIRCLE_TOKEN" \
|
|
--data '<<parameters.body_no_shell_subst>>'
|
|
|
|
parameters:
|
|
do_ci:
|
|
type: boolean
|
|
default: true
|
|
|
|
do_release:
|
|
type: boolean
|
|
default: false
|
|
|
|
release_docker_baseimage_tag:
|
|
type: string
|
|
default: "1.19"
|
|
|
|
workflows:
|
|
version: 2
|
|
|
|
ci:
|
|
when: << pipeline.parameters.do_ci >>
|
|
jobs:
|
|
- quickcheck-docs
|
|
- quickcheck-go: &quickcheck-go-smoketest
|
|
name: quickcheck-go-amd64-linux-1.19
|
|
goversion: &latest-go-release "1.19"
|
|
goos: linux
|
|
goarch: amd64
|
|
- test-go-on-latest-go-release:
|
|
goversion: *latest-go-release
|
|
- quickcheck-go:
|
|
requires:
|
|
- quickcheck-go-amd64-linux-1.19 #quickcheck-go-smoketest.name
|
|
matrix: &quickcheck-go-matrix
|
|
alias: quickcheck-go-matrix
|
|
parameters:
|
|
goversion: [*latest-go-release, "1.18"]
|
|
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:
|
|
- 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
|
|
|
|
periodic:
|
|
triggers:
|
|
- schedule:
|
|
cron: "00 17 * * *"
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- stable
|
|
jobs:
|
|
- periodic-full-pipeline-run
|
|
|
|
zrepl.github.io:
|
|
jobs:
|
|
- publish-zrepl-github-io:
|
|
filters:
|
|
branches:
|
|
only:
|
|
- stable
|
|
|
|
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: cimg/go:<<parameters.goversion>>
|
|
environment:
|
|
GOOS: <<parameters.goos>>
|
|
GOARCH: <<parameters.goarch>>
|
|
|
|
steps:
|
|
- checkout
|
|
|
|
- install-godep
|
|
|
|
- restore-cache-gomod
|
|
- run: go mod download
|
|
- run: cd build && go mod download
|
|
- save-cache-gomod
|
|
|
|
- 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: <<parameters.goos>>
|
|
GOARCH: <<parameters.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-on-latest-go-release:
|
|
parameters:
|
|
goversion:
|
|
type: string
|
|
docker:
|
|
- image: cimg/go:<<parameters.goversion>>
|
|
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:
|
|
image: ubuntu-2004:202201-02
|
|
steps:
|
|
- checkout
|
|
- run: make release-docker RELEASE_DOCKER_BASEIMAGE_TAG=<<pipeline.parameters.release_docker_baseimage_tag>>
|
|
- 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:2020.08
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- store_artifacts:
|
|
path: artifacts
|
|
|
|
periodic-full-pipeline-run:
|
|
docker:
|
|
- image: cimg/base:2020.08
|
|
steps:
|
|
- trigger-pipeline:
|
|
body_no_shell_subst: '{"branch":"<<pipeline.git.branch>>", "parameters": { "do_ci": true, "do_release": true }}'
|
|
|
|
publish-zrepl-github-io:
|
|
docker:
|
|
- image: cimg/python:3.7
|
|
steps:
|
|
- checkout
|
|
- invoke-lazy-sh:
|
|
subcommand: docdep
|
|
- run:
|
|
command: |
|
|
git config --global user.email "zreplbot@cschwarz.com"
|
|
git config --global user.name "zrepl-github-io-ci"
|
|
|
|
# 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 \<<EOF
|
|
Host *
|
|
IdentityFile /home/circleci/.ssh/id_rsa_458e62c517f6c480e40452126ce47421
|
|
EOF
|
|
- add_ssh_keys:
|
|
fingerprints:
|
|
# deploy key for zrepl.github.io
|
|
- "45:8e:62:c5:17:f6:c4:80:e4:04:52:12:6c:e4:74:21"
|
|
|
|
- run: bash -x docs/publish.sh -c -a
|