From 3742efd3ebd0760a350f2a96d4a6bce6c0aaf715 Mon Sep 17 00:00:00 2001 From: xstefank Date: Wed, 19 Feb 2025 12:57:50 +0100 Subject: [PATCH] refactor: CI only pulls each minikube once for each kubernetes version Signed-off-by: xstefank --- .github/workflows/build.yml | 54 ++++++++++++++++++++++--- .github/workflows/integration-tests.yml | 21 ++++++---- .github/workflows/pr.yml | 8 +++- 3 files changed, 70 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1e813a075..e99e15bc2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,39 +1,73 @@ -name: Build +name: Build with Kubernetes env: MAVEN_ARGS: -V -ntp -e on: workflow_call: + inputs: + kube-version: + type: string + required: true jobs: + set_up_kubernetes: + name: Set up Kubernetes ${{ inputs.kube-version }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Minikube + uses: manusa/actions-setup-minikube@v2.13.1 + with: + minikube version: 'v1.34.0' + kubernetes version: '${{ inputs.kube-version }}' + driver: 'docker' + github token: ${{ secrets.GITHUB_TOKEN }} + + - name: Save minikube directory + id: minikube + run: | + echo "minikube-dir=$MINIKUBE_HOME" >> $GITHUB_OUTPUT + + - name: Upload minikube + uses: actions/upload-artifact@v4 + with: + name: minikube-${{ inputs.kube-version }} + path: ${{ steps.minikube.outputs.minikube-dir }} + include-hidden-files: true + integration_tests: + name: "Integration tests (${{ inputs.kube-version }}, ${{ matrix.java }}, ${{ matrix.it-category }})" + needs: set_up_kubernetes strategy: matrix: java: [ 17, 21 ] - kubernetes: [ 'v1.29.12','1.30.8', '1.31.4', '1.32.0' ] it-category: [ 'baseapi', 'dependent', 'workflow' ] uses: ./.github/workflows/integration-tests.yml with: + kube-version: ${{ inputs.kube-version }} java-version: ${{ matrix.java }} - kube-version: ${{ matrix.kubernetes }} it-category: ${{ matrix.it-category }} http_client_tests: + name: "Integration tests (${{ inputs.kube-version }}, ${{ matrix.java }}, ${{ matrix.it-category }}, ${{ matrix.httpclient }})" + needs: set_up_kubernetes strategy: matrix: java: [ 17, 21 ] - kubernetes: [ 'v1.29.12','1.30.8', '1.31.4', '1.32.0' ] it-category: [ 'baseapi' ] httpclient: [ 'vertx', 'jdk', 'jetty' ] uses: ./.github/workflows/integration-tests.yml with: + kube-version: ${{ inputs.kube-version }} java-version: ${{ matrix.java }} - kube-version: ${{ matrix.kubernetes }} it-category: ${{ matrix.it-category }} http-client: ${{ matrix.httpclient }} special_integration_tests: + name: "Special integration tests (${{ matrix.java }})" + needs: set_up_kubernetes runs-on: ubuntu-latest strategy: matrix: @@ -47,3 +81,13 @@ jobs: java-version: ${{ matrix.java }} - name: Run Special Integration Tests run: ./mvnw ${MAVEN_ARGS} -B package -P minimal-watch-timeout-dependent-it --file pom.xml + + delete_kubernetes: + needs: [ integration_tests, http_client_tests, special_integration_tests ] + if: always() + name: Delete Kubernetes ${{ inputs.kube-version }} artifact + runs-on: ubuntu-latest + steps: + - uses: geekyeggo/delete-artifact@v5 + with: + name: minikube-${{ inputs.kube-version }} diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index a40c9c8b9a..63ac51f13b 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -28,6 +28,8 @@ on: jobs: integration_tests: + name: "Integration tests (${{ inputs.kube-version }}, ${{ inputs.java-version }}, ${{ inputs.it-category }}, + ${{ inputs.http-client }}, ${{ inputs.experimental }}, ${{ inputs.checkout-ref }})" runs-on: ubuntu-latest continue-on-error: ${{ inputs.experimental }} timeout-minutes: 40 @@ -43,13 +45,18 @@ jobs: distribution: temurin java-version: ${{ inputs.java-version }} cache: 'maven' - - name: Set up Minikube - uses: manusa/actions-setup-minikube@v2.13.1 + - name: Download minikube artifact for Kubernetes ${{ inputs.kube-version }} + uses: actions/download-artifact@v4 with: - minikube version: 'v1.34.0' - kubernetes version: '${{ inputs.kube-version }}' - driver: 'docker' - github token: ${{ secrets.GITHUB_TOKEN }} + name: minikube-${{inputs.kube-version}} + path: minikube + - name: Start minikube with Kubernetes ${{ inputs.kube-version }} + run: | + # wait for docker + docker version -f '{{.Server.Version}} - {{.Client.Version}}' + export MINIKUBE_HOME=$PWD/minikube + minikube start --driver=docker + kubectl version - name: "${{inputs.it-category}} integration tests (kube: ${{ inputs.kube-version }} / java: ${{ inputs.java-version }} / client: ${{ inputs.http-client }})" run: | if [ -z "${{inputs.it-category}}" ]; then @@ -59,4 +66,4 @@ jobs: fi echo "Using profile: ${it_profile}" ./mvnw ${MAVEN_ARGS} -T1C -B install -DskipTests -Pno-apt --file pom.xml - ./mvnw ${MAVEN_ARGS} -T1C -B package -P${it_profile} -Dfabric8-httpclient-impl.name=${{inputs.http-client}} --file pom.xml \ No newline at end of file + ./mvnw ${MAVEN_ARGS} -T1C -B package -P${it_profile} -Dfabric8-httpclient-impl.name=${{inputs.http-client}} --file pom.xml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index facd6be13a..a9a4835105 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -31,4 +31,10 @@ jobs: run: ./mvnw ${MAVEN_ARGS} clean install -Pno-apt --file pom.xml build: - uses: ./.github/workflows/build.yml \ No newline at end of file + name: Test with Kubernetes ${{ matrix.kubernetes }} + strategy: + matrix: + kubernetes: [ 'v1.29.12','1.30.8', '1.31.4', '1.32.0' ] + uses: ./.github/workflows/build.yml + with: + kube-version: ${{ matrix.kubernetes }} \ No newline at end of file