name: Multus integration tests on: push: tags: - v* branches: - master - release-* pull_request: paths: - cmd/rook/userfacing/** - pkg/daemon/multus/** - .github/workflows/multus.yaml - tests/scripts/multus/** defaults: run: # reference: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#using-a-specific-shell shell: bash --noprofile --norc -eo pipefail -x {0} # cancel the in-progress workflow when PR is refreshed. concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true permissions: contents: read jobs: test-validation-tool: runs-on: ubuntu-latest strategy: fail-fast: true if: "!contains(github.event.pull_request.labels.*.name, 'skip-ci')" env: NUMBER_OF_COMPUTE_NODES: 5 steps: - name: checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go version uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version: "1.25" - name: Create KinD Cluster uses: helm/kind-action@92086f6be054225fa813e0a4b13787fc9088faab # v1.13.0 with: config: tests/scripts/multus/kind-config.yaml cluster_name: kind - name: consider (pre-job) debugging uses: ./.github/workflows/tmate_debug with: use-tmate: ${{ secrets.USE_TMATE }} debug-ci: ${{ contains(github.event.pull_request.labels.*.name, 'debug-ci') }} - name: Setup multus run: ./tests/scripts/multus/setup-multus.sh - name: Set up multus prerequisite host routing run: kubectl create -f tests/scripts/multus/host-cfg-ds.yaml - name: Install public and cluster NADs in default namespace run: kubectl create -f tests/scripts/multus/default-public-cluster-nads.yaml - name: Quickly build Rook binary id: build run: go build -o rook cmd/rook/*.go - name: Run CLI validation test run: ./tests/scripts/multus/test-110-cli.sh - name: Label kind nodes for stretch cluster tests id: label # tests that require labels are independent from previous tests if: steps.build.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-200-stretch-label-nodes.sh # nodes are purposefully not tainted yet for overlap test - name: Run stretch cluster overlap test id: overlap # independent from other tests as long as nodes are labeled if: steps.label.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-210-stretch-overlap.sh - name: Run cleanup test # cleanup relies on overlap test to be successful if: steps.overlap.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-211-stretch-cleanup.sh - name: Taint kind nodes for remaining stretch cluster tests id: taint # tests that require taints+labels are independent from previous tests if: steps.label.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-200-stretch-taint-nodes.sh - name: Run stretch cluster test with public and cluster networks # independent from other tests as long as nodes are tainted and labeled if: steps.taint.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-220-stretch-pub-and-cluster.sh - name: Run stretch cluster test with public network only # independent from other tests as long as nodes are tainted and labeled if: steps.taint.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-230-stretch-pub-only.sh - name: Run stretch cluster test with cluster network only # independent from other tests as long as nodes are tainted and labeled if: steps.taint.outcome == 'success' && !cancelled() run: ./tests/scripts/multus/test-240-stretch-cluster-only.sh - name: consider (post-job) debugging uses: ./.github/workflows/upterm_debug with: debug-ci: ${{ contains(github.event.pull_request.labels.*.name, 'debug-ci') }}