Run ARM64 tests in CI #134
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 | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: true | |
max-parallel: 2 | |
matrix: | |
go: ["stable"] | |
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 | |
make lint | |
test: | |
name: Test | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: true | |
max-parallel: 2 | |
matrix: | |
go: ["stable"] | |
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 | |
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.toolchain.arch }}) | |
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 | |
- { 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 }} |