From adc4b6b316869fcddcd4c771c5297cb749b134fb Mon Sep 17 00:00:00 2001 From: Etienne Perot Date: Wed, 3 Aug 2022 14:52:22 -0700 Subject: [PATCH] BuildKite: Refactor Pipeline YAML. This adds templates that can be used to distinguish tests that rely on the checked-out source tree vs using STAGED_BINARIES instead. PiperOrigin-RevId: 465155335 --- .buildkite/pipeline.yaml | 135 +++++++++++++++++++++++++++++---------- 1 file changed, 101 insertions(+), 34 deletions(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index cc3464c9e..405ca6caa 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -7,6 +7,11 @@ _templates: limit: 10 - exit_status: "*" limit: 2 + source_test: &source_test + if: build.env("STAGED_BINARIES") == null + platform_specific_agents: &platform_specific_agents {} + kvm_agents: &kvm_agents {kvm: "true"} + ubuntu_agents: &ubuntu_agents {os: "ubuntu"} benchmarks: &benchmarks timeout_in_minutes: 120 retry: @@ -21,8 +26,9 @@ _templates: BENCHMARKS_TABLE: benchmarks BENCHMARKS_UPLOAD: true agents: + <<: *kvm_agents + <<: *platform_specific_agents arch: "amd64" - kvm: "true" netstack_test: &netstack_test env: PACKAGES: > @@ -42,31 +48,40 @@ env: # Force a clean checkout every time to avoid reuse of files between runs. BUILDKITE_CLEAN_CHECKOUT: true + # Optional filter for syscall tests. + SYSCALL_TEST_FILTERS: '' + steps: # Run basic smoke tests before preceding to other tests. - <<: *common + <<: *source_test label: ":fire: Smoke tests (AMD64)" command: make smoke-tests agents: arch: "amd64" - wait - <<: *common + <<: *source_test label: ":fire: Smoke tests (ARM64)" command: make smoke-tests agents: arch: "arm64" - <<: *common + <<: *source_test label: ":fire: Smoke race tests" command: make smoke-race-tests + - wait # Build everything. - <<: *common + <<: *source_test label: ":world_map: Build everything (AMD64)" command: "make build OPTIONS=--build_tag_filters=-nogo TARGETS=//..." agents: arch: "amd64" - <<: *common + <<: *source_test label: ":world_map: Build everything (ARM64)" commands: - "make build OPTIONS=--build_tag_filters=-nogo TARGETS=//pkg/..." @@ -78,6 +93,7 @@ steps: # as a GitHub action in order to preserve this maintaince across forks. However, providing the # action here may provide easier debuggability and diagnosis on failure. - <<: *common + <<: *source_test label: ":golang: Go branch" commands: - tools/go_branch.sh @@ -86,6 +102,7 @@ steps: # Check that commonly used netstack packages build on various platforms. - <<: *common + <<: *source_test <<: *netstack_test label: ":mac: Netstack on Mac" commands: @@ -93,6 +110,7 @@ steps: - git checkout go && git clean -xf . - GOOS=darwin GOARCH=arm64 go build $$PACKAGES - <<: *common + <<: *source_test <<: *netstack_test label: ":windows: Netstack on Windows" commands: @@ -100,6 +118,7 @@ steps: - git checkout go && git clean -xf . - GOOS=windows GOARCH=amd64 go build $$PACKAGES - <<: *common + <<: *source_test <<: *netstack_test label: ":freebsd: Netstack on FreeBSD" commands: @@ -107,6 +126,7 @@ steps: - git checkout go && git clean -xf . - GOOS=freebsd GOARCH=amd64 go build $$PACKAGES - <<: *common + <<: *source_test <<: *netstack_test label: ":openbsd: Netstack on OpenBSD" commands: @@ -114,6 +134,7 @@ steps: - git checkout go && git clean -xf . - GOOS=openbsd GOARCH=amd64 go build $$PACKAGES - <<: *common + <<: *source_test <<: *netstack_test label: ":older_man: Netstack on 32-bit Linux" commands: @@ -123,6 +144,7 @@ steps: # Release workflow. - <<: *common + <<: *source_test label: ":ship: Release tests" commands: - make BAZEL_OPTIONS=--config=x86_64 artifacts/x86_64 @@ -133,11 +155,13 @@ steps: # Images tests. - <<: *common + <<: *source_test label: ":docker: Images (x86_64)" command: make ARCH=x86_64 load-all-images agents: arch: "amd64" - <<: *common + <<: *source_test label: ":docker: Images (aarch64)" command: make ARCH=aarch64 load-all-images agents: @@ -145,49 +169,60 @@ steps: # Basic unit tests. - <<: *common + <<: *source_test label: ":golang: Nogo tests" command: make nogo-tests - <<: *common + <<: *source_test label: ":test_tube: Unit tests (cgroupv1)" command: make unit-tests agents: cgroup: "v1" arch: "amd64" - <<: *common + <<: *source_test label: ":test_tube: Unit tests (cgroupv2)" command: make unit-tests agents: cgroup: "v2" arch: "amd64" - <<: *common + <<: *source_test label: ":test_tube: Unit tests (ARM64)" command: make unit-tests agents: arch: "arm64" - <<: *common + <<: *source_test label: ":test_tube: Container tests (cgroupv1)" command: make container-tests agents: + <<: *kvm_agents cgroup: "v1" - kvm: "true" arch: "amd64" - <<: *common + # This variant is not really a source test, but we annotate it as such to + # avoid running binary-only tests for all variants of cgroups. It is + # sufficient to run cgroupv2 variants only for source changes. + <<: *source_test label: ":test_tube: Container tests (cgroupv2)" command: make container-tests agents: + <<: *kvm_agents cgroup: "v2" - kvm: "true" arch: "amd64" # All system call tests. - <<: *common label: ":toolbox: System call tests (AMD64)" - command: make syscall-tests + command: "make BAZEL_OPTIONS=--test_tag_filters=$SYSCALL_TEST_FILTERS syscall-tests" parallelism: 20 agents: + <<: *platform_specific_agents + <<: *kvm_agents arch: "amd64" - kvm: "true" - <<: *common + <<: *source_test label: ":muscle: System call tests (ARM64)" command: make BAZEL_OPTIONS=--test_tag_filters=runsc_ptrace syscall-tests parallelism: 10 @@ -196,99 +231,117 @@ steps: # Integration tests. - <<: *common + <<: *source_test label: ":docker: Docker tests (cgroupv1)" command: make docker-tests agents: + <<: *ubuntu_agents arch: "amd64" cgroup: "v1" - os: "ubuntu" - <<: *common + # See above: not truly a source test. + <<: *source_test label: ":docker: Docker tests (cgroupv2)" command: make docker-tests agents: + <<: *ubuntu_agents arch: "amd64" cgroup: "v2" - os: "ubuntu" - <<: *common label: ":goggles: Overlay tests" command: make overlay-tests agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":safety_pin: Host network tests" command: make hostnet-tests agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":satellite: gVisor GSO tests" command: make swgso-tests agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common + <<: *source_test label: ":coffee: Do tests" command: make do-tests agents: arch: "amd64" - <<: *common + <<: *source_test label: ":person_in_lotus_position: KVM tests" command: make kvm-tests agents: + <<: *kvm_agents arch: "amd64" - kvm: "true" - <<: *common label: ":weight_lifter: Fsstress test" command: make fsstress-test agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":docker: Containerd 1.3.9 tests" command: make containerd-test-1.3.9 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents cgroup: "v1" arch: "amd64" - os: "ubuntu" - <<: *common label: ":docker: Containerd 1.4.3 tests" command: make containerd-test-1.4.3 agents: - os: "ubuntu" + <<: *platform_specific_agents + <<: *ubuntu_agents - <<: *common label: ":docker: Containerd 1.5.4 tests (cgroupv1)" command: make containerd-test-1.5.4 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents cgroup: "v1" - os: "ubuntu" - <<: *common + # See above: not truly a source test. + <<: *source_test label: ":docker: Containerd 1.5.4 tests (cgroupv2)" command: make containerd-test-1.5.4 agents: + <<: *ubuntu_agents cgroup: "v2" - os: "ubuntu" - <<: *common label: ":docker: Containerd 1.6.0-rc.4 tests (cgroupv1)" command: make containerd-test-1.6.0-rc.4 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents cgroup: "v1" - os: "ubuntu" - <<: *common + <<: *source_test label: ":docker: Containerd 1.6.0-rc.4 tests (cgroupv2)" command: make containerd-test-1.6.0-rc.4 agents: + <<: *ubuntu_agents cgroup: "v2" - os: "ubuntu" - <<: *common + <<: *source_test label: ":podman: Podman" command: sudo ./test/podman/run.sh agents: + <<: *ubuntu_agents cgroup: "v2" - os: "ubuntu" # Check the website builds. - <<: *common + <<: *source_test label: ":earth_americas: Website tests" command: make website-build agents: @@ -296,20 +349,23 @@ steps: # Networking tests. - <<: *common + <<: *source_test label: ":table_tennis_paddle_and_ball: IPTables tests" command: make iptables-tests agents: - os: "ubuntu" + <<: *ubuntu_agents - <<: *common + <<: *source_test label: ":construction_worker: Packetdrill tests" command: make packetdrill-tests agents: - os: "ubuntu" + <<: *ubuntu_agents - <<: *common + <<: *source_test label: ":hammer: Packetimpact tests" command: make packetimpact-tests agents: - os: "ubuntu" + <<: *ubuntu_agents # Runtime tests. - <<: *common @@ -317,36 +373,41 @@ steps: command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} php8.1.1-runtime-tests parallelism: 10 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":java: Java runtime tests" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} java17-runtime-tests parallelism: 40 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":golang: Go runtime tests" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} go1.16-runtime-tests parallelism: 10 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":node: NodeJS runtime tests" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} nodejs16.13.2-runtime-tests parallelism: 10 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":python: Python runtime tests" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} python3.10.2-runtime-tests parallelism: 10 agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" # Runtime tests (LISAFS). - <<: *common @@ -355,40 +416,45 @@ steps: parallelism: 10 if: build.message =~ /lisafs/ || build.branch == "master" agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":java: Java runtime tests (LISAFS)" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} java17-runtime-tests_lisafs parallelism: 40 if: build.message =~ /lisafs/ || build.branch == "master" agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":golang: Go runtime tests (LISAFS)" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} go1.16-runtime-tests_lisafs parallelism: 10 if: build.message =~ /lisafs/ || build.branch == "master" agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":node: NodeJS runtime tests (LISAFS)" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} nodejs16.13.2-runtime-tests_lisafs parallelism: 10 if: build.message =~ /lisafs/ || build.branch == "master" agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" - <<: *common label: ":python: Python runtime tests (LISAFS)" command: make RUNTIME_LOG_DIR=/tmp/$${BUILDKITE_JOB_ID} python3.10.2-runtime-tests_lisafs parallelism: 10 if: build.message =~ /lisafs/ || build.branch == "master" agents: + <<: *platform_specific_agents + <<: *ubuntu_agents arch: "amd64" - os: "ubuntu" # Run basic benchmarks smoke tests (no upload). - <<: *common @@ -397,8 +463,9 @@ steps: # Use the opposite of the benchmarks filter. if: build.branch != "master" agents: + <<: *platform_specific_agents + <<: *kvm_agents arch: "amd64" - kvm: "true" # Run all benchmarks. - <<: *benchmarks @@ -413,7 +480,7 @@ steps: # For fio, running with --test.benchtime=Xs scales the written/read # bytes to several GB. This is not a problem for root/bind/volume mounts, # but for tmpfs mounts, the size can grow to more memory than the machine - # has availabe. Fix the runs to 1GB written/read for the benchmark. + # has available. Fix the runs to 1GB written/read for the benchmark. - <<: *benchmarks label: ":floppy_disk: FIO benchmarks (read/write)" command: make -i benchmark-platforms BENCHMARKS_SUITE=fio BENCHMARKS_TARGETS=test/benchmarks/fs:fio_test BENCHMARKS_FILTER=Fio/operation\.[rw][er] BENCHMARKS_OPTIONS=--test.benchtime=1000x