mirror of
https://github.com/tailscale/tailscale.git
synced 2026-09-13 14:29:49 -04:00
The natlab workflows cached only the VM images, so every job re-downloaded the tsgo toolchain and built Go from scratch. Cache the toolchain, module cache, and build cache in both workflows. natlab-test's prepare job is the only writer of the build cache; everything else, including its 54 matrix jobs and natlab-basic, restores it. The warm step compiles with both toolchains on purpose: ./tool/go builds the test binaries, while the bare `go` that vmtest.go and gokrazy/build shell out to is the runner's stock Go. GOCACHE keys embed the compiler's build ID, so those entries don't interchange, but both land in ~/.cache/go-build. Updates #13038 Signed-off-by: Brendan Creane <bcreane@gmail.com>
66 lines
2.6 KiB
YAML
66 lines
2.6 KiB
YAML
# 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 will build this if missing, but we do it explicitly
|
|
# to avoid cutting into the go test -timeout budget, and to
|
|
# fail earlier with a clearer error if the image build breaks.
|
|
run: |
|
|
make -C gokrazy natlab
|
|
- name: Run natlab integration tests
|
|
run: |
|
|
./tool/go test -v -run=^TestEasyEasy$ -timeout=3m -count=1 ./tstest/natlab/vmtest --run-vm-tests
|