diff --git a/.github/workflows/matrix.yml b/.github/workflows/matrix.yml new file mode 100644 index 0000000..dd14bf3 --- /dev/null +++ b/.github/workflows/matrix.yml @@ -0,0 +1,29 @@ +name: Compatibility Matrix + +on: + workflow_dispatch: + +jobs: + compatibility: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + keycloak_version: [ 21.0.2, 21.1.2, 22.0.5, 23.0.5, latest, nightly ] + extension_version: [ 20.0.1, 21.0.0, 22.0.0, 23.0.0 ] + steps: + - uses: actions/checkout@v4 + with: + ref: v${{ matrix.extension_version }} + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 17 + cache: 'maven' + - name: Clean and compile + run: mvn -B -U clean test-compile --file pom.xml + - name: Download extension + run: curl -L -o target/keycloak-restrict-client-auth.jar https://github.com/sventorben/keycloak-restrict-client-auth/releases/download/v${{ matrix.extension_version }}/keycloak-restrict-client-auth.jar + - name: Compatibility tests + run: mvn -B -U failsafe:integration-test failsafe:verify --file pom.xml -Dkeycloak.version=${{ matrix.keycloak_version }} -DuseJar=true diff --git a/pom.xml b/pom.xml index 3fc8c71..aa495a9 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,7 @@ ${version.keycloak} quarkus + false 5.10.0 @@ -87,6 +88,7 @@ log4j2 ${keycloak.version} ${keycloak.dist} + ${useJar} diff --git a/src/test/java/de/sventorben/keycloak/authorization/client/ClientPolicyIT.java b/src/test/java/de/sventorben/keycloak/authorization/client/ClientPolicyIT.java index 9589929..61c1457 100755 --- a/src/test/java/de/sventorben/keycloak/authorization/client/ClientPolicyIT.java +++ b/src/test/java/de/sventorben/keycloak/authorization/client/ClientPolicyIT.java @@ -34,7 +34,6 @@ class ClientPolicyIT { @Container private static final KeycloakContainer KEYCLOAK_CONTAINER = FullImageName.createContainer() - .withProviderClassesFrom("target/classes") .withExposedPorts(KEYCLOAK_HTTP_PORT) .withLogConsumer(new Slf4jLogConsumer(LOGGER).withSeparateOutputStreams()) .withRealmImportFile("/test-realm.json") diff --git a/src/test/java/de/sventorben/keycloak/authorization/client/ConfigIT.java b/src/test/java/de/sventorben/keycloak/authorization/client/ConfigIT.java index 67631bc..8bcc44d 100755 --- a/src/test/java/de/sventorben/keycloak/authorization/client/ConfigIT.java +++ b/src/test/java/de/sventorben/keycloak/authorization/client/ConfigIT.java @@ -26,7 +26,6 @@ class ConfigIT { @Container private static final KeycloakContainer KEYCLOAK_CONTAINER = FullImageName.createContainer() - .withProviderClassesFrom("target/classes") .withExposedPorts(KEYCLOAK_HTTP_PORT) .withLogConsumer(new Slf4jLogConsumer(LOGGER).withSeparateOutputStreams()) .withStartupTimeout(Duration.ofSeconds(90)) diff --git a/src/test/java/de/sventorben/keycloak/authorization/client/FullImageName.java b/src/test/java/de/sventorben/keycloak/authorization/client/FullImageName.java index 5bd75d7..48122d6 100755 --- a/src/test/java/de/sventorben/keycloak/authorization/client/FullImageName.java +++ b/src/test/java/de/sventorben/keycloak/authorization/client/FullImageName.java @@ -4,6 +4,9 @@ import dasniko.testcontainers.keycloak.KeycloakContainer; import org.testcontainers.images.ImagePullPolicy; import org.testcontainers.images.PullPolicy; +import java.io.File; +import java.util.List; + import static de.sventorben.keycloak.authorization.client.FullImageName.Distribution.quarkus; import static java.lang.module.ModuleDescriptor.Version; @@ -20,6 +23,8 @@ class FullImageName { private static final String NIGHTLY_VERSION = "nightly"; private static final String KEYCLOAK_VERSION = System.getProperty("keycloak.version", LATEST_VERSION); + private static final boolean USE_JAR = Boolean.parseBoolean(System.getProperty("useJar", "false")); + static String get() { String imageName = "keycloak"; @@ -61,8 +66,14 @@ class FullImageName { if (isLatestVersion() || isNightlyVersion()) { pullPolicy = PullPolicy.alwaysPull(); } - return new KeycloakContainer(fullImage) + KeycloakContainer keycloakContainer = new KeycloakContainer(fullImage) .withImagePullPolicy(pullPolicy); + if (USE_JAR) { + keycloakContainer = keycloakContainer.withProviderLibsFrom(List.of(new File("target/keycloak-restrict-client-auth.jar"))); + } else { + keycloakContainer = keycloakContainer.withProviderClassesFrom("target/classes"); + } + return keycloakContainer; } } diff --git a/src/test/java/de/sventorben/keycloak/authorization/client/LoginIT.java b/src/test/java/de/sventorben/keycloak/authorization/client/LoginIT.java index 1f97c57..2758ea3 100755 --- a/src/test/java/de/sventorben/keycloak/authorization/client/LoginIT.java +++ b/src/test/java/de/sventorben/keycloak/authorization/client/LoginIT.java @@ -33,7 +33,6 @@ class LoginIT { @Container private static final KeycloakContainer KEYCLOAK_CONTAINER = FullImageName.createContainer() - .withProviderClassesFrom("target/classes") .withExposedPorts(KEYCLOAK_HTTP_PORT) .withLogConsumer(new Slf4jLogConsumer(LOGGER).withSeparateOutputStreams()) .withRealmImportFile("/test-realm.json")