mirror of
https://github.com/go-sylixos/elvish.git
synced 2024-11-27 15:01:22 +08:00
4a2880c69d
The archives depend on the tools used to create them and are not exactly reproducible.
135 lines
4.6 KiB
YAML
135 lines
4.6 KiB
YAML
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
|