Run ARM64 tests in CI #139
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: ["**"] | |
jobs: | |
lint: | |
name: Lint (${{ matrix.toolchain.goarch }}) | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
toolchain: | |
- { goarch: amd64, cc: gcc } | |
- { goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
steps: | |
- name: Clone code | |
uses: actions/checkout@v4 | |
- name: Set up environment | |
uses: ./.github/workflows/env | |
- name: Linter | |
run: | | |
go version | |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.56.2 | |
export GOARCH=${{ matrix.toolchain.goarch }} | |
export CC=${{ matrix.toolchain.cc }} | |
export CGO_ENABLED=1 | |
make lint | |
test: | |
name: Test (${{ matrix.toolchain.goarch }}) | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
toolchain: | |
- { goarch: amd64, cc: gcc } | |
- { goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
steps: | |
- name: Clone code | |
uses: actions/checkout@v4 | |
- name: Set up environment | |
uses: ./.github/workflows/env | |
- name: Build | |
run: | | |
export GOARCH=${{ matrix.toolchain.goarch }} | |
export CC=${{ matrix.toolchain.cc }} | |
export OBJCOPY=llvm-objcopy # works cross-arch | |
export CGO_ENABLED=1 | |
make test | |
- name: Tests | |
run: | | |
make test | |
build-integration-test-binaries: | |
name: Build integration test binaries (${{ matrix.toolchain.goarch }}) | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 10 | |
strategy: | |
matrix: | |
toolchain: | |
- { goarch: amd64, cc: gcc } | |
- { goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
steps: | |
- name: Clone code | |
uses: actions/checkout@v4 | |
- name: Set up environment | |
uses: ./.github/workflows/env | |
- name: Prepare integration test binaries for qemu tests | |
run: | | |
export GOARCH=${{ matrix.toolchain.goarch }} | |
export CC=${{ matrix.toolchain.cc }} | |
export OBJCOPY=llvm-objcopy # works cross-arch | |
export CGO_ENABLED=1 | |
make integration-test-binaries | |
- name: Upload integration test binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: integration-test-binaries-${{ matrix.toolchain.goarch }} | |
path: support/*.test | |
integration-tests: | |
name: Integration tests (kernel v${{ matrix.kernel-version }} ${{ matrix.goarch }}) | |
runs-on: ubuntu-24.04 | |
needs: build-integration-test-binaries | |
timeout-minutes: 10 | |
strategy: | |
matrix: | |
include: | |
# AMD64 | |
- { kernel-version: 4.19.314, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 5.4.276, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 5.10.217, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 5.15.159, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 6.1.91, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 6.6.31, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 6.8.10, arch: x86_64, goarch: amd64, cc: gcc } | |
- { kernel-version: 6.9.1, arch: x86_64, goarch: amd64, cc: gcc } | |
# ARM64 (NOTE: older ARM64 kernels are not available in Cilium repos) | |
- { kernel-version: 6.6.31, arch: aarch64, goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
- { kernel-version: 6.9.1, arch: aarch64, goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
- { kernel-version: 6.8.4, arch: aarch64, goarch: arm64, cc: aarch64-linux-gnu-gcc } | |
steps: | |
- name: Clone code | |
uses: actions/checkout@v4 | |
- name: Set up environment | |
uses: ./.github/workflows/env | |
- name: Install dependencies | |
run: | | |
sudo apt-get -y install qemu-system-x86 qemu-system-arm | |
go install github.com/florianl/[email protected] | |
sudo mv ~/go/bin/bluebox /usr/local/bin/. | |
- name: Fetch integration test binaries | |
uses: actions/download-artifact@v4 | |
with: { name: "integration-test-binaries-${{ matrix.goarch }}" } | |
- name: Fetch precompiled kernels | |
run: | | |
install -d ci-kernels | |
echo "FROM ghcr.io/cilium/ci-kernels:${{ matrix.kernel-version }}" \ | |
| docker buildx build --platform linux/${{ matrix.goarch }} \ | |
--quiet --pull --output="ci-kernels" - | |
mv ci-kernels/boot/ ci-kernels/${{ matrix.kernel-version }}/ | |
- name: Test on kernel ${{ matrix.kernel-version }} | |
run: | | |
chmod a+rx *.test | |
export QEMU_ARCH=${{ matrix.arch}} | |
support/run-tests.sh ${{ matrix.kernel-version }} |