| --- |
| name: test |
| |
| on: |
| pull_request: {} |
| |
| env: |
| LINUX_ARCHES: "amd64 386 arm arm64 s390x mips64le ppc64le riscv64" |
| |
| jobs: |
| lint: |
| name: Lint |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - name: setup go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: .github/go-version |
| - uses: ibiqlik/action-yamllint@v3 |
| with: |
| format: auto |
| - uses: golangci/golangci-lint-action@v9 |
| with: |
| version: v2.3.0 |
| args: -v |
| verify-vendor: |
| name: Verify vendor directory |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Install Go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: .github/go-version |
| - name: Check module vendoring |
| run: | |
| go mod tidy |
| go mod vendor |
| test -z "$(git status --porcelain)" || (echo "please run 'go mod tidy && go mod vendor', and submit your changes"; exit 1) |
| build: |
| name: Build all linux architectures |
| needs: lint |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - name: setup go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: .github/go-version |
| - name: Build on all supported architectures |
| run: | |
| set -e |
| for arch in ${LINUX_ARCHES}; do |
| echo "Building for arch $arch" |
| GOARCH=$arch ./build_linux.sh |
| rm bin/* |
| done |
| test-linux: |
| name: Run tests on Linux amd64 |
| needs: build |
| runs-on: ubuntu-latest |
| steps: |
| - name: Install kernel module |
| run: | |
| sudo apt-get update |
| sudo apt-get install linux-modules-extra-$(uname -r) |
| - name: Install nftables |
| # ensure that bridged traffic goes through netfilter |
| run: | |
| sudo apt-get install nftables |
| sudo modprobe br-netfilter |
| - name: Install dnsmasq(dhcp server) |
| run: | |
| sudo apt-get install dnsmasq |
| sudo systemctl disable --now dnsmasq |
| - uses: actions/checkout@v4 |
| - name: setup go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: .github/go-version |
| - name: Set up Go for root |
| run: | |
| sudo ln -sf `which go` `sudo which go` || true |
| sudo go version |
| |
| - name: Install test binaries |
| run: | |
| go install github.com/containernetworking/cni/cnitool@latest |
| go install github.com/mattn/goveralls@latest |
| go install github.com/modocache/gover@latest |
| |
| - name: test |
| run: PATH=$PATH:$(go env GOPATH)/bin COVERALLS=1 ./test_linux.sh |
| |
| - name: Send coverage to coveralls |
| env: |
| COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| run: | |
| PATH=$PATH:$(go env GOPATH)/bin |
| gover |
| goveralls -coverprofile=gover.coverprofile -service=github |
| test-win: |
| name: Build and run tests on Windows |
| needs: build |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - name: setup go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: .github/go-version |
| - name: test |
| run: bash ./test_windows.sh |