From 693a7670433196512dee7b26035f8a2c4590197b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Prinet?= Date: Fri, 20 Dec 2024 15:32:02 +0100 Subject: [PATCH] Remove quarkus-build-caching-extension references follow up its extraction to a dedicated repository (#1724) --- .github/dependabot.yml | 5 - .../quarkus-build-caching-extension.yml | 39 -- quarkus-build-caching-extension/.gitignore | 41 -- .../.mvn/develocity.xml | 23 -- .../.mvn/extensions.xml | 13 - .../.mvn/wrapper/.gitignore | 1 - .../.mvn/wrapper/maven-wrapper.properties | 19 - quarkus-build-caching-extension/LICENSE | 201 ---------- quarkus-build-caching-extension/README.md | 358 +----------------- quarkus-build-caching-extension/doc/run-1.png | Bin 60346 -> 0 bytes quarkus-build-caching-extension/doc/run-2.png | Bin 81142 -> 0 bytes quarkus-build-caching-extension/doc/run-3.png | Bin 82438 -> 0 bytes quarkus-build-caching-extension/mvnw | 259 ------------- quarkus-build-caching-extension/mvnw.cmd | 149 -------- quarkus-build-caching-extension/pom.xml | 222 ----------- .../release/changes.md | 33 -- .../src/it/invoker.properties | 23 -- .../src/it/postbuild.groovy | 38 -- .../src/it/quarkus-3.8/.mvn/extensions.xml | 8 - .../src/it/quarkus-3.8/pom.xml | 90 ----- .../src/it/quarkus-3.8/postbuild.groovy | 1 - .../getting/started/GreetingResource.java | 27 -- .../acme/getting/started/GreetingService.java | 12 - .../src/it/quarkus-latest/.mvn/extensions.xml | 8 - .../src/it/quarkus-latest/pom.xml | 116 ------ .../src/it/quarkus-latest/postbuild.groovy | 1 - .../getting/started/GreetingResource.java | 27 -- .../acme/getting/started/GreetingService.java | 12 - .../java/com/gradle/QuarkusBuildCache.java | 352 ----------------- ...QuarkusBuildCachingDevelocityListener.java | 21 - .../gradle/QuarkusExtensionConfiguration.java | 183 --------- .../java/com/gradle/QuarkusExtensionUtil.java | 42 -- .../java/com/gradle/TestConfiguration.java | 62 --- .../resources/META-INF/plexus/components.xml | 12 - 34 files changed, 1 insertion(+), 2397 deletions(-) delete mode 100644 .github/workflows/quarkus-build-caching-extension.yml delete mode 100644 quarkus-build-caching-extension/.gitignore delete mode 100644 quarkus-build-caching-extension/.mvn/develocity.xml delete mode 100644 quarkus-build-caching-extension/.mvn/extensions.xml delete mode 100644 quarkus-build-caching-extension/.mvn/wrapper/.gitignore delete mode 100644 quarkus-build-caching-extension/.mvn/wrapper/maven-wrapper.properties delete mode 100644 quarkus-build-caching-extension/LICENSE delete mode 100644 quarkus-build-caching-extension/doc/run-1.png delete mode 100644 quarkus-build-caching-extension/doc/run-2.png delete mode 100644 quarkus-build-caching-extension/doc/run-3.png delete mode 100755 quarkus-build-caching-extension/mvnw delete mode 100644 quarkus-build-caching-extension/mvnw.cmd delete mode 100644 quarkus-build-caching-extension/pom.xml delete mode 100644 quarkus-build-caching-extension/release/changes.md delete mode 100644 quarkus-build-caching-extension/src/it/invoker.properties delete mode 100644 quarkus-build-caching-extension/src/it/postbuild.groovy delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-3.8/.mvn/extensions.xml delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-3.8/pom.xml delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-3.8/postbuild.groovy delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingResource.java delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingService.java delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-latest/.mvn/extensions.xml delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-latest/pom.xml delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-latest/postbuild.groovy delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingResource.java delete mode 100644 quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingService.java delete mode 100644 quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCache.java delete mode 100644 quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCachingDevelocityListener.java delete mode 100644 quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionConfiguration.java delete mode 100644 quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionUtil.java delete mode 100644 quarkus-build-caching-extension/src/main/java/com/gradle/TestConfiguration.java delete mode 100644 quarkus-build-caching-extension/src/main/resources/META-INF/plexus/components.xml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 23d1af0f4..f45e9e927 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,11 +16,6 @@ updates: schedule: interval: "daily" time: "02:00" - - package-ecosystem: "maven" - directory: "quarkus-build-caching-extension" - schedule: - interval: "daily" - time: "02:00" - package-ecosystem: "gradle" directory: "common-develocity-gradle-configuration-groovy" registries: diff --git a/.github/workflows/quarkus-build-caching-extension.yml b/.github/workflows/quarkus-build-caching-extension.yml deleted file mode 100644 index 4e711d971..000000000 --- a/.github/workflows/quarkus-build-caching-extension.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Verify Quarkus Build Caching Extension - -on: - schedule: - # Every Sunday at 9.00am - scheduled to test against latest Quarkus version - - cron: "0 9 * * 0" - push: - branches: [ main ] - paths: [ 'quarkus-build-caching-extension/**', '.github/workflows/**' ] - pull_request: - branches: [ main ] - paths: [ 'quarkus-build-caching-extension/**', '.github/workflows/**' ] - workflow_dispatch: - -jobs: - verification: - name: Verification - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - name: Build with Maven - working-directory: quarkus-build-caching-extension - run: | - ./mvnw --batch-mode clean package integration-test - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DV_SOLUTIONS_ACCESS_KEY }} - - name: Upload integration tests reports (on failure only) - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: Integration tests logs - path: | - quarkus-build-caching-extension/target/it/**/*.log diff --git a/quarkus-build-caching-extension/.gitignore b/quarkus-build-caching-extension/.gitignore deleted file mode 100644 index 4e52bccf3..000000000 --- a/quarkus-build-caching-extension/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -#Maven -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -release.properties -.flattened-pom.xml - -# Eclipse -.project -.classpath -.settings/ -bin/ - -# IntelliJ -.idea -*.ipr -*.iml -*.iws - -# NetBeans -nb-configuration.xml - -# Visual Studio Code -.vscode -.factorypath - -# OSX -.DS_Store - -# Vim -*.swp -*.swo - -# patch -*.orig -*.rej - -# Local environment -.env -.mvn/.develocity/ diff --git a/quarkus-build-caching-extension/.mvn/develocity.xml b/quarkus-build-caching-extension/.mvn/develocity.xml deleted file mode 100644 index 87f8f3344..000000000 --- a/quarkus-build-caching-extension/.mvn/develocity.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - https://ge.solutions-team.gradle.com - - - - - - #{isFalse(env['GITHUB_ACTIONS'])} - - #{{'0.0.0.0'}} - - - - - #{isTrue(env['GITHUB_ACTIONS'])} - - - diff --git a/quarkus-build-caching-extension/.mvn/extensions.xml b/quarkus-build-caching-extension/.mvn/extensions.xml deleted file mode 100644 index c7f99fccd..000000000 --- a/quarkus-build-caching-extension/.mvn/extensions.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - com.gradle - develocity-maven-extension - 1.23 - - - com.gradle - common-custom-user-data-maven-extension - 2.0.1 - - diff --git a/quarkus-build-caching-extension/.mvn/wrapper/.gitignore b/quarkus-build-caching-extension/.mvn/wrapper/.gitignore deleted file mode 100644 index e72f5e8b7..000000000 --- a/quarkus-build-caching-extension/.mvn/wrapper/.gitignore +++ /dev/null @@ -1 +0,0 @@ -maven-wrapper.jar diff --git a/quarkus-build-caching-extension/.mvn/wrapper/maven-wrapper.properties b/quarkus-build-caching-extension/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index d58dfb70b..000000000 --- a/quarkus-build-caching-extension/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/quarkus-build-caching-extension/LICENSE b/quarkus-build-caching-extension/LICENSE deleted file mode 100644 index f49a4e16e..000000000 --- a/quarkus-build-caching-extension/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/quarkus-build-caching-extension/README.md b/quarkus-build-caching-extension/README.md index ceb04f419..25633673b 100644 --- a/quarkus-build-caching-extension/README.md +++ b/quarkus-build-caching-extension/README.md @@ -1,359 +1,3 @@ # Custom Maven Extension to make Quarkus build goal cacheable -This Maven extension allows to make the [Quarkus Maven plugin](https://quarkus.io/guides/quarkus-maven-plugin) `build` goal cacheable. -This project performs programmatic configuration of the [Develocity Build Cache](https://docs.gradle.com/develocity/maven-extension/current/#using_the_build_cache) through a Maven extension. See [here](https://docs.gradle.com/develocity/maven-extension/current/#custom_extension) for more details. - -*Note:*
-A native executable can be a very large file. Copying it from/to the local cache, or transferring it from/to the remote cache can be an expensive operation that has to be balanced with the duration of the work being avoided. - -## Requirements -Quarkus 3.2.4 and above which brings [track-config-changes goal](https://quarkus.io/guides/config-reference#tracking-build-time-configuration-changes-between-builds) - -> [!NOTE] -> Although Quarkus 3.2.4 is required, 3.9.0 and above is recommended as it exposes [Quarkus extra dependencies](#quarkus-extra-dependencies) which is added as extra input by the current extension. -> -> This additional input is necessary when using snapshot versions (or when overwriting fixed version) of -> - The Quarkus dependencies -> - A custom Quarkus extension - -## Limitations - -### Supported package types -Only the `native`, `uber-jar`, `jar` and `legacy-jar` [packaging types](https://quarkus.io/guides/maven-tooling#quarkus-package-pkg-package-config_quarkus.package.type) can be made cacheable - -### Build strategy -By default, the `native` packaging is cacheable only if the in-container build strategy (`quarkus.native.container-build=true`) is configured along with a fixed build image (`quarkus.native.builder-image`). -The in-container build strategy means the build is as reproducible as possible. Even so, some timestamps and instruction ordering may be different even when built on the same system in the same environment. - -If the build environments are strictly identical, this restriction can be removed by setting `DEVELOCITY_QUARKUS_NATIVE_BUILD_IN_CONTAINER_REQUIRED=false`. See [configuration section](#build-strategy-1) for more details. - -> [!NOTE] -> When the in-container build strategy is used as a fallback the caching feature will be disabled. The fallback may happen due to GraalVM requirements not met. The recommendation is to explicitly set the in-container strategy (`quarkus.native.container-build=true`) to benefit from caching - -## Usage - -### Extension declaration - -Reference the extension in `.mvn/extensions.xml` (this extension requires the develocity-maven-extension): - -```xml - - - com.gradle - develocity-maven-extension - 1.23 - - - com.gradle - quarkus-build-caching-extension - 1.8 - - -``` - -Note on the Compatibility with The Develocity extension: - -| Extension | Compatible version | -|------------------------------------------------|--------------------| -| `com.gradle:develocity-maven-extension` | 1.+ | -| `com.gradle:gradle-enterprise-maven-extension` | 0.12 | - -### The `quarkus-maven-plugin` configuration - -Enable [Quarkus config tracking](https://quarkus.io/guides/config-reference#dumping-build-time-configuration-options-read-during-the-build) in `pom.xml`: - -```xml - - true - -``` - -Add the `track-prod-config-changes` execution to the `quarkus-maven-plugin` configuration: - -```xml - - ${quarkus.platform.group-id} - quarkus-maven-plugin - ${quarkus.platform.version} - true - - - track-prod-config-changes - process-resources - - track-config-changes - - - true - - - - - build - generate-code - generate-code-tests - - - - -``` - -### Quarkus configuration dump initialization - -After applying the quarkus-maven-plugin [configuration step](#quarkus-maven-plugin-configuration), invoke the Quarkus `build` goal to generate the `.quarkus/quarkus-prod-config-dump` file. -This file is required to make the Quarkus `build` goal cacheable. - -The file should be checked-in to the source code repository. -in continuous integration environment, an alternative is to have the file restored (see [this option](https://github.com/marketplace/actions/cache#restoring-and-saving-cache-using-a-single-action) for GitHub actions as an example). - -If the file has some system dependent properties, it is possible to have [different configuration dump](#quarkus-configuration-dump) to reflect those changes (local, ci, os...) conditionally enabled by Maven profiles. - -It is also possible to [ignore properties](#ignore-properties-in-quarkus-configuration-dump) not impacting the produced artifacts. -The `quarkus.native.graalvm-home` and `quarkus.native.java-home` are some classic examples, the JDK version is already captured as a goal input and the path to the JDK does not impact the produced artifact. - -## Configuration - -Configuration can be set with (listed in order of precedence ): -- [Environment variables](#environment-variables) -- [Maven properties](#maven-properties) -- [Configuration file](#configuration-file) - -### Environment variables - -#### Feature toggle - -The caching can be disabled by setting: -```properties -DEVELOCITY_QUARKUS_CACHE_ENABLED=false -``` - -#### Quarkus configuration dump - -By default, the values below are used to compute the dump-config (`.quarkus/quarkus-prod-config-dump`) and -config-check (`target/quarkus-prod-config-check`) file names: -- _build profile_: prod -- _file prefix_: quarkus -- _file suffix_: config-dump - -Those values can be overridden, when CI and local have different Quarkus properties for instance: -```properties -DEVELOCITY_QUARKUS_BUILD_PROFILE=prod -DEVELOCITY_QUARKUS_DUMP_CONFIG_PREFIX=quarkus -DEVELOCITY_QUARKUS_DUMP_CONFIG_SUFFIX=config-dump-ci -``` - -#### Extra outputs - -Some additional outputs can be configured if necessary (when using the [quarkus-helm](https://quarkus.io/blog/quarkus-helm/#getting-started-with-the-quarkus-helm-extension) extension for instance). The paths are relative to the `target` folder. - -Directories can be added (csv list): -```properties -DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_DIRS=helm -``` -or Specific files (csv list): -```properties -DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_FILES=helm/kubernetes/my-project/Chart.yaml,helm/kubernetes/my-project/values.yaml -``` - -#### Build strategy - -The default is to enable caching only when the in-container build strategy is used. -If the build environments are strictly identical build over build, the restriction can be removed by setting: -```properties -DEVELOCITY_QUARKUS_NATIVE_BUILD_IN_CONTAINER_REQUIRED=false -``` - -### Maven properties - -The same configuration can be achieved with Maven properties: -```xml - - true - prod - quarkus - config-dump-ci - helm - helm/kubernetes/${project.artifactId}/Chart.yaml,helm/kubernetes/${project.artifactId}/values.yaml - false - -``` - -### Configuration file - -A configuration file can be used instead by defining its location (relative to the project root folder) either: -- as an environment variable: -`DEVELOCITY_QUARKUS_CONFIG_FILE=.quarkus/develocity-ci.properties` -- as a maven property: -`.quarkus/extension-local.properties` - -Its content can be created like described in the [environment variables](#environment-variables) section. - -### Ignore properties in Quarkus configuration dump - -It is also possible to configure some properties to be excluded from configuration tracking (more details in the [Quarkus documentation](https://quarkus.io/guides/config-reference#filtering-configuration-options)). -This is relevant when a property is volatile but does not impact the produced artifact, see [this section](#quarkus-configuration-dump) for more details. - -```xml - - quarkus.container-image.tag,quarkus.application.version - -``` - -## Troubleshooting -Debug logging on the extension can be configured with the following property - -```shell -mvn -Dorg.slf4j.simpleLogger.log.com.gradle=debug clean install -``` - -## Implementation details - -The logic to make the Quarkus `build` goal cacheable is isolated to the [QuarkusBuildCache](./src/main/java/com/gradle/QuarkusBuildCache.java) class. - -### Quarkus configuration dump -A key component of the caching mechanism is the Quarkus configuration dump file `.quarkus/quarkus-prod-config-dump`. -This file is generated by the Quarkus `build` goal when the Maven property `quarkus.config-tracking.enabled` is `true`. -It contains all the Quarkus properties used during the Quarkus `build` process. -Some properties are discovered late in the `build` phase and can't be determined in advance, thus the need for a first full execution to generate the file. - -The presence of the file is required to mark the Quarkus `build` goal as cacheable. - -The `track-config-changes` goal creates a file `target/quarkus-prod-config-check` containing all the properties from the `.quarkus/quarkus-prod-config-dump` with their actual value. -If property values are identical in the two files, it means that the Quarkus configuration was not changed since the last Quarkus `build`, therefore the Quarkus `build` goal can be marked cacheable. - -When the Quarkus `build` goal is marked cacheable, the regular caching process using [inputs](#goal-inputs) and [outputs](#goal-outputs) kicks in as described [here](https://docs.gradle.com/develocity/maven-extension/current/#using_the_build_cache). - -### Illustrated sequence of operations -Let's illustrate the extension behavior with the following sequence of builds: - -**Initialization build (one-off step):** -- `track-config-changes` does nothing as `.quarkus/quarkus-prod-config-dump` is absent -- Quarkus configuration from current and previous build differ - - => The `build` goal is not cacheable -- `build` executes and creates `.quarkus/quarkus-prod-config-dump` - -![Run1](./doc/run-1.png) - -**First (post-initialization) build:** -- `track-config-changes` creates `target/quarkus-prod-config-check` -- Quarkus configuration from current and previous build are identical (assuming Quarkus configuration was unchanged) - - => The `build` goal is cacheable -- Cache lookup happens: *CACHE MISS* -- `build` executes and creates `.quarkus/quarkus-prod-config-dump` -- output is stored into the cache - -![Run2](./doc/run-2.png) - -**Next builds:** -- `track-config-changes` creates `target/quarkus-prod-config-check` -- Quarkus configuration from current and previous build are identical (assuming Quarkus configuration was unchanged) - - => The `build` goal is cacheable -- Cache lookup happens: *CACHE HIT* -- `build` is not executed - -![Run3](./doc/run-3.png) - -### Goal Inputs - -This extension makes the Quarkus build goal cacheable by configuring the following goal inputs: - -#### General inputs -- The compilation classpath -- Generated sources directory -- JDK version - -#### Inputs specific to the non in-container build strategy -- OS details (name, version, arch) - -#### Quarkus properties -See [here](https://quarkus.io/guides/config-reference#configuration-sources) for details - -Quarkus' properties are fetched from the *config dump* populated by the Quarkus `build` goal. -The `build` goal is cacheable only if the `track-config-changes` goal generates a *config dump* identical to the one generated by the previous `build` execution. -This ensures that the local Quarkus configuration hasn't changed since last build, otherwise a new `build` execution is required as a configuration can change the produced artifact. - -`target/quarkus-prod-config-check` is added as a goal input - -#### Quarkus file properties -Some properties are pointing to a file which has to be declared as file input. This allows to have the file content part of the cache key (`RELATIVE_PATH` strategy). -- `quarkus.docker.dockerfile-native-path` -- `quarkus.docker.dockerfile-jvm-path` -- `quarkus.openshift.jvm-dockerfile` -- `quarkus.openshift.native-dockerfile` - -#### Quarkus extra dependencies - -##### Since Quarkus 3.13.0 -Quarkus dynamically adds some dependencies to the build which will be listed in the `target/quarkus-prod-dependencies.txt` file. -This file is created by the Quarkus `track-config-changes` goal and contains the absolute path to each dependency (one dependency per line). -This fileset is added as goal input with a `RUNTIME_CLASSPATH` normalization strategy. - -##### Quarkus [3.9.0,3.13.0[ -Quarkus dynamically adds some dependencies to the build which will be listed in the `target/quarkus-prod-dependency-checksums.txt` file. -This file is created by the Quarkus `track-config-changes` goal and contains the list of dependencies along with their checksum for snapshot versions (one dependency per line). -This file is added as goal input with a `RELATIVE_PATH` normalization strategy. - -### Goal Outputs -Here are the files added as output: -- `target/-runner` -- `target/.jar` -- `target/-runner.jar` -- `target/quarkus-artifact.properties` - -> [!NOTE] -> Some additional outputs can be configured. See the [configuration section](#extra-outputs) for more details. - -## Quarkus Test goals - -When the test goals (`maven-surefire-plugin` and `maven-failsafe-plugin`) are running some `@QuarkusTest` or `@QuarkusIntegrationTest`, -it is important for consistency to add [implicit dependencies](#quarkus-extra-dependencies) as goal [additional input](https://docs.gradle.com/develocity/maven-extension/current/#declaring_additional_inputs). - -Specifically for `maven-failsafe-plugin`, the Quarkus artifact descriptor `quarkus-artifact.properties` also needs to be added. - -With Quarkus 3.9.0+, This can be achieved by declaring a property `addQuarkusInputs` on the test goal: - -```xml - - - maven-surefire-plugin - - - true> - - - - - maven-failsafe-plugin - - - true> - - - - -``` - -Prior to Quarkus 3.9.0: -```xml - - - maven-surefire-plugin - - - true> - - - - - maven-failsafe-plugin - - - true> - - - - -``` +This has been moved to a dedicated [GitHub repository](https://github.com/gradle/quarkus-build-caching-extension). \ No newline at end of file diff --git a/quarkus-build-caching-extension/doc/run-1.png b/quarkus-build-caching-extension/doc/run-1.png deleted file mode 100644 index 398d23b8b1a15c2374e49bc803acfd586214aa71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60346 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 diff --git a/quarkus-build-caching-extension/doc/run-3.png b/quarkus-build-caching-extension/doc/run-3.png deleted file mode 100644 index 6fa4dedd599fb72679a1626f934655cfe0287b77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82438 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 Cn*zN6 diff --git a/quarkus-build-caching-extension/mvnw b/quarkus-build-caching-extension/mvnw deleted file mode 100755 index 19529ddf8..000000000 --- a/quarkus-build-caching-extension/mvnw +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.2 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/quarkus-build-caching-extension/mvnw.cmd b/quarkus-build-caching-extension/mvnw.cmd deleted file mode 100644 index b150b91ed..000000000 --- a/quarkus-build-caching-extension/mvnw.cmd +++ /dev/null @@ -1,149 +0,0 @@ -<# : batch portion -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.3.2 -@REM -@REM Optional ENV vars -@REM MVNW_REPOURL - repo url base for downloading maven distribution -@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output -@REM ---------------------------------------------------------------------------- - -@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) -@SET __MVNW_CMD__= -@SET __MVNW_ERROR__= -@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% -@SET PSModulePath= -@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( - IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) -) -@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% -@SET __MVNW_PSMODULEP_SAVE= -@SET __MVNW_ARG0_NAME__= -@SET MVNW_USERNAME= -@SET MVNW_PASSWORD= -@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) -@echo Cannot start maven from wrapper >&2 && exit /b 1 -@GOTO :EOF -: end batch / begin powershell #> - -$ErrorActionPreference = "Stop" -if ($env:MVNW_VERBOSE -eq "true") { - $VerbosePreference = "Continue" -} - -# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties -$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl -if (!$distributionUrl) { - Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" -} - -switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { - "maven-mvnd-*" { - $USE_MVND = $true - $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" - $MVN_CMD = "mvnd.cmd" - break - } - default { - $USE_MVND = $false - $MVN_CMD = $script -replace '^mvnw','mvn' - break - } -} - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -if ($env:MVNW_REPOURL) { - $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } - $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" -} -$distributionUrlName = $distributionUrl -replace '^.*/','' -$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' -$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" -if ($env:MAVEN_USER_HOME) { - $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" -} -$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' -$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" - -if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { - Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" - Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" - exit $? -} - -if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { - Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" -} - -# prepare tmp dir -$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile -$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" -$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null -trap { - if ($TMP_DOWNLOAD_DIR.Exists) { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } - } -} - -New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null - -# Download and Install Apache Maven -Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -Write-Verbose "Downloading from: $distributionUrl" -Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -$webclient = New-Object System.Net.WebClient -if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { - $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) -} -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum -if ($distributionSha256Sum) { - if ($USE_MVND) { - Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." - } - Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash - if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { - Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." - } -} - -# unzip and move -Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null -Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null -try { - Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null -} catch { - if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { - Write-Error "fail to move MAVEN_HOME" - } -} finally { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } -} - -Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/quarkus-build-caching-extension/pom.xml b/quarkus-build-caching-extension/pom.xml deleted file mode 100644 index 32294c255..000000000 --- a/quarkus-build-caching-extension/pom.xml +++ /dev/null @@ -1,222 +0,0 @@ - - - 4.0.0 - com.gradle - quarkus-build-caching-extension - 1.9-SNAPSHOT - jar - - ${project.groupId}:${project.artifactId} - Maven extension to make the Quarkus build goal cacheable - https://github.com/gradle/develocity-build-config-samples/tree/main/quarkus-build-caching-extension - - - UTF-8 - - - - https://github.com/gradle/develocity-build-config-samples - scm:git:https://github.com/gradle/develocity-build-config-samples.git - scm:git:https://github.com/gradle/develocity-build-config-samples.git - v1.3 - - - - - Apache-2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - Documentation - https://github.com/gradle/develocity-build-config-samples/tree/main/quarkus-build-caching-extension - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 - - - - - - The Gradle team - Gradle Inc. - https://gradle.com - - - - - - org.apache.maven - maven-core - 3.9.9 - provided - - - com.gradle - develocity-maven-extension - 1.23 - provided - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - 1.8 - 1.8 - - - org.eclipse.sisu - org.eclipse.sisu.inject - 0.3.5 - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - - - package - - shade - - - - - - - - - - - org.apache.maven.plugins - maven-invoker-plugin - 3.9.0 - - ${project.build.directory}/it - invoker.properties - true - - -Dmaven.ext.class.path=../../quarkus-build-caching-extension-${project.version}.jar -Ddevelocity.cache.local.directory=${project.build.directory}/build-cache -Ddevelocity.cache.remote.enabled=false - - - - - integration-test - - install - run - - - - - - - - ${project.basedir}/src/main/resources - - - ${project.basedir} - - LICENSE - - - - - - - - release - - - - org.apache.maven.plugins - maven-release-plugin - 3.1.1 - - -Dscan=false - - - - org.apache.maven.plugins - maven-invoker-plugin - 3.9.0 - - true - true - - - - org.apache.maven.plugins - maven-source-plugin - 3.3.1 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.11.2 - - - attach-javadocs - - jar - - - - - 8 - - - - org.apache.maven.plugins - maven-site-plugin - 3.21.0 - - true - true - - - - org.simplify4u.plugins - sign-maven-plugin - 1.1.0 - - - sign - - sign - - - - - false - - - - - - - - diff --git a/quarkus-build-caching-extension/release/changes.md b/quarkus-build-caching-extension/release/changes.md deleted file mode 100644 index cae7546be..000000000 --- a/quarkus-build-caching-extension/release/changes.md +++ /dev/null @@ -1,33 +0,0 @@ -### 1.8 -- Add support for Quarkus `BuildMojo.attachSboms` parameter introduced in Quarkus 3.14.0 - -### 1.7 -- Allow cross-OS cache hits when using the in-container build strategy - -### 1.6 -- Support Quarkus extra properties on test goals using Quarkus lower than 3.9.0 - -### 1.5 -- Allow to configure extra outputs -- Allow to disable in-container strategy requirement for native builds -- Remove configuration of ignored properties in Quarkus configuration dump file - -### 1.4 -- Add configuration of ignored properties in Quarkus configuration dump file - -### 1.3 -- Add `quarkus-artifact.properties` as goal output - -### 1.2 -- Fix cache disabled due to unrecognized Jar package type when deprecated key `quarkus.package.type` is used instead of `quarkus.package.jar.type` - -### 1.1 -- Add support for Quarkus 3.9 (`quarkus.package.type` is replaced by `quarkus.native.enabled` / `quarkus.package.jar.type`) - -### 1.0 -- Add compatibility with `develocity-maven-extension:1.21` - ---- - -### 0.12 -- First version \ No newline at end of file diff --git a/quarkus-build-caching-extension/src/it/invoker.properties b/quarkus-build-caching-extension/src/it/invoker.properties deleted file mode 100644 index e727a8292..000000000 --- a/quarkus-build-caching-extension/src/it/invoker.properties +++ /dev/null @@ -1,23 +0,0 @@ -invoker.name.1 = uber-jar build with ${cache-disabled} -invoker.goals.1 = clean package ${develocity-options} --log-file ./01-uber-jar-build-cache-disabled.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.1 = uber-jar - -invoker.name.2 = uber-jar build with ${cache-miss} -invoker.goals.2 = clean package ${develocity-options} --log-file ./02-uber-jar-build-cache-miss.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.2 = uber-jar - -invoker.name.3 = uber-jar build with ${cache-hit} -invoker.goals.3 = clean package ${develocity-options} --log-file ./03-uber-jar-build-cache-hit.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.3 = uber-jar - -invoker.name.4 = Native build with ${cache-disabled} -invoker.goals.4 = clean package ${develocity-options} --log-file ./04-native-build-cache-disabled.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.4 = native - -invoker.name.5 = Native build with ${cache-miss} -invoker.goals.5 = clean package ${develocity-options} --log-file ./05-native-build-cache-miss.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.5 = native - -invoker.name.6 = Native build with ${cache-hit} -invoker.goals.6 = clean package ${develocity-options} --log-file ./06-native-build-cache-hit.log -Dorg.slf4j.simpleLogger.log.com.gradle=debug -invoker.profiles.6 = native diff --git a/quarkus-build-caching-extension/src/it/postbuild.groovy b/quarkus-build-caching-extension/src/it/postbuild.groovy deleted file mode 100644 index 4261c7e6e..000000000 --- a/quarkus-build-caching-extension/src/it/postbuild.groovy +++ /dev/null @@ -1,38 +0,0 @@ -// Utility functions -String getContent(String fileName) { - File f = new File(basedir, fileName) - assert f.exists() - return f.text -} - -void assertBuildCacheDisabled(String logFile) { - println("Verifying build cache disabled on ${logFile}...") - String log = getContent(logFile) - assert log.contains('[quarkus-build-caching-extension] Quarkus build goal marked as not cacheable') - assert log.contains('Quarkus augmentation completed') -} - -void assertBuildCacheMiss(String logFile) { - println("Verifying build cache miss on ${logFile}...") - String log = getContent(logFile) - assert log.contains('[quarkus-build-caching-extension] Quarkus build goal marked as cacheable') - assert log.contains('Quarkus augmentation completed') - -} - -void assertBuildCacheHit(String logFile) { - println("Verifying build cache hit on ${logFile}...") - String log = getContent(logFile) - assert log.contains('[quarkus-build-caching-extension] Quarkus build goal marked as cacheable') - assert !log.contains('Quarkus augmentation completed') -} - -// Assertions -assertBuildCacheDisabled('01-uber-jar-build-cache-disabled.log') -assertBuildCacheMiss('02-uber-jar-build-cache-miss.log') -assertBuildCacheHit('03-uber-jar-build-cache-hit.log') -assertBuildCacheDisabled('04-native-build-cache-disabled.log') -assertBuildCacheMiss('05-native-build-cache-miss.log') -assertBuildCacheHit('06-native-build-cache-hit.log') - -println('Verification succeeded') diff --git a/quarkus-build-caching-extension/src/it/quarkus-3.8/.mvn/extensions.xml b/quarkus-build-caching-extension/src/it/quarkus-3.8/.mvn/extensions.xml deleted file mode 100644 index 0890b9a91..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-3.8/.mvn/extensions.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - com.gradle - develocity-maven-extension - 1.21.4 - - diff --git a/quarkus-build-caching-extension/src/it/quarkus-3.8/pom.xml b/quarkus-build-caching-extension/src/it/quarkus-3.8/pom.xml deleted file mode 100644 index 8be326e41..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-3.8/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - com.gradle - quarkus-test-3.8 - 0.1-SNAPSHOT - - - - - 3.8.4 - true - - - - - - io.quarkus - quarkus-bom - ${quarkus.version} - pom - import - - - - - - - io.quarkus - quarkus-resteasy-reactive - - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus.version} - true - - - track-prod-config-changes - process-resources - - track-config-changes - - - true - - - - - build - - - - - - - - - - native - - - native - - - - native - true - - - - - uber-jar - - - uber-jar - - - - uber-jar - - - - - diff --git a/quarkus-build-caching-extension/src/it/quarkus-3.8/postbuild.groovy b/quarkus-build-caching-extension/src/it/quarkus-3.8/postbuild.groovy deleted file mode 100644 index bbb7bfcb0..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-3.8/postbuild.groovy +++ /dev/null @@ -1 +0,0 @@ -evaluate(new File("src/it/postbuild.groovy")) diff --git a/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingResource.java b/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingResource.java deleted file mode 100644 index e38ed41f5..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingResource.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.acme.getting.started; - -import jakarta.inject.Inject; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; - -@Path("/hello") -public class GreetingResource { - - @Inject - GreetingService service; - - @GET - @Produces(MediaType.TEXT_PLAIN) - @Path("/greeting/{name}") - public String greeting(String name) { - return service.greeting(name); - } - - @GET - @Produces(MediaType.TEXT_PLAIN) - public String hello() { - return "hello"; - } -} diff --git a/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingService.java b/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingService.java deleted file mode 100644 index b025d3118..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-3.8/src/main/java/org/acme/getting/started/GreetingService.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.acme.getting.started; - -import jakarta.enterprise.context.ApplicationScoped; - -@ApplicationScoped -public class GreetingService { - - public String greeting(String name) { - return "hello " + name; - } - -} diff --git a/quarkus-build-caching-extension/src/it/quarkus-latest/.mvn/extensions.xml b/quarkus-build-caching-extension/src/it/quarkus-latest/.mvn/extensions.xml deleted file mode 100644 index 0890b9a91..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-latest/.mvn/extensions.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - com.gradle - develocity-maven-extension - 1.21.4 - - diff --git a/quarkus-build-caching-extension/src/it/quarkus-latest/pom.xml b/quarkus-build-caching-extension/src/it/quarkus-latest/pom.xml deleted file mode 100644 index f5089e29a..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-latest/pom.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - 4.0.0 - com.gradle - quarkus-test-latest - 0.1-SNAPSHOT - - - 999-SNAPSHOT - true - - - - - quarkus-snapshots-repository - https://s01.oss.sonatype.org/content/repositories/snapshots/ - - false - - - true - - - - - - - quarkus-snapshots-plugin-repository - https://s01.oss.sonatype.org/content/repositories/snapshots/ - - false - - - true - - - - - - - - io.quarkus - quarkus-bom - ${quarkus.version} - pom - import - - - - - - - io.quarkus - quarkus-rest - - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus.version} - true - - - track-prod-config-changes - process-resources - - track-config-changes - - - true - - - - - build - - - - - - - - - - native - - - native - - - - true - true - - - - - uber-jar - - - uber-jar - - - - false - uber-jar - - - - - diff --git a/quarkus-build-caching-extension/src/it/quarkus-latest/postbuild.groovy b/quarkus-build-caching-extension/src/it/quarkus-latest/postbuild.groovy deleted file mode 100644 index bbb7bfcb0..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-latest/postbuild.groovy +++ /dev/null @@ -1 +0,0 @@ -evaluate(new File("src/it/postbuild.groovy")) diff --git a/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingResource.java b/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingResource.java deleted file mode 100644 index e38ed41f5..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingResource.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.acme.getting.started; - -import jakarta.inject.Inject; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; - -@Path("/hello") -public class GreetingResource { - - @Inject - GreetingService service; - - @GET - @Produces(MediaType.TEXT_PLAIN) - @Path("/greeting/{name}") - public String greeting(String name) { - return service.greeting(name); - } - - @GET - @Produces(MediaType.TEXT_PLAIN) - public String hello() { - return "hello"; - } -} diff --git a/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingService.java b/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingService.java deleted file mode 100644 index b025d3118..000000000 --- a/quarkus-build-caching-extension/src/it/quarkus-latest/src/main/java/org/acme/getting/started/GreetingService.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.acme.getting.started; - -import jakarta.enterprise.context.ApplicationScoped; - -@ApplicationScoped -public class GreetingService { - - public String greeting(String name) { - return "hello " + name; - } - -} diff --git a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCache.java b/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCache.java deleted file mode 100644 index c76ec2c8a..000000000 --- a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCache.java +++ /dev/null @@ -1,352 +0,0 @@ -package com.gradle; - -import com.gradle.develocity.agent.maven.api.cache.BuildCacheApi; -import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider; -import com.gradle.develocity.agent.maven.api.cache.NormalizationProvider; -import org.apache.maven.artifact.DependencyResolutionRequiredException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Caching instructions for the Quarkus build goal. - */ -final class QuarkusBuildCache { - - private static final Logger LOGGER = LoggerFactory.getLogger(QuarkusBuildCache.class); - - private static final String TARGET_DIR = "target/"; - - // Quarkus' configuration keys - private static final List QUARKUS_CONFIG_KEY_NATIVE_CONTAINER_BUILD = Arrays.asList("quarkus.native.container-build", "quarkus.native.remote-container-build"); - private static final String QUARKUS_CONFIG_KEY_NATIVE_BUILDER_IMAGE = "quarkus.native.builder-image"; - // quarkus.package.type is replaced by quarkus.native.enabled / quarkus.package.jar.type in Quarkus 3.9 - private static final String QUARKUS_CONFIG_KEY_DEPRECATED_PACKAGE_TYPE = "quarkus.package.type"; - private static final String QUARKUS_CONFIG_KEY_NATIVE = "quarkus.native.enabled"; - private static final String QUARKUS_CONFIG_KEY_JAR_TYPE = "quarkus.package.jar.type"; - private static final String QUARKUS_CONFIG_KEY_GRAALVM_HOME = "quarkus.native.graalvm-home"; - private static final String QUARKUS_CONFIG_KEY_JAVA_HOME = "quarkus.native.java-home"; - private static final String PACKAGE_NATIVE = "native"; - // Quarkus' cacheable package types - private static final List QUARKUS_CACHEABLE_JAR_TYPES = Arrays.asList("jar", "legacy-jar", "uber-jar"); - - // Quarkus' properties which are considered as file inputs - private static final List QUARKUS_KEYS_AS_FILE_INPUTS = Arrays.asList("quarkus.docker.dockerfile-native-path", "quarkus.docker.dockerfile-jvm-path", "quarkus.openshift.jvm-dockerfile", "quarkus.openshift.native-dockerfile"); - - // Quarkus' properties which should be ignored (the JDK / GraalVM version are extra inputs) - private static final List QUARKUS_IGNORED_PROPERTIES = Arrays.asList(QUARKUS_CONFIG_KEY_GRAALVM_HOME, QUARKUS_CONFIG_KEY_JAVA_HOME); - - // Quarkus artifact descriptor - private static final String QUARKUS_ARTIFACT_PROPERTIES_FILE_NAME = "quarkus-artifact.properties"; - - void configureBuildCache(BuildCacheApi buildCache) { - buildCache.registerNormalizationProvider(context -> { - QuarkusExtensionConfiguration extensionConfiguration = new QuarkusExtensionConfiguration(context.getProject()); - configureNormalization(context, extensionConfiguration); - }); - buildCache.registerMojoMetadataProvider(context -> { - QuarkusExtensionConfiguration extensionConfiguration = new QuarkusExtensionConfiguration(context.getProject()); - - context.withPlugin("quarkus-maven-plugin", () -> { - configureQuarkusBuildGoal(context, extensionConfiguration); - }); - context.withPlugin("maven-surefire-plugin", () -> { - TestConfiguration testConfiguration = new TestConfiguration(context, extensionConfiguration); - configureQuarkusExtraTestInputs(context, extensionConfiguration, testConfiguration); - }); - context.withPlugin("maven-failsafe-plugin", () -> { - TestConfiguration testConfiguration = new TestConfiguration(context, extensionConfiguration); - configureQuarkusExtraTestInputs(context, extensionConfiguration, testConfiguration); - configureQuarkusExtraIntegrationTestInputs(context, testConfiguration); - }); - }); - } - - private void configureNormalization(NormalizationProvider.Context context, QuarkusExtensionConfiguration extensionConfiguration) { - if (extensionConfiguration.isQuarkusCacheEnabled()) { - context.configureRuntimeClasspathNormalization( - normalization -> normalization.addPropertiesNormalization(extensionConfiguration.getCurrentConfigFileName(), QUARKUS_IGNORED_PROPERTIES) - ); - } - } - - private void configureQuarkusExtraTestInputs(MojoMetadataProvider.Context context, QuarkusExtensionConfiguration extensionConfiguration, TestConfiguration testConfiguration) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage(testConfiguration.toString())); - if (testConfiguration.isAddQuarkusInputs()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Adding Quarkus extra test inputs")); - context.inputs(inputs -> addQuarkusDependencyChecksumsInput(inputs, extensionConfiguration)); - context.inputs(inputs -> addQuarkusDependenciesInputs(inputs, extensionConfiguration)); - } - if (testConfiguration.isAddQuarkusPackageInputs()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Adding Quarkus extra test package inputs")); - context.inputs(inputs -> addQuarkusJarInput(inputs, testConfiguration)); - } - } - - private void configureQuarkusExtraIntegrationTestInputs(MojoMetadataProvider.Context context, TestConfiguration testConfiguration) { - if (testConfiguration.isAddQuarkusInputs()) { - context.inputs(this::addQuarkusArtifactPropertiesInput); - } - if (testConfiguration.isAddQuarkusPackageInputs()) { - context.inputs(inputs -> addQuarkusExeInput(inputs, testConfiguration)); - } - } - - private void configureQuarkusBuildGoal(MojoMetadataProvider.Context context, QuarkusExtensionConfiguration extensionConfiguration) { - if ("build".equals(context.getMojoExecution().getGoal())) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage(extensionConfiguration.toString())); - if (extensionConfiguration.isQuarkusCacheEnabled()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Quarkus caching is enabled")); - - // Load Quarkus properties from previous build - String baseDir = context.getProject().getBasedir().getAbsolutePath(); - Properties quarkusPreviousProperties = QuarkusExtensionUtil.loadProperties(baseDir, extensionConfiguration.getDumpConfigFileName()); - - // Load Quarkus properties from current build - Properties quarkusCurrentProperties = QuarkusExtensionUtil.loadProperties(baseDir, extensionConfiguration.getCurrentConfigFileName()); - - // Check required configuration - if (isQuarkusBuildCacheable(quarkusPreviousProperties, quarkusCurrentProperties, extensionConfiguration.isNativeBuildInContainerRequired())) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus build goal marked as cacheable")); - configureInputs(context, extensionConfiguration, quarkusCurrentProperties); - configureOutputs(context, extensionConfiguration.getExtraOutputDirs(), extensionConfiguration.getExtraOutputFiles()); - } else { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus build goal marked as not cacheable")); - } - } else { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Quarkus caching is disabled")); - } - } - } - - private boolean isQuarkusBuildCacheable(Properties quarkusPreviousProperties, Properties quarkusCurrentProperties, boolean isNativeBuildInContainerRequired) { - return isQuarkusDumpConfigFilePresent(quarkusPreviousProperties, quarkusCurrentProperties) - && isJarPackagingTypeSupported(quarkusCurrentProperties) - && isNotNativeOrInContainerNativeBuild(quarkusCurrentProperties, isNativeBuildInContainerRequired) - && isQuarkusPropertiesUnchanged(quarkusPreviousProperties, quarkusCurrentProperties); - } - - private boolean isQuarkusDumpConfigFilePresent(Properties quarkusPreviousProperties, Properties quarkusCurrentProperties) { - if (quarkusPreviousProperties.isEmpty()) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus previous configuration not found")); - return false; - } - if (quarkusCurrentProperties.isEmpty()) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus current configuration not found")); - return false; - } - - return true; - } - - private boolean isQuarkusPropertiesUnchanged(Properties quarkusPreviousProperties, Properties quarkusCurrentProperties) { - Set> quarkusPropertiesCopy = new HashSet<>(quarkusPreviousProperties.entrySet()); - - // Remove properties identical between current and previous build - quarkusPropertiesCopy.removeAll(quarkusCurrentProperties.entrySet()); - - // Remove properties which should be ignored - quarkusPropertiesCopy.removeIf(e -> QUARKUS_IGNORED_PROPERTIES.contains(e.getKey().toString())); - - if (!quarkusPropertiesCopy.isEmpty()) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus properties have changed")); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("[" + quarkusPropertiesCopy.stream().map(e -> e.getKey().toString()).collect(Collectors.joining(", ")) + "]")); - } - } else { - return true; - } - - return false; - } - - private boolean isNativeBuild(Properties quarkusCurrentProperties) { - return Boolean.parseBoolean(quarkusCurrentProperties.getProperty(QUARKUS_CONFIG_KEY_NATIVE)) || PACKAGE_NATIVE.equals(quarkusCurrentProperties.getProperty(QUARKUS_CONFIG_KEY_DEPRECATED_PACKAGE_TYPE)); - } - - private boolean isNotNativeOrInContainerNativeBuild(Properties quarkusCurrentProperties, boolean isNativeBuildInContainerRequired) { - if (isNativeBuild(quarkusCurrentProperties)) { - if (isNativeBuildInContainerRequired) { - return isInContainerWithFixedImageBuild(quarkusCurrentProperties, true); - } else { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus in-container build strategy is not required")); - } - } else { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Quarkus build is not native")); - } - - return true; - } - - private boolean isInContainerWithFixedImageBuild(Properties quarkusCurrentProperties, boolean isLoggingRequired) { - String builderImage = quarkusCurrentProperties.getProperty(QUARKUS_CONFIG_KEY_NATIVE_BUILDER_IMAGE, ""); - if (builderImage.isEmpty()) { - if(isLoggingRequired) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus build is not using a fixed image")); - } - return false; - } - - if (QUARKUS_CONFIG_KEY_NATIVE_CONTAINER_BUILD.stream().noneMatch(key -> Boolean.parseBoolean(quarkusCurrentProperties.getProperty(key)))) { - if(isLoggingRequired) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus build strategy is not in-container")); - } - return false; - } - - return true; - } - - private boolean isJarPackagingTypeSupported(Properties quarkusCurrentProperties) { - if (!isNativeBuild(quarkusCurrentProperties)) { - String packageType = getJarPackageType(quarkusCurrentProperties); - if (packageType == null || !QUARKUS_CACHEABLE_JAR_TYPES.contains(packageType)) { - LOGGER.info(QuarkusExtensionUtil.getLogMessage("Quarkus package type " + packageType + " is not cacheable")); - return false; - } - } - - return true; - } - - private String getJarPackageType(Properties quarkusCurrentProperties) { - String jarPackageType = quarkusCurrentProperties.getProperty(QUARKUS_CONFIG_KEY_JAR_TYPE); - if (jarPackageType == null) { - jarPackageType = quarkusCurrentProperties.getProperty(QUARKUS_CONFIG_KEY_DEPRECATED_PACKAGE_TYPE); - } - return jarPackageType; - } - - private void configureInputs(MojoMetadataProvider.Context context, QuarkusExtensionConfiguration extensionConfiguration, Properties quarkusCurrentProperties) { - context.inputs(inputs -> { - if (!isInContainerWithFixedImageBuild(quarkusCurrentProperties, false)) { - // do not add OS inputs when using the in-container build strategy - addOsInputs(inputs); - } - addCompilerInputs(inputs); - addClasspathInput(context, inputs); - addMojoInputs(inputs); - addQuarkusPropertiesInput(inputs, extensionConfiguration); - addQuarkusConfigurationFilesInputs(inputs, quarkusCurrentProperties); - addQuarkusDependenciesInputs(inputs, extensionConfiguration); - addQuarkusDependencyChecksumsInput(inputs, extensionConfiguration); - }); - } - - private void addOsInputs(MojoMetadataProvider.Context.Inputs inputs) { - inputs.property("osName", System.getProperty("os.name")) - .property("osVersion", System.getProperty("os.version")) - .property("osArch", System.getProperty("os.arch")); - } - - private void addCompilerInputs(MojoMetadataProvider.Context.Inputs inputs) { - inputs.property("javaVersion", System.getProperty("java.version")); - } - - private void addClasspathInput(MojoMetadataProvider.Context context, MojoMetadataProvider.Context.Inputs inputs) { - try { - List compileClasspathElements = context.getProject().getCompileClasspathElements(); - inputs.fileSet("quarkusCompileClasspath", compileClasspathElements, fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.CLASSPATH)); - } catch (DependencyResolutionRequiredException e) { - throw new IllegalStateException("Classpath can't be resolved"); - } - } - - private void addMojoInputs(MojoMetadataProvider.Context.Inputs inputs) { - inputs - .fileSet("generatedSourcesDirectory", fileSet -> { - }) - .properties("appArtifact", "closeBootstrappedApp", "finalName", "ignoredEntries", "manifestEntries", "manifestSections", "skip", "skipOriginalJarRename", "systemProperties", "properties", "attachSboms") - .ignore("project", "buildDir", "mojoExecution", "session", "repoSession", "repos", "pluginRepos", "attachRunnerAsMainArtifact", "bootstrapId", "buildDirectory"); - } - - private void addQuarkusPropertiesInput(MojoMetadataProvider.Context.Inputs inputs, QuarkusExtensionConfiguration extensionConfiguration) { - inputs.fileSet("quarkusConfigCheck", new File(extensionConfiguration.getCurrentConfigFileName()), fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.RELATIVE_PATH)); - inputs.fileSet("generatedSourcesDirectory", fileSet -> { - }); - } - - private void addQuarkusConfigurationFilesInputs(MojoMetadataProvider.Context.Inputs inputs, Properties quarkusCurrentProperties) { - for (String quarkusFilePropertyKey : QUARKUS_KEYS_AS_FILE_INPUTS) { - String quarkusFilePropertyValue = quarkusCurrentProperties.getProperty(quarkusFilePropertyKey); - if (QuarkusExtensionUtil.isNotEmpty(quarkusFilePropertyValue)) { - inputs.fileSet(quarkusFilePropertyKey, new File(quarkusFilePropertyValue), fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.RELATIVE_PATH)); - } - } - } - - /** - * This method is deprecated and kept for compatibility reasons @see {@link #addQuarkusDependenciesInputs} for replacement - */ - @Deprecated - private void addQuarkusDependencyChecksumsInput(MojoMetadataProvider.Context.Inputs inputs, QuarkusExtensionConfiguration extensionConfiguration) { - inputs.fileSet("quarkusDependencyChecksums", new File(extensionConfiguration.getCurrentDependencyChecksumsFileName()), fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.RELATIVE_PATH)); - } - - private void addQuarkusArtifactPropertiesInput(MojoMetadataProvider.Context.Inputs inputs) { - inputs.fileSet("quarkusArtifactProperties", new File(TARGET_DIR + QUARKUS_ARTIFACT_PROPERTIES_FILE_NAME), fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.RELATIVE_PATH)); - } - - private void addQuarkusJarInput(MojoMetadataProvider.Context.Inputs inputs, TestConfiguration testConfiguration) { - inputs.fileSet("quarkusJarFile", new File(TARGET_DIR), fileSet -> fileSet.include(testConfiguration.getQuarkusJarFilePattern()).normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.CLASSPATH)); - } - - private void addQuarkusExeInput(MojoMetadataProvider.Context.Inputs inputs, TestConfiguration testConfiguration) { - inputs.fileSet("quarkusExeFile", new File(TARGET_DIR), fileSet -> fileSet.include(testConfiguration.getQuarkusExeFilePattern()).normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.RELATIVE_PATH)); - } - - private void addQuarkusDependenciesInputs(MojoMetadataProvider.Context.Inputs inputs, QuarkusExtensionConfiguration extensionConfiguration) { - File quarkusDependencyFile = new File(extensionConfiguration.getCurrentDependencyFileName()); - if (quarkusDependencyFile.exists()) { - try { - List quarkusDependencies = Files.readAllLines(quarkusDependencyFile.toPath(), Charset.defaultCharset()); - inputs.fileSet("quarkusDependencies", quarkusDependencies, fileSet -> fileSet.normalizationStrategy(MojoMetadataProvider.Context.FileSet.NormalizationStrategy.CLASSPATH)); - } catch (IOException e) { - LOGGER.error(QuarkusExtensionUtil.getLogMessage("Error while loading " + quarkusDependencyFile), e); - } - } else { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage(quarkusDependencyFile + " not found")); - } - } - - private void configureOutputs(MojoMetadataProvider.Context context, List extraOutputDirs, List extraOutputFiles) { - context.outputs(outputs -> { - String quarkusExeFileName = TARGET_DIR + context.getProject().getBuild().getFinalName() + "-runner"; - String quarkusJarFileName = TARGET_DIR + context.getProject().getBuild().getFinalName() + ".jar"; - String quarkusUberJarFileName = TARGET_DIR + context.getProject().getBuild().getFinalName() + "-runner.jar"; - String quarkusArtifactProperties = TARGET_DIR + QUARKUS_ARTIFACT_PROPERTIES_FILE_NAME; - - outputs.cacheable("this plugin has CPU-bound goals with well-defined inputs and outputs"); - outputs.file("quarkusExe", quarkusExeFileName); - outputs.file("quarkusJar", quarkusJarFileName); - outputs.file("quarkusUberJar", quarkusUberJarFileName); - outputs.file("quarkusArtifactProperties", quarkusArtifactProperties); - - extraOutputDirs.forEach(extraOutput -> { - if(!extraOutput.isEmpty()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Adding extra output dir " + extraOutput)); - outputs.directory(extraOutput, TARGET_DIR + extraOutput); - } - }); - - extraOutputFiles.forEach(extraOutput -> { - if(!extraOutput.isEmpty()) { - LOGGER.debug(QuarkusExtensionUtil.getLogMessage("Adding extra output file " + extraOutput)); - outputs.file(extraOutput, TARGET_DIR + extraOutput); - } - }); - }); - } - -} diff --git a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCachingDevelocityListener.java b/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCachingDevelocityListener.java deleted file mode 100644 index 864e4a4be..000000000 --- a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusBuildCachingDevelocityListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gradle; - -import com.gradle.develocity.agent.maven.api.DevelocityApi; -import com.gradle.develocity.agent.maven.api.DevelocityListener; -import org.apache.maven.execution.MavenSession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public final class QuarkusBuildCachingDevelocityListener implements DevelocityListener { - - private final Logger LOGGER = LoggerFactory.getLogger(QuarkusBuildCachingDevelocityListener.class); - - private final QuarkusBuildCache quarkusBuildCache = new QuarkusBuildCache(); - - @Override - public void configure(DevelocityApi api, MavenSession session) { - LOGGER.debug("Executing extension: " + getClass().getSimpleName()); - quarkusBuildCache.configureBuildCache(api.getBuildCache()); - } - -} diff --git a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionConfiguration.java b/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionConfiguration.java deleted file mode 100644 index 621a91d1c..000000000 --- a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionConfiguration.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.gradle; - -import org.apache.maven.project.MavenProject; - -import java.util.Arrays; -import java.util.List; -import java.util.Properties; - -final class QuarkusExtensionConfiguration { - - // Disable caching flag key - private static final String DEVELOCITY_QUARKUS_KEY_CACHE_ENABLED = "DEVELOCITY_QUARKUS_CACHE_ENABLED"; - - // Configuration file location key - private static final String DEVELOCITY_QUARKUS_KEY_CONFIG_FILE = "DEVELOCITY_QUARKUS_CONFIG_FILE"; - - // Build profile key - private static final String DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE = "DEVELOCITY_QUARKUS_BUILD_PROFILE"; - - // Default build profile - private static final String DEVELOCITY_QUARKUS_DEFAULT_BUILD_PROFILE = "prod"; - - // Dump config file prefix key - private static final String DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX = "DEVELOCITY_QUARKUS_DUMP_CONFIG_PREFIX"; - - // Default dump config file prefix - private static final String DEVELOCITY_QUARKUS_DEFAULT_DUMP_CONFIG_PREFIX = "quarkus"; - - // Dump config file suffix key - private static final String DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_SUFFIX = "DEVELOCITY_QUARKUS_DUMP_CONFIG_SUFFIX"; - - // Default dump config file suffix - private static final String DEVELOCITY_QUARKUS_DEFAULT_DUMP_CONFIG_SUFFIX = "config-dump"; - - // Extra output dirs key - private static final String DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_DIRS = "DEVELOCITY_QUARKUS_EXTRA_OUTPUT_DIRS"; - - // Extra output files key - private static final String DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_FILES = "DEVELOCITY_QUARKUS_EXTRA_OUTPUT_FILES"; - - // Native build in container required key - private static final String DEVELOCITY_QUARKUS_KEY_NATIVE_BUILD_IN_CONTAINER_REQUIRED = "DEVELOCITY_QUARKUS_NATIVE_BUILD_IN_CONTAINER_REQUIRED"; - - private final Properties configuration = new Properties(); - - QuarkusExtensionConfiguration(MavenProject project) { - // loading default properties - initWithDefault(); - - // override from environment - overrideFromEnvironment(); - - // override from Maven properties - overrideFromMaven(project); - - // override from configuration file - overrideFromConfigurationFile(project); - } - - private void initWithDefault() { - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_CACHE_ENABLED, Boolean.TRUE.toString()); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE, DEVELOCITY_QUARKUS_DEFAULT_BUILD_PROFILE); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX, DEVELOCITY_QUARKUS_DEFAULT_DUMP_CONFIG_PREFIX); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_SUFFIX, DEVELOCITY_QUARKUS_DEFAULT_DUMP_CONFIG_SUFFIX); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_CONFIG_FILE, ""); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_DIRS, ""); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_FILES, ""); - configuration.setProperty(DEVELOCITY_QUARKUS_KEY_NATIVE_BUILD_IN_CONTAINER_REQUIRED, Boolean.TRUE.toString()); - } - - private void overrideFromEnvironment() { - configuration.stringPropertyNames().forEach((key) -> { - String envValue = System.getenv(key); - if (envValue != null && !envValue.isEmpty()) { - configuration.setProperty(key, envValue); - } - }); - } - - private void overrideFromMaven(MavenProject project) { - configuration.stringPropertyNames().forEach((key) -> { - String mavenProperty = project.getProperties().getProperty( - key.toLowerCase().replace("_", "."), "" - ); - if (mavenProperty != null && !mavenProperty.isEmpty()) { - configuration.setProperty(key, mavenProperty); - } - }); - } - - private void overrideFromConfigurationFile(MavenProject project) { - String configurationFile = configuration.getProperty(DEVELOCITY_QUARKUS_KEY_CONFIG_FILE); - if(!configurationFile.isEmpty()) { - configuration.putAll(QuarkusExtensionUtil.loadProperties(project.getBasedir().getAbsolutePath(), configurationFile)); - } - } - - /** - * @return whether Quarkus cache is enabled or not - */ - boolean isQuarkusCacheEnabled() { - // Quarkus cache is enabled by default - return !Boolean.FALSE.toString().equals(configuration.get(DEVELOCITY_QUARKUS_KEY_CACHE_ENABLED)); - } - - /** - * @return whether native build requires in-container build strategy or not - */ - boolean isNativeBuildInContainerRequired() { - return !Boolean.FALSE.toString().equals(configuration.get(DEVELOCITY_QUARKUS_KEY_NATIVE_BUILD_IN_CONTAINER_REQUIRED)); - } - - /** - * This file contains Quarkus' properties used to configure the application. - * This file is generated by the Quarkus build goal. - * - * @return dump config file name - */ - String getDumpConfigFileName() { - return String.format(".quarkus/%s-%s-%s", - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX), - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE), - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_SUFFIX) - ); - } - - /** - * This file contains Quarkus' properties values when process-resources phase is executed. - * It is generated by the Quarkus track-config-changes goal. - * - * @return config check file name - */ - String getCurrentConfigFileName() { - return String.format("target/%s-%s-config-check", - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX), - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE) - ); - } - - /** - * This file contains the list of absolute paths to runtime dependencies used by the Quarkus application. - * - * @return dependency file name - */ - String getCurrentDependencyFileName() { - return String.format("target/%s-%s-dependencies.txt", - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX), - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE) - ); - } - - /** - * This file contains the list of Runtime dependencies used by the Quarkus application. - * - * @return dependency file name - */ - String getCurrentDependencyChecksumsFileName() { - return String.format("target/%s-%s-dependency-checksums.txt", - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_DUMP_CONFIG_PREFIX), - configuration.getProperty(DEVELOCITY_QUARKUS_KEY_BUILD_PROFILE) - ); - } - - /** - * @return extra goal output directories to cache - */ - List getExtraOutputDirs() { - return Arrays.asList(configuration.getProperty(DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_DIRS).split(",")); - } - - /** - * @return extra goal output files to cache - */ - List getExtraOutputFiles() { - return Arrays.asList(configuration.getProperty(DEVELOCITY_QUARKUS_KEY_EXTRA_OUTPUT_FILES).split(",")); - } - - - @Override - public String toString() { - return configuration.toString(); - } -} diff --git a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionUtil.java b/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionUtil.java deleted file mode 100644 index 4efb74716..000000000 --- a/quarkus-build-caching-extension/src/main/java/com/gradle/QuarkusExtensionUtil.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gradle; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.util.Properties; - -final class QuarkusExtensionUtil { - - private static final Logger LOGGER = LoggerFactory.getLogger(QuarkusBuildCache.class); - private static final String LOG_PREFIX = "[quarkus-build-caching-extension] "; - - static Properties loadProperties(String baseDir, String propertyFile) { - Properties props = new Properties(); - File configFile = new File(baseDir, propertyFile); - - if (configFile.exists()) { - try (InputStream input = Files.newInputStream(configFile.toPath())) { - props.load(input); - } catch (IOException e) { - LOGGER.error(getLogMessage("Error while loading " + propertyFile), e); - } - } else { - LOGGER.debug(getLogMessage(propertyFile + " not found")); - } - - return props; - } - - static boolean isNotEmpty(String value) { - return value != null && !value.isEmpty(); - } - - static String getLogMessage(String msg) { - return LOG_PREFIX + msg; - } - -} diff --git a/quarkus-build-caching-extension/src/main/java/com/gradle/TestConfiguration.java b/quarkus-build-caching-extension/src/main/java/com/gradle/TestConfiguration.java deleted file mode 100644 index 737cd52a4..000000000 --- a/quarkus-build-caching-extension/src/main/java/com/gradle/TestConfiguration.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gradle; - -import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider; -import org.codehaus.plexus.util.xml.Xpp3Dom; - -class TestConfiguration { - - private static final String TEST_GOAL_KEY_ADD_QUARKUS_INPUTS = "addQuarkusInputs"; - private static final String TEST_GOAL_KEY_ADD_QUARKUS_PACKAGE_INPUTS = "addQuarkusPackageInputs"; - private static final String TEST_GOAL_KEY_QUARKUS_PACKAGE_PATTERN = "quarkusPackagePattern"; - private static final String TEST_GOAL_DEFAULT_QUARKUS_PACKAGE_JAR_PATTERN = "*.jar"; - private static final String TEST_GOAL_DEFAULT_QUARKUS_PACKAGE_EXE_PATTERN = "*-runner"; - - private boolean addQuarkusInputs; - private boolean addQuarkusPackageInputs; - private String quarkusPackagePattern; - - TestConfiguration(MojoMetadataProvider.Context context, QuarkusExtensionConfiguration extensionConfiguration) { - if (extensionConfiguration.isQuarkusCacheEnabled()) { - Xpp3Dom properties = context.getMojoExecution().getConfiguration().getChild("properties"); - if (properties != null) { - Xpp3Dom addQuarkusInputsProperty = properties.getChild(TEST_GOAL_KEY_ADD_QUARKUS_INPUTS); - if (addQuarkusInputsProperty != null) { - addQuarkusInputs = Boolean.parseBoolean(addQuarkusInputsProperty.getValue()); - } - Xpp3Dom addQuarkusPackageInputsProperty = properties.getChild(TEST_GOAL_KEY_ADD_QUARKUS_PACKAGE_INPUTS); - if (addQuarkusPackageInputsProperty != null) { - addQuarkusPackageInputs = Boolean.parseBoolean(addQuarkusPackageInputsProperty.getValue()); - } - Xpp3Dom quarkusPackagePatternProperty = properties.getChild(TEST_GOAL_KEY_QUARKUS_PACKAGE_PATTERN); - if (quarkusPackagePatternProperty != null) { - quarkusPackagePattern = quarkusPackagePatternProperty.getValue(); - } - } - } - } - - boolean isAddQuarkusInputs() { - return addQuarkusInputs; - } - - boolean isAddQuarkusPackageInputs() { - return addQuarkusPackageInputs; - } - - String getQuarkusJarFilePattern() { - return quarkusPackagePattern != null ? quarkusPackagePattern : TEST_GOAL_DEFAULT_QUARKUS_PACKAGE_JAR_PATTERN; - } - - String getQuarkusExeFilePattern() { - return quarkusPackagePattern != null ? quarkusPackagePattern : TEST_GOAL_DEFAULT_QUARKUS_PACKAGE_EXE_PATTERN; - } - - @Override - public String toString() { - return "TestConfiguration{" + - "addQuarkusInputs=" + addQuarkusInputs + - ", addQuarkusPackageInputs=" + addQuarkusPackageInputs + - ", quarkusPackagePattern='" + quarkusPackagePattern + '\'' + - '}'; - } -} diff --git a/quarkus-build-caching-extension/src/main/resources/META-INF/plexus/components.xml b/quarkus-build-caching-extension/src/main/resources/META-INF/plexus/components.xml deleted file mode 100644 index 7b26b4c49..000000000 --- a/quarkus-build-caching-extension/src/main/resources/META-INF/plexus/components.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.gradle.develocity.agent.maven.api.DevelocityListener - quarkus-build-caching-develocity-listener - com.gradle.QuarkusBuildCachingDevelocityListener - Makes the Quarkus goals cacheable - false - - -