diff --git a/acceptance-test/pom.xml b/acceptance-test/pom.xml index 35cfbffc9..80de9ea00 100644 --- a/acceptance-test/pom.xml +++ b/acceptance-test/pom.xml @@ -1,111 +1,119 @@ - - 4.0.0 - code-quarkus-acceptance-test + + 4.0.0 + code-quarkus-acceptance-test - Code Quarkus - Acceptance Test - - io.quarkus.code - code-quarkus-parent - 61-SNAPSHOT - - - 17 - 17 - 17 - 1.54.0 - - - - io.quarkus - quarkus-arc - - - com.microsoft.playwright - playwright - ${playwright.version} - - - com.microsoft.playwright - driver-bundle - ${playwright.version} - - - io.quarkus - quarkus-junit5 - test - - - - - - ${quarkus.platform.group-id} - quarkus-maven-plugin - ${quarkus.platform.version} - true - - - - build - generate-code - generate-code-tests - - - - - - maven-compiler-plugin - ${compiler-plugin.version} - - ${maven.compiler.parameters} - - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - - native - - - native - - - + Code Quarkus - Acceptance Test + + io.quarkus.code + code-quarkus-parent + 61-SNAPSHOT + + + 17 + 17 + 17 + 1.54.0 + + + + io.quarkus + quarkus-arc + + + com.microsoft.playwright + playwright + ${playwright.version} + + + com.microsoft.playwright + driver-bundle + ${playwright.version} + + + io.rest-assured + rest-assured + + + io.quarkus + quarkus-junit5 + test + + + - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - + ${maven.compiler.parameters} - - - + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + - - - true - - - + + + + native + + + native + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + + ${project.build.directory}/${project.build.finalName}-runner + + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + + + + + true + + + diff --git a/acceptance-test/src/main/java/io/quarkus/code/testing/AcceptanceTestApp.java b/acceptance-test/src/main/java/io/quarkus/code/testing/AcceptanceTestApp.java index 58170d842..7c6979048 100644 --- a/acceptance-test/src/main/java/io/quarkus/code/testing/AcceptanceTestApp.java +++ b/acceptance-test/src/main/java/io/quarkus/code/testing/AcceptanceTestApp.java @@ -3,34 +3,32 @@ import com.microsoft.playwright.Browser; import com.microsoft.playwright.BrowserContext; import com.microsoft.playwright.BrowserType; -import com.microsoft.playwright.Download; import com.microsoft.playwright.ElementHandle; -import com.microsoft.playwright.Mouse; import com.microsoft.playwright.Page; import com.microsoft.playwright.Playwright; -import com.microsoft.playwright.Playwright.CreateOptions; +import com.microsoft.playwright.Response; import io.quarkus.runtime.QuarkusApplication; import io.quarkus.runtime.annotations.QuarkusMain; +import io.restassured.http.ContentType; import io.smallrye.config.ConfigMapping; import io.smallrye.config.WithName; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.hamcrest.Matchers; +import org.jboss.logging.Logger; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.Locale; -import java.util.Map; import java.util.Optional; -import java.util.concurrent.CountDownLatch; + +import static io.restassured.RestAssured.given; @QuarkusMain public class AcceptanceTestApp implements QuarkusApplication { public static final String DEFAULT_URL = "https://stage.code.quarkus.io"; - private static final Logger LOG = LoggerFactory.getLogger(AcceptanceTestApp.class); + private static final Logger LOG = Logger.getLogger(AcceptanceTestApp.class); private static final String GENERATE_YOUR_APPLICATION_TEXT = "generate your application"; public static final String LABEL_TOGGLE_FULL_LIST = "[aria-label='Toggle full list of extensions']"; @@ -54,73 +52,110 @@ public int run(String... args) throws Exception { // Open new page Page page = context.newPage(); final String url = testConfig.getUrl().orElse(DEFAULT_URL); - LOG.info("Navigating to {}", url); - page.navigate(url); - final ElementHandle generateButton = page.waitForSelector(".generate-button"); - if (!generateButton.textContent().toLowerCase().contains(GENERATE_YOUR_APPLICATION_TEXT)) { - LOG.error("{} was not found", GENERATE_YOUR_APPLICATION_TEXT); - return 1; + if (url.contains(",")) { + var urls = url.split(","); + for (String u : urls) { + final int x = testUrl(u.trim(), page); + if (x != 0) + return x; + } } else { - LOG.info("Generate button found: {}", generateButton.textContent()); + final int x = testUrl(url.trim(), page); + if (x != 0) + return x; } - final ElementHandle startCodingBlurbButton = page.waitForSelector(".quarkus-blurb .btn-secondary"); - LOG.info("Click on start coding"); - startCodingBlurbButton.click(); + LOG.info("ACCEPTANCE TEST PASSED"); + } - final ElementHandle streamPicker = page.waitForSelector(".stream-picker"); - LOG.info("Click on stream-picker"); - streamPicker.click(); + return 0; + } - final List streams = page.querySelectorAll(".stream-picker .dropdown-menu .dropdown-item"); - final Integer minStreams = testConfig.getMinStreams().orElse(DEFAULT_MIN_STREAMS); + private int testUrl(String url, Page page) { + LOG.infof("Navigating to %s", url); + page.navigate(url); + final ElementHandle generateButton = page.waitForSelector(".generate-button"); + if (!generateButton.textContent().toLowerCase().contains(GENERATE_YOUR_APPLICATION_TEXT)) { + LOG.errorf("%s was not found", GENERATE_YOUR_APPLICATION_TEXT); + return 1; + } else { + LOG.infof("Generate button found: %s", generateButton.textContent()); + } - if (streams.size() < minStreams) { - LOG.error("{} streams found is low than minimum requirement: {}", streams.size(), minStreams); - return 1; - } else { - LOG.info("{} streams found", streams.size()); - } - page.waitForSelector(LABEL_TOGGLE_FULL_LIST).click(); - page.waitForSelector(".extensions-picker .extension-row"); - final List extensions = page.querySelectorAll(".extensions-picker .extension-row"); - final Integer minExtensions = testConfig.getMinExtensions().orElse(DEFAULT_MIN_EXTENSIONS); - - if (extensions.size() < minExtensions) { - LOG.error("{} extensions found is low than minimum requirement: {}", extensions.size(), minExtensions); - return 1; - } else { - LOG.info("{} extensions found", extensions.size()); - } - LOG.info("Click on first extensions"); - extensions.get(0).click(new ElementHandle.ClickOptions().setForce(true)); + final ElementHandle startCodingBlurbButton = page.waitForSelector(".quarkus-blurb .btn-secondary"); + LOG.info("Click on start coding"); + startCodingBlurbButton.click(); + + final ElementHandle streamPicker = page.waitForSelector(".stream-picker"); + LOG.info("Click on stream-picker"); + streamPicker.click(); - LOG.info("Click on second extensions"); - extensions.get(1).click(new ElementHandle.ClickOptions().setForce(true)); + final List streams = page.querySelectorAll(".stream-picker .dropdown-menu .dropdown-item"); + final Integer minStreams = testConfig.getMinStreams().orElse(DEFAULT_MIN_STREAMS); - final ElementHandle extensionsCart = page.waitForSelector(".extensions-cart button"); - LOG.info("Focus on extensions-cart button"); - page.mouse().move(extensionsCart.boundingBox().x + 5, extensionsCart.boundingBox().y + 5); + if (streams.size() < minStreams) { + LOG.errorf("%s streams found is low than minimum requirement: %s", streams.size(), minStreams); + return 1; + } else { + LOG.infof("%s streams found", streams.size()); + } + page.waitForSelector(LABEL_TOGGLE_FULL_LIST).click(); + page.waitForSelector(".extensions-picker .extension-row"); + final List extensions = page.querySelectorAll(".extensions-picker .extension-row"); + final Integer minExtensions = testConfig.getMinExtensions().orElse(DEFAULT_MIN_EXTENSIONS); + + if (extensions.size() < minExtensions) { + LOG.errorf("%s extensions found is low than minimum requirement: %s", extensions.size(), minExtensions); + return 1; + } else { + LOG.infof("%s extensions found", extensions.size()); + } + LOG.info("Click on first extensions"); + extensions.get(0).click(new ElementHandle.ClickOptions().setForce(true)); - final List selected = page.querySelectorAll(".selected-extensions .extension-row"); + LOG.info("Click on second extensions"); + extensions.get(1).click(new ElementHandle.ClickOptions().setForce(true)); - if (selected.size() != 2) { - LOG.error("{} extensions selected instead of 2", selected.size()); - return 1; - } else { - LOG.info("{} extensions selected", selected.size()); - } + final ElementHandle extensionsCart = page.waitForSelector(".extensions-cart button"); + LOG.info("Focus on extensions-cart button"); + page.mouse().move(extensionsCart.boundingBox().x + 5, extensionsCart.boundingBox().y + 5); + + final List selected = page.querySelectorAll(".selected-extensions .extension-row"); - LOG.info("Click on generate button"); - generateButton.click(); + if (selected.size() != 2) { + LOG.errorf("%s extensions selected instead of 2", selected.size()); + return 1; + } else { + LOG.infof("%s extensions selected", selected.size()); + } - final ElementHandle downloadButton = page.waitForSelector(LABEL_DOWNLOAD_THE_ZIP); + LOG.info("Click on generate button"); + generateButton.click(); + final ElementHandle downloadButton = page.waitForSelector(LABEL_DOWNLOAD_THE_ZIP); + + Response response = page.waitForResponse(resp -> resp.url().contains("/d") && resp.status() == 200, () -> { LOG.info("Click on download button"); downloadButton.click(); - - LOG.info("ACCEPTANCE TEST PASSED"); + }); + + String contentType = response.headerValue("Content-Type"); + if (contentType != null && contentType.contains("zip")) { + LOG.info("Download link returned 200 and is a ZIP file"); + } else { + LOG.error("Download link did not return a ZIP file"); + return 1; } + + LOG.infof("ACCEPTANCE TEST PASSED FOR %s", url); + + given() + .accept(ContentType.JSON) + .baseUri(url) + .when().get("/api/config") + .then() + .statusCode(200) + .body("stageBuild", Matchers.in(new Boolean[] { null, false })); return 0; } diff --git a/base/build_deploy.sh b/base/build_deploy.sh deleted file mode 100755 index 32ae1e742..000000000 --- a/base/build_deploy.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -set -exv - -GIT_REV=$(git rev-parse HEAD) -GIT_REV_SHORT=$(git rev-parse --short=7 HEAD) -IMAGE=${IMAGE-"quay.io/quarkus/code-quarkus-api"} -IMAGE_TAG=${IMAGE_TAG-$GIT_REV_SHORT} - -docker build --compress -f src/main/docker/Dockerfile.multistage --build-arg MAVEN_BUILD_EXTRA_ARGS="-Dgit.commit.id=$GIT_REV" -t "${IMAGE}:${IMAGE_TAG}" . - -if [[ -n "$QUAY_USER" && -n "$QUAY_TOKEN" ]]; then - DOCKER_CONF="$PWD/.docker" - mkdir -p "$DOCKER_CONF" - docker tag "${IMAGE}:${IMAGE_TAG}" "${IMAGE}:latest" - echo "$QUAY_TOKEN" | docker --config="$DOCKER_CONF" login -u="$QUAY_USER" --password-stdin quay.io - docker --config="$DOCKER_CONF" push "${IMAGE}:${IMAGE_TAG}" - docker --config="$DOCKER_CONF" push "${IMAGE}:latest" -fi diff --git a/base/pom.xml b/base/pom.xml index ad9a5f088..12dec284a 100644 --- a/base/pom.xml +++ b/base/pom.xml @@ -17,7 +17,6 @@ UTF-8 UTF-8 3.10.1 - 1.28.0 0.20.2 3.27.6 local @@ -120,12 +119,6 @@ - - org.apache.commons - commons-compress - ${commons-compress.version} - test - io.quarkus quarkus-devtools-testing diff --git a/base/src/main/java/io/quarkus/code/config/BuildConfig.java b/base/src/main/java/io/quarkus/code/config/BuildConfig.java new file mode 100644 index 000000000..3e9070f15 --- /dev/null +++ b/base/src/main/java/io/quarkus/code/config/BuildConfig.java @@ -0,0 +1,20 @@ +package io.quarkus.code.config; + +import io.quarkus.runtime.annotations.ConfigPhase; +import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; + +import java.util.List; +import java.util.Optional; + +@ConfigMapping(prefix = "io.quarkus.code.build") +@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) +public interface BuildConfig { + + /** + * This flag is used for releases that are just made for testing on staging and shouldn't reach production + */ + @WithDefault("false") + boolean stage(); +} diff --git a/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTestUtils.java b/base/src/main/java/io/quarkus/code/misc/QuarkusProjectTestUtils.java similarity index 96% rename from base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTestUtils.java rename to base/src/main/java/io/quarkus/code/misc/QuarkusProjectTestUtils.java index 9ef7bea6d..f3a857710 100644 --- a/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTestUtils.java +++ b/base/src/main/java/io/quarkus/code/misc/QuarkusProjectTestUtils.java @@ -1,4 +1,4 @@ -package io.quarkus.code.service; +package io.quarkus.code.misc; import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveInputStream; @@ -13,11 +13,10 @@ import java.util.AbstractMap.SimpleImmutableEntry; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Map; -public class QuarkusProjectServiceTestUtils { +public class QuarkusProjectTestUtils { private static final List EXECUTABLES = List.of( "gradlew", @@ -25,6 +24,9 @@ public class QuarkusProjectServiceTestUtils { "mvnw", "mvnw.bat"); + private QuarkusProjectTestUtils() { + } + public static List readFiles(File testDir) throws IOException { List fileList = new ArrayList<>(); Files.walk(testDir.toPath()) diff --git a/base/src/main/java/io/quarkus/code/model/PublicConfig.java b/base/src/main/java/io/quarkus/code/model/PublicConfig.java index 06b5a9407..dd7899152 100644 --- a/base/src/main/java/io/quarkus/code/model/PublicConfig.java +++ b/base/src/main/java/io/quarkus/code/model/PublicConfig.java @@ -12,7 +12,8 @@ public record PublicConfig( String quarkusDevtoolsVersion, @Deprecated String quarkusVersion, String gitHubClientId, - String gitCommitId) { + String gitCommitId, + boolean stageBuild) { public static PublicConfig.Builder builder() { return new PublicConfig.Builder(); @@ -27,6 +28,7 @@ public static class Builder { private String quarkusVersion; private String gitHubClientId; private String gitCommitId; + private boolean stageBuild = false; public Builder environment(String environment) { this.environment = environment; @@ -68,6 +70,11 @@ public Builder gitCommitId(String gitCommitId) { return this; } + public Builder stageBuild(boolean stageBuild) { + this.stageBuild = stageBuild; + return this; + } + public PublicConfig build() { return new PublicConfig( environment, @@ -77,7 +84,8 @@ public PublicConfig build() { quarkusDevtoolsVersion, quarkusVersion, gitHubClientId, - gitCommitId); + gitCommitId, + stageBuild); } } } \ No newline at end of file diff --git a/base/src/main/java/io/quarkus/code/rest/CodeQuarkusResource.java b/base/src/main/java/io/quarkus/code/rest/CodeQuarkusResource.java index 5b0cc9989..607781753 100644 --- a/base/src/main/java/io/quarkus/code/rest/CodeQuarkusResource.java +++ b/base/src/main/java/io/quarkus/code/rest/CodeQuarkusResource.java @@ -1,6 +1,7 @@ package io.quarkus.code.rest; import com.google.common.base.Strings; +import io.quarkus.code.config.BuildConfig; import io.quarkus.code.config.CodeQuarkusConfig; import io.quarkus.code.config.GitHubConfig; import io.quarkus.code.config.SegmentConfig; @@ -28,7 +29,6 @@ import java.nio.charset.StandardCharsets; import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -59,6 +59,9 @@ public class CodeQuarkusResource { @Inject private GitHubConfig gitHubConfig; + @Inject + private BuildConfig buildConfig; + @Inject private PlatformService platformService; @@ -75,6 +78,7 @@ public class CodeQuarkusResource { @Operation(summary = "Get the Quarkus Launcher configuration", hidden = true) public Uni config() { PublicConfig publicConfig = new PublicConfig.Builder() + .stageBuild(buildConfig.stage()) .environment(config.environment().orElse("dev")) .segmentWriteKey(segmentConfig.writeKey().filter(not(Strings::isNullOrEmpty)).orElse(null)) .sentryDSN(config.sentryFrontendDSN().filter(not(Strings::isNullOrEmpty)).orElse(null)) @@ -83,6 +87,7 @@ public Uni config() { .quarkusVersion(config.quarkusPlatformVersion().orElse("unknown")) .gitHubClientId(gitHubConfig.clientId().filter(not(Strings::isNullOrEmpty)).orElse(null)) .gitCommitId(config.gitCommitId().orElse("unknown")) + .build(); return Uni.createFrom().item(publicConfig); } diff --git a/base/src/main/resources/META-INF/quarkus-config-roots.list b/base/src/main/resources/META-INF/quarkus-config-roots.list new file mode 100644 index 000000000..260fa7e44 --- /dev/null +++ b/base/src/main/resources/META-INF/quarkus-config-roots.list @@ -0,0 +1 @@ +io.quarkus.code.config.BuildConfig \ No newline at end of file diff --git a/base/src/main/resources/application.properties b/base/src/main/resources/application.properties index 2078ef162..f91ca6a2b 100644 --- a/base/src/main/resources/application.properties +++ b/base/src/main/resources/application.properties @@ -3,7 +3,6 @@ io.quarkus.code.quarkus-platform-version=${quarkus.platform.version} io.quarkus.code.quarkus-devtools-version=${quarkus.devtools.version} io.quarkus.code.git-commit-id=${git.commit.id} - # code.quarkus configuration io.quarkus.code.ui.name=code.quarkus.io io.quarkus.code.ui.id=community-app diff --git a/base/src/test/java/io/quarkus/code/CodeQuarkusIT.java b/base/src/test/java/io/quarkus/code/CodeQuarkusIT.java index 674ab84c8..f9f7641f3 100644 --- a/base/src/test/java/io/quarkus/code/CodeQuarkusIT.java +++ b/base/src/test/java/io/quarkus/code/CodeQuarkusIT.java @@ -1,6 +1,7 @@ package io.quarkus.code; -import io.quarkus.code.service.QuarkusProjectServiceTestUtils; +import io.quarkus.code.misc.QuarkusProjectTestUtils; +import io.quarkus.devtools.testing.WrapperRunner; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import org.apache.commons.compress.archivers.ArchiveException; @@ -9,7 +10,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import io.quarkus.devtools.testing.WrapperRunner; import java.io.IOException; @@ -31,7 +31,7 @@ void testMaven(String language) throws IOException, ArchiveException { .header("Content-Disposition", "attachment; filename=\"" + appName + ".zip\"") .extract().asByteArray(); MatcherAssert.assertThat(result, CoreMatchers.notNullValue()); - var project = QuarkusProjectServiceTestUtils.extractProject(result).getKey(); + var project = QuarkusProjectTestUtils.extractProject(result).getKey(); var appDir = project.toPath().resolve(appName); int run = WrapperRunner.run(appDir, WrapperRunner.Wrapper.MAVEN); MatcherAssert.assertThat(run, CoreMatchers.is(0)); @@ -53,7 +53,7 @@ void testGradle(String language) throws IOException, ArchiveException { .header("Content-Disposition", "attachment; filename=\"" + appName + ".zip\"") .extract().asByteArray(); MatcherAssert.assertThat(result, CoreMatchers.notNullValue()); - var project = QuarkusProjectServiceTestUtils.extractProject(result).getKey(); + var project = QuarkusProjectTestUtils.extractProject(result).getKey(); int run = WrapperRunner.run(project.toPath().resolve(appName), WrapperRunner.Wrapper.GRADLE); MatcherAssert.assertThat(run, CoreMatchers.is(0)); } diff --git a/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTest.java b/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTest.java index 7986a956b..0e632bae4 100644 --- a/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTest.java +++ b/base/src/test/java/io/quarkus/code/service/QuarkusProjectServiceTest.java @@ -1,6 +1,7 @@ package io.quarkus.code.service; import io.quarkus.code.config.CodeQuarkusConfig; +import io.quarkus.code.misc.QuarkusProjectTestUtils; import io.quarkus.code.model.ProjectDefinition; import io.quarkus.devtools.commands.data.QuarkusCommandException; import io.quarkus.test.junit.QuarkusTest; @@ -45,7 +46,7 @@ void testDefaultZip(TestInfo info) throws Throwable { // When QuarkusProjectService creator = getProjectService(); byte[] proj = creator.create(platformService.recommendedPlatformInfo(), ProjectDefinition.of()); - var testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + var testDir = QuarkusProjectTestUtils.extractProject(proj); var projDir = Paths.get(testDir.getKey().getPath(), "code-with-quarkus"); // Then @@ -147,7 +148,7 @@ void testCustom(TestInfo info) throws Throwable { "hibernate-validator")) .javaVersion(platformService.recommendedPlatformInfo().stream().javaCompatibility().recommended()) .build()); - Entry> testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + Entry> testDir = QuarkusProjectTestUtils.extractProject(proj); Path projDir = Paths.get(testDir.getKey().toString(), "test-app"); // Then @@ -192,7 +193,7 @@ void testGradleKotlin(TestInfo info) throws Throwable { .className("com.test.TestResource") .extensions(Set.of("rest", "kotlin")) .build()); - Entry> testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + Entry> testDir = QuarkusProjectTestUtils.extractProject(proj); Path projDir = Paths.get(testDir.getKey().toString(), "test-kotlin-app"); // Then @@ -225,7 +226,7 @@ void testGradle17(TestInfo info) throws IOException, QuarkusCommandException, Ar .buildTool("GRADLE") .javaVersion(17) .build()); - Entry> testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + Entry> testDir = QuarkusProjectTestUtils.extractProject(proj); Path projDir = Paths.get(testDir.getKey().toString(), "test-gradle-17-app"); // Then @@ -248,7 +249,7 @@ void testGradle21(TestInfo info) throws IOException, QuarkusCommandException, Ar .buildTool("GRADLE") .javaVersion(21) .build()); - Entry> testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + Entry> testDir = QuarkusProjectTestUtils.extractProject(proj); Path projDir = Paths.get(testDir.getKey().getPath(), "test-gradle-21-app"); // Then @@ -271,7 +272,7 @@ void testQuinoaYaml(TestInfo info) throws Throwable { .buildTool("MAVEN") .extensions(Set.of("quinoa", "config-yaml")) .build()); - Entry> testDir = QuarkusProjectServiceTestUtils.extractProject(proj); + Entry> testDir = QuarkusProjectTestUtils.extractProject(proj); Path projDir = Paths.get(testDir.getKey().toString(), "test-quinoa-yaml-app"); // Then diff --git a/deploy/build_deploy_community_app.sh b/deploy/build_deploy_community_app.sh index 3b6beef46..27ae7cc57 100755 --- a/deploy/build_deploy_community_app.sh +++ b/deploy/build_deploy_community_app.sh @@ -2,12 +2,20 @@ set -exv +STAGE=false + +if [[ $(git --no-pager log --oneline -1) == *[STAGE]* ]]; then + echo "This is commit is flagged with [STAGE] and won't go to production" + STAGE=true +fi + + GIT_REV=$(git rev-parse HEAD) GIT_REV_SHORT=$(git rev-parse --short=7 HEAD) IMAGE=${IMAGE-"quay.io/quarkus/code-quarkus-app"} IMAGE_TAG=${IMAGE_TAG-$GIT_REV_SHORT} -docker build --compress -f docker/Dockerfile.community-app.multistage --build-arg MAVEN_BUILD_EXTRA_ARGS="-Dgit.commit.id=$GIT_REV" -t "${IMAGE}:${IMAGE_TAG}" . +docker build --compress -f docker/Dockerfile.community-app.multistage --build-arg MAVEN_BUILD_EXTRA_ARGS="-Dgit.commit.id=$GIT_REV -Dio.quarkus.code.build.stage=$STAGE" -t "${IMAGE}:${IMAGE_TAG}" . if [[ -n "$QUAY_USER" && -n "$QUAY_TOKEN" ]]; then DOCKER_CONF="$PWD/.docker"