test_arm_task: env: ELVISH_TEST_TIME_SCALE: "20" TEST_FLAG: -race name: Test on Linux ARM64 arm_container: # The Alpine image has segmentation faults when running test -race, so # use Debian instead. image: golang:1.22-bookworm go_version_script: go version test_script: go test $TEST_FLAG ./... test_bsd_task: env: ELVISH_TEST_TIME_SCALE: "20" TEST_FLAG: -race GO_VERSION: "1.22.0" PATH: /usr/local/go/bin:$PATH matrix: - name: Test on FreeBSD freebsd_instance: # Find latest version on https://www.freebsd.org/releases/ image_family: freebsd-14-0 setup_script: # go test -race is not compatible with ASLR, which has been enabled by # default since FreeBSD 13 # (https://wiki.freebsd.org/AddressSpaceLayoutRandomization). LLVM # issue: https://github.com/llvm/llvm-project/issues/53256 # # There's also a Go bug where using go test -race with ASLR fails # to run the tests and still reports tests as passing: # https://github.com/golang/go/issues/65425 sysctl kern.elf64.aslr.enable=0 - name: Test on NetBSD compute_engine_instance: image_project: pg-ci-images # Find latest version in the "VERSION:" variable for the NetBSD image in # https://github.com/anarazel/pg-vm-images/blob/main/.cirrus.yml image: family/pg-ci-netbsd-vanilla-9-3 platform: netbsd - name: Test on OpenBSD compute_engine_instance: image_project: pg-ci-images # Find latest version in the "VERSION:" variable for the OpenBSD image in # https://github.com/anarazel/pg-vm-images/blob/main/.cirrus.yml image: family/pg-ci-openbsd-vanilla-7-3 platform: openbsd go_toolchain_cache: fingerprint_key: $CIRRUS_OS-$GO_VERSION folder: /usr/local/go populate_script: | curl -L -o go.tar.gz https://go.dev/dl/go$GO_VERSION.$CIRRUS_OS-amd64.tar.gz mkdir -p /usr/local tar -C /usr/local -xzf go.tar.gz go_version_script: go version test_script: go test $TEST_FLAG ./... build_binaries_task: name: Build binaries only_if: $CIRRUS_BRANCH == 'master' alias: binaries env: CGO_ENABLED: "0" container: # Keep the Go version part in sync with # https://github.com/elves/up/blob/master/Dockerfile image: golang:1.22.0-alpine go_modules_cache: fingerprint_script: cat go.sum folder: ~/go/pkg/mod go_build_cache: folder: ~/.cache/go-build # Git is not required for building the binaries, but we need to include for Go # to include VCS information in the binary. Also install coreutils to get a # touch command that supports specifying the timezone. setup_script: apk add zip git coreutils # _bin is in .gitignore, so Git won't consider the repo dirty. This will # impact the binary, which encodes VCS information. build_binaries_script: | go run ./cmd/elvish ./tools/buildall.elv -name elvish-HEAD -variant official ./cmd/elvish _bin/ binaries_artifacts: path: _bin/** binary_checksums_artifacts: path: _bin/*/*.sha256sum check_binary_checksums_task: name: Check binary checksums ($HOST) only_if: $CIRRUS_BRANCH == 'master' container: image: alpine:latest depends_on: binaries matrix: - env: HOST: cdg - env: HOST: hkg setup_script: apk add git curl # Enable auto cancellation - if there is another push, only the task to # compare the website against the newer commit should continue. auto_cancellation: "true" wait_website_update_script: | ts=$(git show -s --format=%ct HEAD) wait=10 while true; do if website_ts=$(curl -sSf https://$HOST.elv.sh/commit-ts.txt); then if test "$website_ts" -ge "$ts"; then echo "website ($website_ts) >= CI ($ts)" exit 0 else echo "website ($website_ts) < CI ($ts)" fi else echo "website has no commit-ts.txt yet" fi sleep $wait test $wait -lt 96 && wait=`echo "$wait * 2" | bc` done check_binary_checksums_script: | curl -o checksums.zip https://api.cirrus-ci.com/v1/artifact/build/$CIRRUS_BUILD_ID/binaries/binary_checksums.zip unzip checksums.zip cd _bin ret=0 for f in */elvish-HEAD.sha256sum */elvish-HEAD.exe.sha256sum; do website_sum=$(curl -sS https://$HOST.dl.elv.sh/$f | awk '{print $1}') ci_sum=$(cat $f | awk '{print $1}') if test "$website_sum" = "$ci_sum"; then echo "$f: website == CI ($ci_sum)" else echo "$f: website ($website_sum) != CI ($ci_sum)" ret=1 fi done exit $ret