From c9d6656fe5ea5c16e5adc3daa36d53144c552835 Mon Sep 17 00:00:00 2001 From: delchev Date: Thu, 13 Aug 2026 14:49:00 +0300 Subject: [PATCH] ci(tests): shard the integration-test jobs into api / ui / samples slices The full IT suite runs its 116 classes strictly sequentially, so each DB leg of build.yml/nightly.yml took 2h+ wall clock. Split every leg into three parallel matrix shards selected by JUnit 5 tag expressions: api -Dit.groups='!ui' (57 classes, ~48 min) ui -Dit.groups='ui & !sample & !camel' (34 classes, ~48 min) samples -Dit.groups='sample | camel' (25 classes, ~27 min) The run's wall clock becomes the slowest shard (~50 min) instead of the whole suite. The shards partition the suite - verified via JUnit Platform discovery: 57+34+25 = 116 classes, zero overlaps. New tags: @Tag("sample") on the SampleProjectRepositoryIT base (inherited by all sample-project ITs) and @Tag("camel") on each IT in ui/tests/camel (their PredefinedProjectIT base is shared with non-camel tests, so it cannot carry the tag). Shard timeouts drop from 150 to 90 minutes; failure screenshots are uploaded per shard. Co-Authored-By: Claude Fable 5 --- .github/workflows/build.yml | 44 +++++++++++++++---- .github/workflows/nightly.yml | 38 +++++++++++++--- CLAUDE.md | 3 +- tests/tests-integrations/pom.xml | 4 +- .../ui/tests/camel/CamelAsyncStepIT.java | 2 + .../CamelCronRouteStarterTemplateIT.java | 2 + ...rigibleJavaScriptComponentCronRouteIT.java | 2 + ...rigibleJavaScriptComponentHttpRouteIT.java | 2 + ...DirigibleTwoStepsJSInvokerCronRouteIT.java | 2 + ...DirigibleTwoStepsJSInvokerHttpRouteIT.java | 2 + .../CamelExtractTransformLoadJdbcIT.java | 2 + ...CamelExtractTransformLoadTypescriptIT.java | 2 + .../CamelHttpRouteStarterTemplateIT.java | 2 + .../camel/CamelTransactionsCommitIT.java | 2 + .../camel/CamelTransactionsRollbackIT.java | 2 + .../sample/SampleProjectRepositoryIT.java | 4 ++ 16 files changed, 98 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 206429943e4..963863a4611 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,11 +160,29 @@ jobs: if: runner.os == 'Linux' run: mvn test -P testcontainers + # The full IT suite is split ("sharded") into three disjoint slices selected by JUnit 5 tags, so + # the wall-clock time of a run is the slowest shard (~50 min) instead of the whole suite (~2h+): + # api - every HTTP-level IT (untagged, i.e. everything not tagged "ui") + # ui - the browser-driven ITs except the sample-project and camel families + # samples - the sample-project clone/publish ITs ("sample") + the camel route ITs ("camel") + # The shards partition the suite: api + ui + samples = the complete IT set. A new untagged IT + # lands in "api"; a new UI IT (extends UserInterfaceIntegrationTest) lands in "ui" unless it is + # explicitly tagged "sample" or "camel". integration-tests-h2: runs-on: ubuntu-latest - # A green full IT run takes ~1h30m; a heap-exhausted JVM used to thrash for 4h+ before anyone + strategy: + fail-fast: false + matrix: + shard: + - name: api + groups: "!ui" + - name: ui + groups: "ui & !sample & !camel" + - name: samples + groups: "sample | camel" + # A green shard takes ~50 min; a heap-exhausted JVM used to thrash for 4h+ before anyone # noticed. Cap the job well above the healthy time so hangs fail fast instead of burning runners. - timeout-minutes: 150 + timeout-minutes: 90 steps: - uses: actions/checkout@v4 with: @@ -201,14 +219,14 @@ jobs: run: ttyd --version - name: Integration tests - run: mvn clean install -P integration-tests + run: mvn clean install -P integration-tests -Dit.groups='${{ matrix.shard.groups }}' - name: Generate a random artifact name if: always() id: generate_name run: | TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - echo "ARTIFACT_NAME=selenide-screenshots-${TIMESTAMP}.zip" >> $GITHUB_ENV + echo "ARTIFACT_NAME=selenide-screenshots-h2-${{ matrix.shard.name }}-${TIMESTAMP}.zip" >> $GITHUB_ENV - name: Upload selenide screenshots uses: actions/upload-artifact@v4 @@ -220,8 +238,18 @@ jobs: integration-tests-postgresql: runs-on: ubuntu-latest - # Same rationale as integration-tests-h2: green run ~1h30m, cap runaway JVMs. - timeout-minutes: 150 + # Same sharding + timeout rationale as integration-tests-h2. + strategy: + fail-fast: false + matrix: + shard: + - name: api + groups: "!ui" + - name: ui + groups: "ui & !sample & !camel" + - name: samples + groups: "sample | camel" + timeout-minutes: 90 env: POSTGRES_DB: testdb POSTGRES_USER: testuser @@ -276,7 +304,7 @@ jobs: run: ttyd --version - name: Integration tests - run: mvn clean install -P integration-tests + run: mvn clean install -P integration-tests -Dit.groups='${{ matrix.shard.groups }}' env: DIRIGIBLE_DATASOURCE_DEFAULT_DRIVER: org.postgresql.Driver DIRIGIBLE_DATASOURCE_DEFAULT_URL: jdbc:postgresql://localhost:5432/${{ env.POSTGRES_DB }} @@ -288,7 +316,7 @@ jobs: id: generate_name run: | TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - echo "ARTIFACT_NAME=selenide-screenshots-${TIMESTAMP}.zip" >> $GITHUB_ENV + echo "ARTIFACT_NAME=selenide-screenshots-postgresql-${{ matrix.shard.name }}-${TIMESTAMP}.zip" >> $GITHUB_ENV - name: Upload selenide screenshots uses: actions/upload-artifact@v4 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7e99455661b..a34f8cbdeed 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,9 +1,11 @@ name: Nightly Integration Tests # The full Selenide UI integration suite (everything, incl. the sample-project clone/publish tests) -# on both H2 and PostgreSQL. It is heavy (~1.5h per DB), so it does not run on every PR - PRs run the -# fast "smoke-tests" job (see pull-request.yml). Runs on a nightly schedule and on demand; the same -# full suite also runs on every push to master (see build.yml). +# on both H2 and PostgreSQL. It is heavy (~2h of test time per DB), so it does not run on every PR - +# PRs run the fast "smoke-tests" job (see pull-request.yml). Runs on a nightly schedule and on +# demand; the same full suite also runs on every push to master (see build.yml). Like build.yml, the +# suite is sharded into three tag-selected slices (api / ui / samples) that run in parallel, so the +# wall-clock time is the slowest shard (~50 min), not the whole suite. on: schedule: - cron: '0 2 * * *' @@ -16,6 +18,17 @@ concurrency: jobs: integration-tests-h2: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + shard: + - name: api + groups: "!ui" + - name: ui + groups: "ui & !sample & !camel" + - name: samples + groups: "sample | camel" + timeout-minutes: 90 steps: - uses: actions/checkout@v4 with: @@ -52,14 +65,14 @@ jobs: run: ttyd --version - name: Integration tests - run: mvn clean install -P integration-tests + run: mvn clean install -P integration-tests -Dit.groups='${{ matrix.shard.groups }}' - name: Generate a random artifact name if: always() id: generate_name run: | TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - echo "ARTIFACT_NAME=selenide-screenshots-h2-${TIMESTAMP}.zip" >> $GITHUB_ENV + echo "ARTIFACT_NAME=selenide-screenshots-h2-${{ matrix.shard.name }}-${TIMESTAMP}.zip" >> $GITHUB_ENV - name: Upload selenide screenshots uses: actions/upload-artifact@v4 @@ -71,6 +84,17 @@ jobs: integration-tests-postgresql: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + shard: + - name: api + groups: "!ui" + - name: ui + groups: "ui & !sample & !camel" + - name: samples + groups: "sample | camel" + timeout-minutes: 90 env: POSTGRES_DB: testdb POSTGRES_USER: testuser @@ -125,7 +149,7 @@ jobs: run: ttyd --version - name: Integration tests - run: mvn clean install -P integration-tests + run: mvn clean install -P integration-tests -Dit.groups='${{ matrix.shard.groups }}' env: DIRIGIBLE_DATASOURCE_DEFAULT_DRIVER: org.postgresql.Driver DIRIGIBLE_DATASOURCE_DEFAULT_URL: jdbc:postgresql://localhost:5432/${{ env.POSTGRES_DB }} @@ -137,7 +161,7 @@ jobs: id: generate_name run: | TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - echo "ARTIFACT_NAME=selenide-screenshots-postgresql-${TIMESTAMP}.zip" >> $GITHUB_ENV + echo "ARTIFACT_NAME=selenide-screenshots-postgresql-${{ matrix.shard.name }}-${TIMESTAMP}.zip" >> $GITHUB_ENV - name: Upload selenide screenshots uses: actions/upload-artifact@v4 diff --git a/CLAUDE.md b/CLAUDE.md index d8545f7b459..61506ba8703 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -437,7 +437,7 @@ Treat `modules/commons/commons-config/src/main/java/org/eclipse/dirigible/common - `code-style`: `mvn -T 1C formatter:validate` - `tests` (ubuntu + windows matrix): `mvn clean install -P unit-tests` -- `integration-tests-h2` / `-postgresql`: the **full** Selenide IT suite, `mvn clean install -P integration-tests` with the matching `DIRIGIBLE_DATASOURCE_DEFAULT_*` env vars (MSSQL is no longer a CI leg — removed in #6150) +- `integration-tests-h2` / `-postgresql`: the **full** Selenide IT suite, `mvn clean install -P integration-tests` with the matching `DIRIGIBLE_DATASOURCE_DEFAULT_*` env vars (MSSQL is no longer a CI leg — removed in #6150). Each DB leg is **sharded into three parallel matrix jobs** selected by tag expression — `api` (`!ui`), `ui` (`ui & !sample & !camel`), `samples` (`sample | camel`) — so the run's wall clock is the slowest shard (~50 min), not the whole ~2h suite. The shards partition the suite; keep them disjoint and complete when adding tags. - `build-deploy`: `mvn clean install -P quick-build` then Docker buildx multi-arch image push to `dirigiblelabs/dirigible` ### PR gate vs full suite (smoke / nightly split) @@ -451,5 +451,6 @@ The full Selenide UI suite takes ~1.5h per DB, so it does **not** run on every P - Every browser-driven IT is `@Tag("ui")` - inherited from the `UserInterfaceIntegrationTest` base (and thus by `SampleProjectRepositoryIT` and all sample-project ITs). Do not tag these individually. - HTTP-level ITs (`extends IntegrationTest` directly) carry no tag, so they are always in the smoke set. - To force a specific UI IT to run on every PR, add `@Tag("smoke")` to that class (keep the list small - smoke must stay fast). +- Shard-routing tags: `@Tag("sample")` sits on the `SampleProjectRepositoryIT` base (inherited by every sample-project IT); `@Tag("camel")` sits on each IT in `ui/tests/camel` (their `PredefinedProjectIT` base is shared with non-camel tests, so the base cannot carry it — tag new camel ITs individually). These route classes into the `samples` CI shard; everything else UI stays in the `ui` shard. `codeql.yml`, `release.yml` cover CodeQL and Maven Central release respectively. diff --git a/tests/tests-integrations/pom.xml b/tests/tests-integrations/pom.xml index 1730d817d9d..eec095eb50b 100644 --- a/tests/tests-integrations/pom.xml +++ b/tests/tests-integrations/pom.xml @@ -116,7 +116,9 @@ maven-failsafe-plugin diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelAsyncStepIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelAsyncStepIT.java index 1f9dbdb5069..a5b4ef7270a 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelAsyncStepIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelAsyncStepIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelAsyncStepIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelCronRouteStarterTemplateIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelCronRouteStarterTemplateIT.java index bbd310dcc99..0ac027d26c7 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelCronRouteStarterTemplateIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelCronRouteStarterTemplateIT.java @@ -16,12 +16,14 @@ import org.eclipse.dirigible.tests.framework.logging.LogsAsserter; import org.eclipse.dirigible.tests.framework.util.SynchronizationUtil; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import java.util.concurrent.TimeUnit; import static org.awaitility.Awaitility.await; +@Tag("camel") public class CamelCronRouteStarterTemplateIT extends UserInterfaceIntegrationTest { private static final String TEMPLATE_TITLE = "Cron Route Project Starter"; diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentCronRouteIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentCronRouteIT.java index 8ce5694c1c0..c263154bfd6 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentCronRouteIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentCronRouteIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelDirigibleJavaScriptComponentCronRouteIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentHttpRouteIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentHttpRouteIT.java index bc0b504dfaf..6494ea2e190 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentHttpRouteIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleJavaScriptComponentHttpRouteIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelDirigibleJavaScriptComponentHttpRouteIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerCronRouteIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerCronRouteIT.java index ac522b990bd..9f59054ea84 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerCronRouteIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerCronRouteIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelDirigibleTwoStepsJSInvokerCronRouteIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerHttpRouteIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerHttpRouteIT.java index f5c94131f6a..a66484af6a9 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerHttpRouteIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelDirigibleTwoStepsJSInvokerHttpRouteIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelDirigibleTwoStepsJSInvokerHttpRouteIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadJdbcIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadJdbcIT.java index bfdf39368dc..08797923bf5 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadJdbcIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadJdbcIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelExtractTransformLoadJdbcIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadTypescriptIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadTypescriptIT.java index fee50343613..3f8521d3f40 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadTypescriptIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelExtractTransformLoadTypescriptIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelExtractTransformLoadTypescriptIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelHttpRouteStarterTemplateIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelHttpRouteStarterTemplateIT.java index caf8628b4a6..5e4b99ba573 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelHttpRouteStarterTemplateIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelHttpRouteStarterTemplateIT.java @@ -14,12 +14,14 @@ import org.eclipse.dirigible.tests.framework.ide.Workbench; import org.eclipse.dirigible.tests.framework.restassured.RestAssuredExecutor; import org.eclipse.dirigible.tests.framework.util.SynchronizationUtil; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.containsString; +@Tag("camel") public class CamelHttpRouteStarterTemplateIT extends UserInterfaceIntegrationTest { private static final String TEMPLATE_TITLE = "HTTP Route Project Starter"; diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsCommitIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsCommitIT.java index 36ec0bfefe0..f2e0e0e0d4f 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsCommitIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsCommitIT.java @@ -11,8 +11,10 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; +@Tag("camel") public class CamelTransactionsCommitIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsRollbackIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsRollbackIT.java index 79d466f1202..ae060cfaa84 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsRollbackIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/camel/CamelTransactionsRollbackIT.java @@ -12,9 +12,11 @@ import org.eclipse.dirigible.tests.base.PredefinedProjectIT; import org.eclipse.dirigible.tests.base.TestProject; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Tag; import org.springframework.beans.factory.annotation.Autowired; @Disabled("Disabled until transaction logic is implemented") +@Tag("camel") public class CamelTransactionsRollbackIT extends PredefinedProjectIT { @Autowired diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/sample/SampleProjectRepositoryIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/sample/SampleProjectRepositoryIT.java index ffaf310688f..dc3e61ac0f1 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/sample/SampleProjectRepositoryIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/sample/SampleProjectRepositoryIT.java @@ -16,9 +16,13 @@ import org.eclipse.dirigible.tests.framework.ide.Workbench; import org.eclipse.dirigible.tests.framework.restassured.RestAssuredExecutor; import org.eclipse.dirigible.tests.framework.util.SynchronizationUtil; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +// "sample" (on top of the inherited "ui") routes the whole sample-project family into its own CI +// shard - see the integration-tests matrix in .github/workflows/build.yml. +@Tag("sample") abstract class SampleProjectRepositoryIT extends UserInterfaceIntegrationTest { @Autowired