feature/conn25: add ipv6 test coverage for datapath (#21362) #3737
This file contains hidden or 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
| # Run a single natlab smoke test on every PR. The full natlab suite | |
| # is opt-in and lives in .github/workflows/natlab-test.yml. | |
| # See https://github.com/tailscale/tailscale/issues/13038 | |
| name: "natlab-basic" | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| on: | |
| push: | |
| branches: | |
| - "main" | |
| - "release-branch/*" | |
| pull_request: | |
| # all PRs on all branches | |
| merge_group: | |
| branches: | |
| - "main" | |
| jobs: | |
| EasyEasy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| # Go caches, keyed the same as natlab-test.yml's. Only that workflow's | |
| # prepare job writes the build cache. A miss here just means a cold build. | |
| - name: Cache tsgo toolchain | |
| uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # zizmor: ignore[cache-poisoning] v5.0.4 | |
| with: | |
| path: ~/.cache/tsgo | |
| key: natlab-tsgo-${{ runner.os }}-${{ hashFiles('go.toolchain.rev') }} | |
| - name: Cache Go modules | |
| uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # zizmor: ignore[cache-poisoning] v5.0.4 | |
| with: | |
| path: ~/go/pkg/mod | |
| key: natlab-gomod-${{ runner.os }}-${{ hashFiles('go.mod', 'go.sum') }} | |
| - name: Restore Go build cache | |
| uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 | |
| with: | |
| path: ~/.cache/go-build | |
| key: natlab-gobuild-${{ runner.os }}-${{ hashFiles('go.sum') }}-${{ github.run_id }} | |
| restore-keys: | | |
| natlab-gobuild-${{ runner.os }}-${{ hashFiles('go.sum') }}- | |
| natlab-gobuild-${{ runner.os }}- | |
| - name: Enable KVM | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: Install qemu | |
| run: | | |
| sudo rm -f /var/lib/man-db/auto-update | |
| sudo apt-get -y update | |
| sudo apt-get -y remove man-db | |
| sudo apt-get install -y qemu-system-x86 qemu-utils | |
| - name: Build VM image | |
| # The test always rebuilds this image itself (so the baked-in | |
| # binaries match the source under test), but we build it here | |
| # first so that rebuild is a build cache hit instead of a cold | |
| # build that eats the go test -timeout budget, and so a broken | |
| # image build fails earlier with a clearer error. The Makefile | |
| # uses ./tool/go, the same toolchain the test's rebuild uses; | |
| # a build with a different toolchain here would warm nothing. | |
| run: | | |
| make -C gokrazy natlab | |
| - name: Run natlab integration tests | |
| # With a warm build cache the test takes well under a minute. | |
| # The timeout matches natlab-test.yml and exceeds vmtest's own | |
| # 10 minute test context, so that a hung node fails through the | |
| # test's bounded waits, which dump the node's logs, rather than | |
| # through go test's timeout panic, which dumps nothing useful. | |
| run: | | |
| ./tool/go test -v -run=^TestEasyEasy$ -timeout=15m -count=1 ./tstest/natlab/vmtest --run-vm-tests |