From 62c7efc4db03e490c2dccbde72924160355d1f59 Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Thu, 10 Oct 2024 14:32:27 +0200 Subject: [PATCH] feat(ci): split integration tests execution by category Signed-off-by: Chris Laprun --- .github/workflows/build.yml | 46 ++++++++++++++ .../fabric8-next-version-schedule.yml | 42 +------------ .github/workflows/integration-tests.yml | 20 ++++-- .github/workflows/pr.yml | 38 +----------- .../WorkflowReconcileExecutorTest.java | 7 ++- pom.xml | 62 ++++++++++++++++++- 6 files changed, 133 insertions(+), 82 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..9254853be3 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,46 @@ +name: Build + +env: + MAVEN_ARGS: -V -ntp -e + +on: + workflow_call: + +jobs: + integration_tests: + strategy: + matrix: + java: [ 17, 21 ] + kubernetes: [ 'v1.28.14', 'v1.29.9','1.30.5', '1.31.1' ] + it-category: [ baseapi, dependent, workflow ] + uses: ./.github/workflows/integration-tests.yml + with: + java-version: ${{ matrix.java }} + kube-version: ${{ matrix.kubernetes }} + it-category: ${{ matrix.it-category }} + + httpclient-tests: + strategy: + matrix: + httpclient: [ 'vertx', 'jdk', 'jetty' ] + uses: ./.github/workflows/integration-tests.yml + with: + java-version: 17 + kube-version: 'v1.30.5' + http-client: ${{ matrix.httpclient }} + experimental: true + + special_integration_tests: + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 17, 21 ] + steps: + - uses: actions/checkout@v4 + - name: Set up Java and Maven + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{ matrix.java }} + - name: Run Special Integration Tests + run: ./mvnw ${MAVEN_ARGS} -B package -P minimal-watch-timeout-dependent-it --file pom.xml \ No newline at end of file diff --git a/.github/workflows/fabric8-next-version-schedule.yml b/.github/workflows/fabric8-next-version-schedule.yml index b0bc57ea75..64d2042135 100644 --- a/.github/workflows/fabric8-next-version-schedule.yml +++ b/.github/workflows/fabric8-next-version-schedule.yml @@ -23,46 +23,8 @@ jobs: with: distribution: temurin java-version: 17 - cache: 'maven' - name: Run unit tests run: ./mvnw ${MAVEN_ARGS} clean install --file pom.xml - integration_tests: - strategy: - matrix: - java: [ 11, 17 ] - kubernetes: ['v1.28.12', 'v1.29.7','1.30.3', '1.31.0'] - uses: ./.github/workflows/integration-tests.yml - with: - java-version: ${{ matrix.java }} - kube-version: ${{ matrix.kubernetes }} - - httpclient-tests: - strategy: - matrix: - httpclient: [ 'vertx', 'jdk', 'jetty' ] - uses: ./.github/workflows/integration-tests.yml - with: - java-version: 17 - kube-version: 'v1.29.1' - http-client: ${{ matrix.httpclient }} - experimental: true - checkout-ref: 'fabric8-next-version' - - special_integration_tests: - runs-on: ubuntu-latest - strategy: - matrix: - java: [ 11, 17 ] - steps: - - uses: actions/checkout@v4 - with: - ref: 'fabric8-next-version' - - name: Set up Java and Maven - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java }} - cache: 'maven' - - name: Run Special Integration Tests - run: ./mvnw ${MAVEN_ARGS} -B package -P minimal-watch-timeout-dependent-it --file pom.xml \ No newline at end of file + build: + uses: ./.github/workflows/build.yml \ No newline at end of file diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cb68af25d2..b289aa7865 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -21,6 +21,10 @@ on: type: string required: false default: '' + it-category: + type: string + required: false + default: '' jobs: integration_tests: @@ -42,9 +46,17 @@ jobs: - name: Set up Minikube uses: manusa/actions-setup-minikube@v2.12.0 with: - minikube version: v1.33.0 - kubernetes version: ${{ inputs.kube-version }} + minikube version: 'v1.33.0' + kubernetes version: '${{ inputs.kube-version }}' driver: 'docker' github token: ${{ secrets.GITHUB_TOKEN }} - - name: Run integration tests - run: ./mvnw ${MAVEN_ARGS} -B package -P no-unit-tests -Dfabric8-httpclient-impl.name=${{inputs.http-client}} --file pom.xml \ No newline at end of file + - 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 + it_profile="integration-tests" + else + it_profile="integration-tests-${{inputs.it-category}}" + fi + echo "Using profile: ${it_profile}" + ./mvnw ${MAVEN_ARGS} -B install -DskipTests --file pom.xml + ./mvnw ${MAVEN_ARGS} -B package -P${it_profile} -Dfabric8-httpclient-impl.name=${{inputs.http-client}} --file pom.xml \ No newline at end of file diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 471cea503e..1a24b9a2fc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -30,39 +30,5 @@ jobs: - name: Run unit tests run: ./mvnw ${MAVEN_ARGS} clean install --file pom.xml - integration_tests: - strategy: - matrix: - java: [ 17, 21 ] - kubernetes: [ 'v1.28.12', 'v1.29.7','1.30.3', '1.31.0' ] - uses: ./.github/workflows/integration-tests.yml - with: - java-version: ${{ matrix.java }} - kube-version: ${{ matrix.kubernetes }} - - httpclient-tests: - strategy: - matrix: - httpclient: [ 'vertx', 'jdk', 'jetty' ] - uses: ./.github/workflows/integration-tests.yml - with: - java-version: 17 - kube-version: 'v1.29.1' - http-client: ${{ matrix.httpclient }} - experimental: true - - special_integration_tests: - runs-on: ubuntu-latest - strategy: - matrix: - java: [ 17, 21 ] - steps: - - uses: actions/checkout@v4 - - name: Set up Java and Maven - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java }} - cache: 'maven' - - name: Run Special Integration Tests - run: ./mvnw ${MAVEN_ARGS} -B package -P minimal-watch-timeout-dependent-it --file pom.xml \ No newline at end of file + build: + uses: ./.github/workflows/build.yml \ No newline at end of file diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java index f399655041..c843a1bade 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java @@ -6,6 +6,9 @@ import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.HasMetadata; @@ -20,6 +23,7 @@ import static org.mockito.Mockito.*; class WorkflowReconcileExecutorTest extends AbstractWorkflowExecutorTest { + private static final Logger log = LoggerFactory.getLogger(WorkflowReconcileExecutorTest.class); @SuppressWarnings("unchecked") Context mockContext = mock(Context.class); @@ -30,7 +34,8 @@ class WorkflowReconcileExecutorTest extends AbstractWorkflowExecutorTest { @BeforeEach @SuppressWarnings("unchecked") - void setup() { + void setup(TestInfo testInfo) { + log.debug("==> Starting test {}", testInfo.getDisplayName()); when(mockContext.getWorkflowExecutorService()).thenReturn(executorService); when(mockContext.eventSourceRetriever()).thenReturn(mock(EventSourceRetriever.class)); } diff --git a/pom.xml b/pom.xml index a89059e155..886a3326a9 100644 --- a/pom.xml +++ b/pom.xml @@ -367,7 +367,7 @@ - no-unit-tests + integration-tests @@ -386,6 +386,66 @@ + + integration-tests-baseapi + + + + org.apache.maven.plugins + maven-surefire-plugin + + + io/javaoperatorsdk/operator/baseapi/**/*IT.java + + + **/*Test.java + **/*E2E.java + + + + + + + + integration-tests-dependent + + + + org.apache.maven.plugins + maven-surefire-plugin + + + io/javaoperatorsdk/operator/dependent/**/*IT.java + + + **/*Test.java + **/*E2E.java + + + + + + + + integration-tests-workflow + + + + org.apache.maven.plugins + maven-surefire-plugin + + + io/javaoperatorsdk/operator/workflow/**/*IT.java + + + **/*Test.java + **/*E2E.java + + + + + + minimal-watch-timeout-dependent-it