diff --git a/.github/workflows/build-arm64-image.yaml b/.github/workflows/build-arm64-image.yaml deleted file mode 100644 index 3ba20ab9538..00000000000 --- a/.github/workflows/build-arm64-image.yaml +++ /dev/null @@ -1,76 +0,0 @@ -name: Build arm64 Image -on: - pull_request: - branches: - - master - paths-ignore: - - 'docs/**' - - '**.md' - push: - branches: - - master - - release-* - paths-ignore: - - 'docs/**' - - '**.md' - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -env: - GO_VERSION: '' - -jobs: - build: - name: Build arm64 - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v3 - - uses: docker/setup-qemu-action@v3 - with: - platforms: arm64 - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go Cache - uses: actions/cache@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-${{ env.GO_FULL_VER }}-arm64-${{ hashFiles('**/go.sum') }} - restore-keys: ${{ runner.os }}-${{ env.GO_FULL_VER }}-arm64- - - - name: Build - run: make release-arm - - - name: Push - if: github.ref_name == github.event.repository.default_branch || startsWith(github.ref_name, 'release-') - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - COMMIT: ${{ github.sha }} - run: | - TAG=$(cat VERSION) - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - docker tag kubeovn/kube-ovn:$TAG kubeovn/kube-ovn:$TAG-arm - docker tag kubeovn/kube-ovn:$TAG kubeovn/kube-ovn-dev:$COMMIT-arm - docker tag kubeovn/kube-ovn:$TAG-debug kubeovn/kube-ovn:$TAG-debug-arm - docker tag kubeovn/vpc-nat-gateway:$TAG kubeovn/vpc-nat-gateway:$TAG-arm - docker tag kubeovn/vpc-nat-gateway:$TAG kubeovn/vpc-nat-gateway-dev:$COMMIT-arm - docker images - docker push kubeovn/kube-ovn:$TAG-arm - docker push kubeovn/kube-ovn:$TAG-debug-arm - docker push kubeovn/kube-ovn-dev:$COMMIT-arm - docker push kubeovn/vpc-nat-gateway:$TAG-arm - docker push kubeovn/vpc-nat-gateway-dev:$COMMIT-arm diff --git a/.github/workflows/build-windows.yaml b/.github/workflows/build-windows.yaml deleted file mode 100644 index 6ffc33d297c..00000000000 --- a/.github/workflows/build-windows.yaml +++ /dev/null @@ -1,278 +0,0 @@ -name: Build Windows - -on: - workflow_dispatch: - release: - pull_request: - branches: - - master - paths-ignore: - - 'docs/**' - - '**.md' - push: - branches: - - master - - release-* - paths-ignore: - - 'docs/**' - - '**.md' - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -env: - GO_VERSION: '' - GOSEC_VERSION: '2.20.0' - -jobs: - filter: - name: Path Filter - runs-on: ubuntu-22.04 - outputs: - build-ovs-ovn: ${{ steps.filter.outputs.windows-ovs-ovn }} - build-kube-ovn: ${{ steps.filter.outputs.windows-kube-ovn }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: Generate path filter - env: - GOOS: windows - run: | - filter=".github/path-filters.yaml" - workflow=$(echo ${{ github.workflow_ref }} | awk -F@ '{print $1}' | sed 's@^${{ github.repository }}/@@') - cat > $filter < nul && set _vs_path=!_vs_path!;%%~d - ) - SET PATH="%_vs_path%;%PATH%" - C:\msys64\usr\bin\bash.exe -lc "pacman -S --noconfirm python-pip libtool autoconf automake-wrapper" - C:\msys64\usr\bin\bash.exe -lc "python3 -m pip install pypiwin32" - C:\msys64\usr\bin\bash.exe -lc "rm -f `which link`" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovs_dir%' && ./boot.sh" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovs_dir%' && ./configure CC=./build-aux/cccl LD='`which link`' LIBS='-lws2_32 -lShlwapi -liphlpapi -lwbemuuid -lole32 -loleaut32' --prefix='C:/openvswitch/usr' --localstatedir='C:/openvswitch/var' --sysconfdir='C:/openvswitch/etc' --with-pthread='%_p4w_dir%' --disable-ssl" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovs_dir%' && make -j" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovs_dir%' && make windows_installer" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovn_dir%' && ./boot.sh" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovn_dir%' && ./configure CC=./build-aux/cccl LD='`which link`' LIBS='-lws2_32 -lShlwapi -liphlpapi -lwbemuuid -lole32 -loleaut32' --prefix='C:/ovn/usr' --localstatedir='C:/ovn/var' --sysconfdir='C:/ovn/etc' --with-pthread='%_p4w_dir%' --disable-ssl --with-ovs-source='../ovs'" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovn_dir%' && make -j" - C:\msys64\usr\bin\bash.exe -lc "cd '%_ovn_dir%' && make install" - - - name: Upload OVS - uses: actions/upload-artifact@v4 - with: - name: ovs-win64 - path: ovs\windows\ovs-windows-installer\bin\x64\Release\OpenvSwitch.msi - - - name: Upload OVN - uses: actions/upload-artifact@v4 - with: - name: ovn-win64 - path: C:\ovn - - build-kube-ovn: - name: Build Kube-OVN - needs: filter - runs-on: windows-2019 - if: github.event_name == 'release' || github.event_name == 'workflow_dispatch' || needs.filter.outputs.build-kube-ovn == 'true' - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: | - $goVersion = (go env GOVERSION) - $entry = [string]::Format("GO_FULL_VER={0}", $goVersion) - Add-Content -Path $env:GITHUB_ENV -Value $entry - - - name: Go Cache - uses: actions/cache@v4 - with: - path: | - ~\AppData\Local\go-build - ~\go\pkg\mod - key: ${{ runner.os }}-${{ env.GO_FULL_VER }}-${{ hashFiles('**/go.sum') }} - restore-keys: ${{ runner.os }}-${{ env.GO_FULL_VER }}- - - - name: Install gosec - run: | - Invoke-WebRequest https://github.com/securego/gosec/releases/download/v${{ env.GOSEC_VERSION }}/gosec_${{ env.GOSEC_VERSION }}_windows_amd64.tar.gz -OutFile gosec.tar.gz - mkdir gosec - tar -xzvf gosec.tar.gz -C gosec - Copy-Item gosec/gosec.exe -Destination C:\Windows\system32 - - - name: Build - run: | - go mod tidy - make lint-windows - make build-go-windows - - - name: Upload Binaries - uses: actions/upload-artifact@v4 - with: - name: kube-ovn-bin - path: | - dist/windows/kube-ovn.exe - dist/windows/kube-ovn-daemon.exe - - package: - name: Pack Windows Files - needs: - - build-ovs-and-ovn - - build-kube-ovn - runs-on: windows-2019 - steps: - - uses: actions/checkout@v4 - - - name: Download Kube-OVN binaries - uses: actions/download-artifact@v4 - with: - name: kube-ovn-bin - path: dist/windows - - - name: Download OVS - uses: actions/download-artifact@v4 - with: - name: ovs-win64 - path: dist/windows - - - name: Download OVN - uses: actions/download-artifact@v4 - with: - name: ovn-win64 - path: dist/windows/ovn - - - name: Pack files - working-directory: dist/windows - run: | - # ovn - New-Item -ItemType directory -Path ovn/etc - Copy-Item ovn-controller.conf -Destination ovn/etc - Copy-Item start-ovn-controller.ps1 -Destination ovn - # kube-ovn - New-Item -ItemType directory -Path "kube-ovn/etc", "kube-ovn/bin" - Copy-Item 01-kube-ovn.conflist -Destination kube-ovn - Copy-Item kube-ovn.conf -Destination kube-ovn/etc - Copy-Item start-kube-ovn.ps1 -Destination kube-ovn/bin - Copy-Item kube-ovn.exe -Destination kube-ovn/bin - Copy-Item kube-ovn-daemon.exe -Destination kube-ovn/bin - - - name: Upload package - uses: actions/upload-artifact@v4 - with: - name: kube-ovn-win64 - path: | - dist/windows/OpenvSwitch.msi - dist/windows/ovn - dist/windows/kube-ovn - dist/windows/install.ps1 diff --git a/.github/workflows/build-x86-image.yaml b/.github/workflows/build-x86-image.yaml index 836f8703273..7cb058f25c1 100644 --- a/.github/workflows/build-x86-image.yaml +++ b/.github/workflows/build-x86-image.yaml @@ -28,368 +28,29 @@ env: SUBMARINER_VERSION: '0.17.1' jobs: - build-kube-ovn-base: - name: Build kube-ovn-base - runs-on: ubuntu-22.04 - outputs: - build-base: ${{ steps.check.outputs.build-base }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - id: check - run: | - if [ ${{ github.event_name }} != 'pull_request' ]; then - exit - fi - if git diff --name-only HEAD^ HEAD | grep -q ^dist/images/Dockerfile.base$; then - echo build-base=1 >> "$GITHUB_OUTPUT" - fi - - - uses: jlumbroso/free-disk-space@v1.3.1 - if: steps.check.outputs.build-base == 1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: docker/setup-buildx-action@v3 - if: steps.check.outputs.build-base == 1 - - - name: Build kube-ovn-base image - id: build - if: steps.check.outputs.build-base == 1 - run: | - make base-amd64 - make base-tar-amd64 - - - name: Upload base images to artifact - if: steps.check.outputs.build-base == 1 - uses: actions/upload-artifact@v4 - with: - name: kube-ovn-base - path: image-amd64.tar - - build-kube-ovn-dpdk-base: - name: Build kube-ovn-dpdk-base - runs-on: ubuntu-22.04 - outputs: - build-dpdk-base: ${{ steps.check.outputs.build-dpdk-base }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - id: check - run: | - if [ ${{ github.event_name }} != 'pull_request' ]; then - exit - fi - if git diff --name-only HEAD^ HEAD | grep -q ^dist/images/Dockerfile.base-dpdk$; then - echo build-dpdk-base=1 >> "$GITHUB_OUTPUT" - fi - - - uses: jlumbroso/free-disk-space@v1.3.1 - if: steps.check.outputs.build-dpdk-base == 1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: docker/setup-buildx-action@v3 - if: steps.check.outputs.build-dpdk-base == 1 - - - name: Build kube-ovn-dpdk-base image - id: build - if: steps.check.outputs.build-dpdk-base == 1 - run: | - make base-amd64-dpdk - make base-tar-amd64-dpdk - - - name: Upload dpdk base images to artifact - if: steps.check.outputs.build-dpdk-base == 1 - uses: actions/upload-artifact@v4 - with: - name: kube-ovn-dpdk-base - path: image-amd64-dpdk.tar - - build-kube-ovn: - name: Build kube-ovn - runs-on: ubuntu-22.04 - needs: - - build-kube-ovn-base - - build-kube-ovn-dpdk-base - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v3 - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-${{ env.GO_FULL_VER }}-x86-${{ hashFiles('**/go.sum') }} - restore-keys: ${{ runner.os }}-${{ env.GO_FULL_VER }}-x86- - - - name: Unit test - run: | - go install -mod=mod github.com/onsi/ginkgo/v2/ginkgo - make ut - - - name: Install gosec - run: | - tmp=$(mktemp -d) - archive="gosec_${{ env.GOSEC_VERSION }}_$(go env GOHOSTOS)_$(go env GOHOSTARCH).tar.gz" - wget -q -O "$tmp/$archive" https://github.com/securego/gosec/releases/download/v${{ env.GOSEC_VERSION }}/$archive - tar --no-same-owner -C "$tmp" -xzf "$tmp/$archive" - install "$tmp/gosec" /usr/local/bin - rm -rf $tmp - - - name: Download base images - if: needs.build-kube-ovn-base.outputs.build-base == 1 - uses: actions/download-artifact@v4 - with: - name: kube-ovn-base - - - name: Load base images - if: needs.build-kube-ovn-base.outputs.build-base == 1 - run: docker load --input image-amd64.tar - - - name: Download dpdk base images - if: needs.build-kube-ovn-dpdk-base.outputs.build-dpdk-base == 1 - uses: actions/download-artifact@v4 - with: - name: kube-ovn-dpdk-base - - - name: Load dpdk base images - if: needs.build-kube-ovn-dpdk-base.outputs.build-dpdk-base == 1 - run: docker load --input image-amd64-dpdk.tar - - - name: Build - run: | - go mod tidy - git diff --exit-code - make lint - if [ ${{ needs.build-kube-ovn-base.outputs.build-base || 0 }} = 1 ]; then - TAG=$(cat VERSION) - docker tag kubeovn/kube-ovn-base:$TAG-amd64 kubeovn/kube-ovn-base:$TAG - docker tag kubeovn/kube-ovn-base:$TAG-debug-amd64 kubeovn/kube-ovn-base:$TAG-debug - make build-kube-ovn - else - make image-kube-ovn - fi - make tar-kube-ovn - - - name: Build dpdk - run: | - if [ ${{ needs.build-kube-ovn-dpdk-base.outputs.build-dpdk-base || 0 }} = 1 ]; then - TAG=$(cat VERSION) - docker tag kubeovn/kube-ovn-base:$TAG-amd64-dpdk kubeovn/kube-ovn-base:$TAG-dpdk - make build-kube-ovn-dpdk - else - make image-kube-ovn-dpdk - fi - make tar-kube-ovn-dpdk - - - name: Upload images to artifact - uses: actions/upload-artifact@v4 - with: - name: kube-ovn - path: kube-ovn.tar - - - name: Upload dpdk images to artifact - uses: actions/upload-artifact@v4 - if: github.event_name != 'pull_request' - with: - name: kube-ovn-dpdk - path: kube-ovn-dpdk.tar - - build-vpc-nat-gateway: - name: Build vpc-nat-gateway - runs-on: ubuntu-22.04 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Build - run: | - make image-vpc-nat-gateway - make tar-vpc-nat-gateway - - - name: Upload image to artifact - uses: actions/upload-artifact@v4 - with: - name: vpc-nat-gateway - path: vpc-nat-gateway.tar - - build-e2e-binaries: - name: Build E2E Binaries - runs-on: ubuntu-22.04 - timeout-minutes: 15 - steps: - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Lookup Go cache - id: lookup-go-cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - lookup-only: true - - - uses: jlumbroso/free-disk-space@v1.3.1 - if: steps.lookup-go-cache.outputs.cache-hit != 'true' - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - name: Go cache - if: steps.lookup-go-cache.outputs.cache-hit != 'true' - uses: actions/cache@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install ginkgo - if: steps.lookup-go-cache.outputs.cache-hit != 'true' - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - run: make e2e-build - if: steps.lookup-go-cache.outputs.cache-hit != 'true' - working-directory: ${{ env.E2E_DIR }} - - netpol-path-filter: - name: Network Policy Path Filter - if: github.event_name != 'pull_request' - runs-on: ubuntu-22.04 - outputs: - test-netpol: ${{ steps.filter.outputs.kube-ovn-controller }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: Generate path filter - run: | - filter=".github/path-filters.yaml" - cat > $filter <> "$GITHUB_ENV" fi - - name: Remove DNS search domain - run: | - sudo sed -i '/^search/d' /etc/resolv.conf - sudo systemctl restart docker - - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION || '' }} @@ -457,16 +113,16 @@ jobs: working-directory: ${{ env.E2E_DIR }} run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn + # - name: Download image + # uses: actions/download-artifact@v4 + # with: + # name: kube-ovn - - name: Load image - run: docker load --input kube-ovn.tar + - name: Pull image + run: docker pull kubeovn/kube-ovn:`cat VERSION` - - name: Export debug image tag - run: echo "DEBUG_TAG='$(cat VERSION)-debug'" >> "$GITHUB_ENV" + # - name: Export debug image tag + # run: echo "DEBUG_TAG='$(cat VERSION)-debug'" >> "$GITHUB_ENV" - name: Create kind cluster run: | @@ -476,9 +132,9 @@ jobs: sudo chown -R $(id -un). ~/.kube/ - name: Install Kube-OVN - env: - VERSION: ${{ env.DEBUG_TAG }} - DEBUG_WRAPPER: valgrind + # env: + # VERSION: ${{ env.DEBUG_TAG }} + # DEBUG_WRAPPER: valgrind run: make kind-install-${{ matrix.mode }}-${{ matrix.ip-family }} - name: Run E2E @@ -487,1916 +143,6 @@ jobs: E2E_BRANCH: ${{ github.base_ref || github.ref_name }} E2E_IP_FAMILY: ${{ matrix.ip-family }} E2E_NETWORK_MODE: ${{ matrix.mode }} - run: make k8s-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz k8s-conformance-e2e-${{ matrix.ip-family }}-${{ matrix.mode }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: k8s-conformance-e2e-${{ matrix.ip-family }}-${{ matrix.mode }}-ko-log - path: k8s-conformance-e2e-${{ matrix.ip-family }}-${{ matrix.mode }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Check valgrind result - run: | - kubectl -n kube-system rollout restart ds ovs-ovn - kubectl -n kube-system rollout status ds ovs-ovn - sleep 10 - kubectl -n kube-system rollout restart deploy ovn-central - kubectl -n kube-system rollout status deploy ovn-central - while true; do - if [ $(kubectl -n kube-system get pod -l app=ovs -o name | wc -l) -eq $(kubectl get node -o name | wc -l) ]; then - break - fi - sleep 1 - done - kubectl ko log ovn - kubectl ko log ovs - - for daemon in ovsdb-nb ovsdb-sb ovn-northd ovn-controller ovsdb-server ovs-vswitchd; do - echo "Checking if valgrind log file for $daemon exists..." - find kubectl-ko-log -type f -name "$daemon.valgrind.log.[[:digit:]]*" -exec false {} + && exit 1 - done - - find kubectl-ko-log -type f -name '*.valgrind.log.*' | while read f; do - if grep -qw 'definitely lost' "$f"; then - echo "Memory leak detected in $(basename $f | awk -F. '{print $1}')." - echo $f - cat "$f" - exit 1 - fi; - done - - k8s-netpol-e2e: - name: Kubernetes Network Policy E2E - if: | - always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && - (needs.netpol-path-filter.outputs.test-netpol == 1 || contains(github.event.pull_request.labels.*.name, 'network policy')) - needs: - - build-kube-ovn - - build-e2e-binaries - - netpol-path-filter - runs-on: ubuntu-22.04 - timeout-minutes: 90 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - - ipv6 - - dual - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - name: Remove DNS search domain run: | - sudo sed -i '/^search/d' /etc/resolv.conf - sudo systemctl restart docker + make kube-ovn-conformance-e2e - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Export debug image tag - run: echo "DEBUG_TAG='$(cat VERSION)-debug'" >> "$GITHUB_ENV" - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - VERSION: ${{ env.DEBUG_TAG }} - DEBUG_WRAPPER: valgrind - run: make kind-install-${{ matrix.ip-family }} - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - run: make k8s-netpol-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz k8s-netpol-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: k8s-netpol-e2e-${{ matrix.ip-family }}-ko-log - path: k8s-netpol-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Check valgrind result - run: | - kubectl -n kube-system rollout restart ds ovs-ovn - kubectl -n kube-system rollout status ds ovs-ovn - sleep 10 - kubectl -n kube-system rollout restart deploy ovn-central - kubectl -n kube-system rollout status deploy ovn-central - while true; do - if [ $(kubectl -n kube-system get pod -l app=ovs -o name | wc -l) -eq $(kubectl get node -o name | wc -l) ]; then - break - fi - sleep 1 - done - kubectl ko log ovn - kubectl ko log ovs - - for daemon in ovsdb-nb ovsdb-sb ovn-northd ovn-controller ovsdb-server ovs-vswitchd; do - echo "Checking if valgrind log file for $daemon exists..." - find kubectl-ko-log -type f -name "$daemon.valgrind.log.[[:digit:]]*" -exec false {} + && exit 1 - done - - find kubectl-ko-log -type f -name '*.valgrind.log.*' | while read f; do - if grep -qw 'definitely lost' "$f"; then - echo "Memory leak detected in $(basename $f | awk -F. '{print $1}')." - echo $f - cat "$f" - exit 1 - fi; - done - - cyclonus-netpol-e2e: - name: Cyclonus Network Policy E2E - if: | - always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && - (needs.netpol-path-filter.outputs.test-netpol == 1 || contains(github.event.pull_request.labels.*.name, 'network policy')) - needs: - - build-kube-ovn - - netpol-path-filter - runs-on: ubuntu-22.04 - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - - ipv6 - - dual - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Export debug image tag - run: echo "DEBUG_TAG='$(cat VERSION)-debug'" >> "$GITHUB_ENV" - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - VERSION: ${{ env.DEBUG_TAG }} - DEBUG_WRAPPER: valgrind - run: make kind-install-${{ matrix.ip-family }} - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - run: make cyclonus-netpol-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz cyclonus-netpol-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: cyclonus-netpol-e2e-${{ matrix.ip-family }}-ko-log - path: cyclonus-netpol-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Check valgrind result - run: | - kubectl -n kube-system rollout restart ds ovs-ovn - kubectl -n kube-system rollout status ds ovs-ovn - sleep 10 - kubectl -n kube-system rollout restart deploy ovn-central - kubectl -n kube-system rollout status deploy ovn-central - while true; do - if [ $(kubectl -n kube-system get pod -l app=ovs -o name | wc -l) -eq $(kubectl get node -o name | wc -l) ]; then - break - fi - sleep 1 - done - kubectl ko log ovn - kubectl ko log ovs - - for daemon in ovsdb-nb ovsdb-sb ovn-northd ovn-controller ovsdb-server ovs-vswitchd; do - echo "Checking if valgrind log file for $daemon exists..." - find kubectl-ko-log -type f -name "$daemon.valgrind.log.[[:digit:]]*" -exec false {} + && exit 1 - done - - find kubectl-ko-log -type f -name '*.valgrind.log.*' | while read f; do - if grep -qw 'definitely lost' "$f"; then - echo "Memory leak detected in $(basename $f | awk -F. '{print $1}')." - echo $f - cat "$f" - exit 1 - fi; - done - - kube-ovn-conformance-e2e: - name: Kube-OVN Conformance E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 40 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - - ipv6 - - dual - mode: - - overlay - - underlay - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Export debug image tag - run: echo "DEBUG_TAG='$(cat VERSION)-debug'" >> "$GITHUB_ENV" - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - VERSION: ${{ env.DEBUG_TAG }} - DEBUG_WRAPPER: valgrind - run: make kind-install-${{ matrix.mode }}-${{ matrix.ip-family }} - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - E2E_IP_FAMILY: ${{ matrix.ip-family }} - E2E_NETWORK_MODE: ${{ matrix.mode }} - run: | - make kube-ovn-conformance-e2e - make kind-install-kubevirt - make kube-ovn-kubevirt-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz kube-ovn-conformance-e2e-${{ matrix.mode }}-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: kube-ovn-conformance-e2e-${{ matrix.mode }}-${{ matrix.ip-family }}-ko-log - path: kube-ovn-conformance-e2e-${{ matrix.mode }}-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Check valgrind result - run: | - kubectl -n kube-system rollout restart ds ovs-ovn - kubectl -n kube-system rollout status ds ovs-ovn - sleep 10 - kubectl -n kube-system rollout restart deploy ovn-central - kubectl -n kube-system rollout status deploy ovn-central - while true; do - if [ $(kubectl -n kube-system get pod -l app=ovs -o name | wc -l) -eq $(kubectl get node -o name | wc -l) ]; then - break - fi - sleep 1 - done - kubectl ko log ovn - kubectl ko log ovs - - for daemon in ovsdb-nb ovsdb-sb ovn-northd ovn-controller ovsdb-server ovs-vswitchd; do - echo "Checking if valgrind log file for $daemon exists..." - find kubectl-ko-log -type f -name "$daemon.valgrind.log.[[:digit:]]*" -exec false {} + && exit 1 - done - - find kubectl-ko-log -type f -name '*.valgrind.log.*' | while read f; do - if grep -qw 'definitely lost' "$f"; then - echo "Memory leak detected in $(basename $f | awk -F. '{print $1}')." - echo $f - cat "$f" - exit 1 - fi; - done - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - kube-ovn-ic-conformance-e2e: - name: Kube-OVN IC Conformance E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - - ipv6 - - dual - timeout-minutes: 15 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind clusters - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-ovn-ic-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install-ovn-ic-${{ matrix.ip-family }} - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - E2E_IP_FAMILY: ${{ matrix.ip-family }} - run: make kube-ovn-ic-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - for cluster in `kind get clusters`; do - kubectl config use-context kind-$cluster - make kubectl-ko-log - mv kubectl-ko-log.tar.gz kube-ovn-ic-conformance-e2e-${{ matrix.ip-family }}-$cluster-ko-log.tar.gz - done - tar zcvf kube-ovn-ic-conformance-e2e-${{ matrix.ip-family }}-ko-log.tar.gz \ - `kind get clusters | xargs -I {} echo kube-ovn-ic-conformance-e2e-${{ matrix.ip-family }}-{}-ko-log.tar.gz` - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: kube-ovn-ic-conformance-e2e-${{ matrix.ip-family }}-ko-log - path: kube-ovn-ic-conformance-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - multus-conformance-e2e: - name: Multus Conformance E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 10 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - - ipv6 - - dual - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load images - run: docker load -i kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install-${{ matrix.ip-family }} - - - name: Install Multus - run: make kind-install-multus - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - E2E_IP_FAMILY: ${{ matrix.ip-family }} - run: make kube-ovn-multus-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz multus-conformance-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: multus-conformance-e2e-${{ matrix.ip-family }}-ko-log - path: multus-conformance-e2e-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - chart-test: - name: Chart Installation/Uninstallation Test - needs: build-kube-ovn - runs-on: ubuntu-22.04 - strategy: - fail-fast: false - matrix: - ssl: - - "true" - - "false" - timeout-minutes: 30 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - ENABLE_SSL: "${{ matrix.ssl }}" - run: make kind-install-chart - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - - name: Uninstall Kube-OVN - run: make kind-uninstall-chart - - underlay-logical-gateway-installation-test: - name: Underlay Logical Gateway Installation Test - needs: build-kube-ovn - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-dual - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install-underlay-logical-gateway-dual - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - no-ovn-lb-test: - name: Disable OVN LB Test - needs: build-kube-ovn - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN without LoadBalancer - env: - ENABLE_LB: "false" - run: make kind-install - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - no-np-test: - name: Disable Network Policy Test - needs: build-kube-ovn - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - ENABLE_NP: "false" - run: make kind-install - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - lb-svc-e2e: - name: LB Service E2E - needs: - - build-kube-ovn - - build-vpc-nat-gateway - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Download vpc-nat-gateway image - uses: actions/download-artifact@v4 - with: - name: vpc-nat-gateway - - - name: Load images - run: | - docker load -i kube-ovn.tar - docker load -i vpc-nat-gateway.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Multus and Kube-OVN - run: make kind-install-lb-svc - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - run: make kube-ovn-lb-svc-conformance-e2e - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - webhook-e2e: - name: Webhook E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 10 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load images - run: | - docker load -i kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install-webhook - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - run: make kube-ovn-webhook-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz webhook-e2e-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: webhook-e2e-ko-log - path: webhook-e2e-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - installation-compatibility-test: - name: Installation Compatibility Test - needs: build-kube-ovn - runs-on: ubuntu-22.04 - timeout-minutes: 10 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH k8s_version=v1.23.17 make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz installation-compatibility-test-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: installation-compatibility-test-ko-log - path: installation-compatibility-test-ko-log.tar.gz - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - cilium-chaining-e2e: - name: Cilium Chaining E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - ip-family: - - ipv4 - # - ipv6 - # - dual - mode: - - overlay - - underlay - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - uses: azure/setup-helm@v4.2.0 - with: - version: '${{ env.HELM_VERSION }}' - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - name: Remove DNS search domain - run: | - sudo sed -i '/^search/d' /etc/resolv.conf - sudo systemctl restart docker - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-cilium-chaining-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN with Cilium chaining - run: make kind-install-cilium-chaining-${{ matrix.mode }}-${{ matrix.ip-family }} - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_CILIUM_CHAINING: "true" - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - E2E_IP_FAMILY: ${{ matrix.ip-family }} - E2E_NETWORK_MODE: ${{ matrix.mode }} - run: make k8s-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz cilium-chaining-e2e-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: cilium-chaining-e2e-ko-log - path: cilium-chaining-e2e-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - kube-ovn-ha-e2e: - name: Kube-OVN HA E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 15 - strategy: - fail-fast: false - matrix: - ssl: - - "true" - - "false" - bind-local: - - "true" - - "false" - ip-family: - - ipv4 - - ipv6 - - dual - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-ha-${{ matrix.ip-family }} - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - env: - NET_STACK: "${{ matrix.ip-family }}" - ENABLE_SSL: "${{ matrix.ssl }}" - ENABLE_BIND_LOCAL_IP: "${{ matrix.bind-local }}" - run: make kind-install-chart - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - E2E_IP_FAMILY: ${{ matrix.ip-family }} - run: | - make kube-ovn-security-e2e - make kube-ovn-ha-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz kube-ovn-ha-e2e-${{ matrix.ssl }}-${{ matrix.bind-local }}-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: kube-ovn-ha-e2e-${{ matrix.ssl }}-${{ matrix.bind-local }}-${{ matrix.ip-family }}-ko-log - path: kube-ovn-ha-e2e-${{ matrix.ssl }}-${{ matrix.bind-local }}-${{ matrix.ip-family }}-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - kube-ovn-submariner-conformance-e2e: - name: Kube-OVN Submariner Conformance E2E - needs: - - build-kube-ovn - runs-on: ubuntu-22.04 - timeout-minutes: 60 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install submariner subctl - env: - VERSION: v${{ env.SUBMARINER_VERSION }} - DESTDIR: /usr/local/bin - run: curl -Ls https://get.submariner.io | bash - - - name: Download image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load image - run: docker load --input kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init-ovn-submariner - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install-ovn-submariner - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - run: make kube-ovn-submariner-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz kube-ovn-submariner-conformance-e2e-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: kube-ovn-submariner-conformance-e2e-ko-log - path: kube-ovn-submariner-conformance-e2e-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - - name: Cleanup - run: sh -x dist/images/cleanup.sh - - iptables-vpc-nat-gw-conformance-e2e: - name: Iptables VPC NAT Gateway E2E - needs: - - build-kube-ovn - - build-vpc-nat-gateway - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 15 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Download vpc-nat-gateway image - uses: actions/download-artifact@v4 - with: - name: vpc-nat-gateway - - - name: Load images - run: | - docker load -i kube-ovn.tar - docker load -i vpc-nat-gateway.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN with VPC NAT gateway enabled - run: make kind-install-vpc-nat-gw - - - name: Run E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - run: make iptables-vpc-nat-gw-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz iptables-vpc-nat-gw-conformance-e2e-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: iptables-vpc-nat-gw-conformance-e2e-ko-log - path: iptables-vpc-nat-gw-conformance-e2e-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: make check-kube-ovn-pod-restarts - - ovn-vpc-nat-gw-conformance-e2e: - name: OVN VPC NAT Gateway E2E - needs: - - build-kube-ovn - - build-e2e-binaries - runs-on: ubuntu-22.04 - timeout-minutes: 15 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Create the default branch directory - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - run: mkdir -p test/e2e/source - - - name: Check out the default branch - if: (github.base_ref || github.ref_name) != github.event.repository.default_branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - fetch-depth: 1 - path: test/e2e/source - - - name: Export E2E directory - run: | - if [ '${{ github.base_ref || github.ref_name }}' = '${{ github.event.repository.default_branch }}' ]; then - echo "E2E_DIR=." >> "$GITHUB_ENV" - else - echo "E2E_DIR=test/e2e/source" >> "$GITHUB_ENV" - fi - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: ${{ env.E2E_DIR }}/go.mod - check-latest: true - cache: false - - - name: Export Go full version - run: echo "GO_FULL_VER=$(go env GOVERSION)" >> "$GITHUB_ENV" - - - name: Go cache - uses: actions/cache/restore@v4 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86-${{ hashFiles(format('{0}/**/go.sum', env.E2E_DIR)) }} - restore-keys: ${{ runner.os }}-e2e-${{ env.GO_FULL_VER }}-x86- - - - name: Install kind - uses: helm/kind-action@v1.10.0 - with: - version: ${{ env.KIND_VERSION }} - install_only: true - - - name: Install ginkgo - working-directory: ${{ env.E2E_DIR }} - run: go install -v -mod=mod github.com/onsi/ginkgo/v2/ginkgo - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Load images - run: docker load -i kube-ovn.tar - - - name: Create kind cluster - run: | - sudo pip3 install jinjanator - sudo PATH=~/.local/bin:$PATH make kind-init - sudo cp -r /root/.kube/ ~/.kube/ - sudo chown -R $(id -un). ~/.kube/ - - - name: Install Kube-OVN - run: make kind-install - - - name: Run Vip E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - run: make vip-conformance-e2e - - - name: Run Ovn VPC NAT GW E2E - working-directory: ${{ env.E2E_DIR }} - env: - E2E_BRANCH: ${{ github.base_ref || github.ref_name }} - run: make ovn-vpc-nat-gw-conformance-e2e - - - name: kubectl ko log - if: failure() - run: | - make kubectl-ko-log - mv kubectl-ko-log.tar.gz ovn-vpc-nat-gw-conformance-e2e-ko-log.tar.gz - - - name: upload kubectl ko log - uses: actions/upload-artifact@v4 - if: failure() - with: - name: ovn-vpc-nat-gw-conformance-e2e-ko-log - path: ovn-vpc-nat-gw-conformance-e2e-ko-log.tar.gz - - - name: Check kube ovn pod restarts - run: | - make check-kube-ovn-pod-restarts - - push: - name: Push Images - needs: - - k8s-conformance-e2e - - k8s-netpol-e2e - - cyclonus-netpol-e2e - - kube-ovn-conformance-e2e - - kube-ovn-ic-conformance-e2e - - multus-conformance-e2e - - ovn-vpc-nat-gw-conformance-e2e - - iptables-vpc-nat-gw-conformance-e2e - - webhook-e2e - - lb-svc-e2e - - underlay-logical-gateway-installation-test - - chart-test - - installation-compatibility-test - - no-ovn-lb-test - - no-np-test - - cilium-chaining-e2e - - kube-ovn-ha-e2e - - kube-ovn-submariner-conformance-e2e - if: always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') - runs-on: ubuntu-22.04 - steps: - - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: true - dotnet: true - haskell: true - docker-images: false - large-packages: false - tool-cache: false - swap-storage: false - - - uses: actions/checkout@v4 - - - name: Download kube-ovn image - uses: actions/download-artifact@v4 - with: - name: kube-ovn - - - name: Download kube-ovn-dpdk image - uses: actions/download-artifact@v4 - if: github.event_name != 'pull_request' - with: - name: kube-ovn-dpdk - - - name: Download vpc-nat-gateway image - uses: actions/download-artifact@v4 - with: - name: vpc-nat-gateway - - - name: Load image - run: | - docker load --input kube-ovn.tar - docker load --input vpc-nat-gateway.tar - if [ '${{ github.event_name }}' != 'pull_request' ]; then - docker load --input kube-ovn-dpdk.tar - fi - - - name: Security Scan - run: | - sudo apt-get install wget apt-transport-https gnupg lsb-release - wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - - echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list - sudo apt-get update - sudo apt-get install trivy - make scan - - - name: Push - if: github.ref_name == github.event.repository.default_branch || startsWith(github.ref_name, 'release-') - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - COMMIT: ${{ github.sha }} - run: | - cat VERSION - TAG=$(cat VERSION) - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - docker tag kubeovn/kube-ovn:$TAG kubeovn/kube-ovn-dev:$COMMIT-x86 - docker tag kubeovn/kube-ovn:$TAG kubeovn/kube-ovn:$TAG-x86 - docker tag kubeovn/kube-ovn:$TAG-debug kubeovn/kube-ovn:$TAG-debug-x86 - docker tag kubeovn/kube-ovn:$TAG-dpdk kubeovn/kube-ovn:$TAG-dpdk-x86 - docker tag kubeovn/vpc-nat-gateway:$TAG kubeovn/vpc-nat-gateway-dev:$COMMIT-x86 - docker tag kubeovn/vpc-nat-gateway:$TAG kubeovn/vpc-nat-gateway:$TAG-x86 - docker images - docker push kubeovn/kube-ovn:$TAG-x86 - docker push kubeovn/kube-ovn-dev:$COMMIT-x86 - docker push kubeovn/kube-ovn:$TAG-debug-x86 - docker push kubeovn/kube-ovn:$TAG-dpdk-x86 - docker push kubeovn/vpc-nat-gateway:$TAG-x86 - docker push kubeovn/vpc-nat-gateway-dev:$COMMIT-x86 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index fc5d7432e04..00000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,81 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -name: "CodeQL" - -on: - push: - branches: [master] - pull_request: - # The branches below must be a subset of the branches above - branches: [master] - schedule: - - cron: '0 17 * * 2' - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -env: - GO_VERSION: '' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-22.04 - - strategy: - fail-fast: false - matrix: - # Override automatic language detection by changing the below list - # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] - language: ['go'] - # Learn more... - # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request, then we can checkout the head. - fetch-depth: 2 - - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - # - name: Autobuild - # uses: github/codeql-action/autobuild@v2 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - - name: Build - run: | - make build-go - make build-go-windows - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml deleted file mode 100644 index 6a01606c53f..00000000000 --- a/.github/workflows/lint.yaml +++ /dev/null @@ -1,43 +0,0 @@ -name: golangci-lint -on: - push: - tags: - - v* - branches: - - master - - main - pull_request: - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -env: - GO_VERSION: '' - -jobs: - golangci: - name: lint - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION || '' }} - go-version-file: go.mod - check-latest: true - cache: false - - - name: golangci-lint - uses: golangci/golangci-lint-action@v6 - with: - # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. - version: latest - - # Optional: working directory, useful for monorepos - # working-directory: somedir - - # Optional: golangci-lint command line arguments. - args: --timeout 20m --verbose - # Optional: show only new issues if it's a pull request. The default value is `false`. - # only-new-issues: true diff --git a/test/e2e/kube-ovn/kubectl-ko/kubectl-ko.go b/test/e2e/kube-ovn/kubectl-ko/kubectl-ko.go index 138d2037dc8..45bdcad23d7 100644 --- a/test/e2e/kube-ovn/kubectl-ko/kubectl-ko.go +++ b/test/e2e/kube-ovn/kubectl-ko/kubectl-ko.go @@ -43,6 +43,10 @@ var _ = framework.Describe("[group:kubectl-ko]", func() { k8sframework.TestContext.KubeConfig = "" }) ginkgo.AfterEach(func() { + if ginkgo.CurrentSpecReport().Failed() { + execOrDie("get pod -A -o wide") + } + k8sframework.TestContext.KubeConfig = kubectlConfig ginkgo.By("Deleting pod " + podName)