mirror of
https://github.com/zrepl/zrepl.git
synced 2024-11-25 01:44:43 +01:00
def510abfd
Go upgrade: - Go 1.23 is current => use that for release builds - Go 1.22 is less than one year old, it's desirable to support it. - The [`Go Toolchains`](https://go.dev/doc/toolchain) stuff is available in both of these (would also be in Go 1.21). That is quite nice stuff, but required some changes to how we versions we use in CircleCI and the `release-docker` Makefile target. Protobuf upgrade: - Go to protobuf GH release website - Download latest locally - run `sha256sum` - replace existing pinned hashes - `make generate` Deps upgrade: - `go get -t -u all` - repository moves aren't handled well automatically, fix manually - repeat until no changes
306 lines
7.8 KiB
YAML
306 lines
7.8 KiB
YAML
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 <<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
|
|
|
|
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 \<<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"
|
|
|
|
# caller must install-docdep
|
|
- when:
|
|
condition: << parameters.push >>
|
|
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: <<parameters.goos>>
|
|
GOARCH: <<parameters.goarch>>
|
|
GOTOOLCHAIN: "go<<parameters.goversion>>"
|
|
|
|
steps:
|
|
- checkout
|
|
|
|
- go/load-cache:
|
|
key: quickcheck-<<parameters.goversion>>
|
|
- install-godep
|
|
- run: go mod download
|
|
- run: cd build && go mod download
|
|
- go/save-cache:
|
|
key: quickcheck-<<parameters.goversion>>
|
|
|
|
- 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:
|
|
parameters:
|
|
goversion:
|
|
type: string
|
|
docker:
|
|
- image: *cimg_with_modern_go
|
|
environment:
|
|
GOTOOLCHAIN: "go<<parameters.goversion>>"
|
|
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
|