Skip to content

Add CI coverage for go1.21 #118

Add CI coverage for go1.21

Add CI coverage for go1.21 #118

Workflow file for this run

name: Go
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch:
- armv6
- armv7
- aarch64
- 386
- x64
go:
- '1.5'
- '1.6'
- '1.7'
- '1.8'
- '1.9'
- '1.10'
- '1.11'
- '1.12'
- '1.13'
- '1.14'
- '1.15'
- '1.16'
- '1.17'
- '1.18'
- '1.19'
- '1.20'
- '1.21'
# Race detector binaries crash with:
#
# FATAL: ThreadSanitizer: unsupported VMA range
#
# See https://github.com/golang/go/issues/29948.
arm64_unsupported_vma_range:
- true
include:
# Race builds are pretty much busted on Go 1.4 and below on systems
# with newer C compilers. A number of fixes were backported to
# go1.4-bootstrap but not any released version. See
# https://github.com/golang/go/compare/go1.4.3...release-branch.go1.4.
#
# Race builds aren't supported on linux/386.
#
# Cross-compilation became possible in go1.5 with the removal of C
# code from the compiler. See https://go.dev/doc/go1.5#c.
#
# Race builds aren't supported in gccgo.
#
# Cross-compilation isn't supported in gccgo.
- arch: x64
go: '1.3'
x64_race_broken: true
- arch: x64
go: '1.4'
x64_race_broken: true
- arch: x64
go: gccgo-9
x64_race_broken: true
- arch: x64
go: gccgo-10
x64_race_broken: true
- arch: x64
go: gccgo-11
x64_race_broken: true
- arch: x64
go: gccgo-12
x64_race_broken: true
- arch: x64
go: gccgo-13
x64_race_broken: true
# Go binaries built with Go 1.8 and below are incompatible with QEMU
# user-level emulation. See
# https://github.com/golang/go/commit/2673f9e.
- arch: armv6
go: '1.5'
qemu_emulation_broken: true
- arch: armv6
go: '1.6'
qemu_emulation_broken: true
- arch: armv6
go: '1.7'
qemu_emulation_broken: true
- arch: armv6
go: '1.8'
qemu_emulation_broken: true
- arch: armv7
go: '1.5'
qemu_emulation_broken: true
- arch: armv7
go: '1.6'
qemu_emulation_broken: true
- arch: armv7
go: '1.7'
qemu_emulation_broken: true
- arch: armv7
go: '1.8'
qemu_emulation_broken: true
- arch: aarch64
go: '1.5'
qemu_emulation_broken: true
- arch: aarch64
go: '1.6'
qemu_emulation_broken: true
- arch: aarch64
go: '1.7'
qemu_emulation_broken: true
- arch: aarch64
go: '1.8'
qemu_emulation_broken: true
# Race detector support on linux/arm64 was added in go1.12. See
# https://go.dev/doc/go1.12.
- arch: aarch64
go: '1.5'
arm64_race_unsupported: true
- arch: aarch64
go: '1.6'
arm64_race_unsupported: true
- arch: aarch64
go: '1.7'
arm64_race_unsupported: true
- arch: aarch64
go: '1.8'
arm64_race_unsupported: true
- arch: aarch64
go: '1.9'
arm64_race_unsupported: true
- arch: aarch64
go: '1.10'
arm64_race_unsupported: true
- arch: aarch64
go: '1.11'
arm64_race_unsupported: true
steps:
- uses: actions/checkout@v4
- name: Set up Go
if: ${{ !startsWith(matrix.go, 'gccgo-') }}
uses: actions/setup-go@v4.1.0
with:
go-version: ${{ matrix.go }}
- name: Set up gccgo
if: ${{ startsWith(matrix.go, 'gccgo-') }}
run: |
sudo apt update && \
sudo apt install -y ${{ matrix.go }} && \
echo ${{ matrix.go }} | sed 's/^gcc//' | xargs -I % ln -s /usr/bin/% /usr/local/bin/go && \
go version
- name: 'Build with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' }}
run: go build -v ./...
- name: 'Build with ${{ matrix.go }}'
if: ${{ matrix.arch == '386' }}
env:
GOARCH: 386
run: go build -v ./...
- name: 'Check that Get is inlined with ${{ matrix.go }}'
if: ${{ !startsWith(matrix.go, 'gccgo-') && matrix.arch == 'x64' }}
run: |
if echo -e '${{ matrix.go }}\n1.12' | sort -V | head -n1 | xargs test 1.12 = ; then
go build -gcflags='-m' 2>&1 | grep 'can inline Get$' > /dev/null
fi
- name: 'Check that Get is inlined with ${{ matrix.go }}'
if: ${{ !startsWith(matrix.go, 'gccgo-') && matrix.arch == '386' }}
env:
GOARCH: 386
run: |
if echo -e '${{ matrix.go }}\n1.12' | sort -V | head -n1 | xargs test 1.12 = ; then
go build -gcflags='-m' 2>&1 | grep 'can inline Get$' > /dev/null
fi
- name: 'BuildRace with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' && !matrix.x64_race_broken }}
run: go build -race -v ./...
- name: 'Test with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' }}
run: go test -v ./...
- name: 'Test with ${{ matrix.go }}'
if: ${{ matrix.arch == '386' }}
env:
GOARCH: 386
run: go test -v ./...
- name: 'TestRace with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' && !matrix.x64_race_broken }}
run: go test -race -v ./...
- name: 'Bench with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' }}
run: go test -bench=. -benchmem -v ./...
- name: 'Bench with ${{ matrix.go }}'
if: ${{ matrix.arch == '386' }}
env:
GOARCH: 386
run: go test -bench=. -benchmem -v ./...
- name: 'BenchRace with ${{ matrix.go }}'
if: ${{ matrix.arch == 'x64' && !matrix.x64_race_broken }}
run: go test -bench=. -benchmem -race -v ./...
- name: 'BuildTest with ${{ matrix.go }} for armv6'
if: ${{ matrix.arch == 'armv6' }}
env:
GOARCH: arm
GOARM: 6
run: go test -c ./...
- name: 'BuildTest with ${{ matrix.go }} for armv7'
if: ${{ matrix.arch == 'armv7' }}
env:
GOARCH: arm
GOARM: 7
run: go test -c ./...
- name: 'BuildTest with ${{ matrix.go }} for aarch64'
if: ${{ matrix.arch == 'aarch64' }}
env:
GOARCH: arm64
run: go test -c ./...
- name: 'BuildTestRace with ${{ matrix.go }} for aarch64'
if: ${{ matrix.arch == 'aarch64' && !matrix.arm64_race_unsupported }}
env:
GOARCH: arm64
CGO_ENABLED: 1
run: |
# Non-host *.syso files are missing from the Go toolchains provided
# by setup-go. See https://github.com/actions/setup-go/issues/181.
curl --location --output $(go env GOROOT)/src/runtime/race/race_linux_arm64.syso \
https://github.com/golang/go/raw/release-branch.go${{ matrix.go }}/src/runtime/race/race_linux_arm64.syso && \
sudo apt update && \
sudo apt install gcc-aarch64-linux-gnu && \
CC=aarch64-linux-gnu-gcc CC_FOR_TARGET=gcc-aarch64-linux-gnu go test -c -race -o goid.race.test ./...
- name: 'DeleteTestRace with $$ {{ matrix.go}} for aarch64'
if: ${{ matrix.arch == 'aarch64' && !matrix.arm64_race_unsupported && matrix.arm64_unsupported_vma_range }}
run: rm goid.race.test
- name: 'Test and Bench with ${{ matrix.go }} on ${{ matrix.arch }}'
if: ${{ matrix.arch != '386' && matrix.arch != 'x64' && !matrix.qemu_emulation_broken }}
uses: uraimo/run-on-arch-action@v2
with:
arch: ${{ matrix.arch }}
distro: bullseye
dockerRunArgs: --mount type=bind,source="$(pwd)",target=/checkout,readonly
run: |
find /checkout -name '*.test' -type f -executable -print0 | \
xargs -t -0 -I '{}' sh -c '{} -test.v && {} -test.bench=. -test.benchmem -test.v'