Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: CI only pulls each minikube once for each kubernetes version #2691

Merged
merged 1 commit into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 49 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -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/[email protected]
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: "JDK: ${{ matrix.java }}, IT category: ${{ 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: "JDK: ${{ matrix.java }}, IT category: ${{ matrix.it-category }}, HTTP client: ${{ 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:
Expand All @@ -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 }}
20 changes: 13 additions & 7 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ on:

jobs:
integration_tests:
name: "Experimental: ${{ inputs.experimental }}, Checkout ref: ${{ inputs.checkout-ref }}"
runs-on: ubuntu-latest
continue-on-error: ${{ inputs.experimental }}
timeout-minutes: 40
Expand All @@ -43,13 +44,18 @@ jobs:
distribution: temurin
java-version: ${{ inputs.java-version }}
cache: 'maven'
- name: Set up Minikube
uses: manusa/actions[email protected]
- 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
Expand All @@ -59,4 +65,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
./mvnw ${MAVEN_ARGS} -T1C -B package -P${it_profile} -Dfabric8-httpclient-impl.name=${{inputs.http-client}} --file pom.xml
8 changes: 7 additions & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,10 @@ jobs:
run: ./mvnw ${MAVEN_ARGS} clean install -Pno-apt --file pom.xml

build:
uses: ./.github/workflows/build.yml
name: Integration tests 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 }}