Skip to content

Commit b83e126

Browse files
authored
Merge pull request #49051 from gsmet/3.25.0-backports-1
[3.25] 3.25.0 backports 1
2 parents 092de95 + b3f1ed1 commit b83e126

File tree

42 files changed

+486
-71
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+486
-71
lines changed

bom/application/pom.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<microprofile-lra.version>2.0.1</microprofile-lra.version>
4848
<microprofile-openapi.version>4.0.2</microprofile-openapi.version>
4949
<smallrye-common.version>2.13.7</smallrye-common.version>
50-
<smallrye-config.version>3.13.2</smallrye-config.version>
50+
<smallrye-config.version>3.13.3</smallrye-config.version>
5151
<smallrye-health.version>4.2.0</smallrye-health.version>
5252
<smallrye-metrics.version>4.0.0</smallrye-metrics.version>
5353
<smallrye-open-api.version>4.0.11</smallrye-open-api.version>
@@ -89,7 +89,7 @@
8989
<!-- GraalVM sdk 23.1.2 has a minimum JDK requirement of 17+ at runtime -->
9090
<graal-sdk.version>23.1.2</graal-sdk.version>
9191
<gizmo.version>1.9.0</gizmo.version>
92-
<jackson-bom.version>2.19.1</jackson-bom.version>
92+
<jackson-bom.version>2.19.2</jackson-bom.version>
9393
<commons-logging-jboss-logging.version>1.0.0.Final</commons-logging-jboss-logging.version>
9494
<commons-lang3.version>3.18.0</commons-lang3.version>
9595
<commons-codec.version>1.18.0</commons-codec.version>
@@ -129,8 +129,8 @@
129129
<db2-jdbc.version>12.1.0.0</db2-jdbc.version>
130130
<shrinkwrap.version>1.2.6</shrinkwrap.version>
131131
<hamcrest.version>2.2</hamcrest.version><!-- The version needs to be compatible with both REST Assured and Awaitility -->
132-
<junit.jupiter.version>5.13.3</junit.jupiter.version>
133-
<infinispan.version>15.0.16.Final</infinispan.version>
132+
<junit.jupiter.version>5.13.4</junit.jupiter.version>
133+
<infinispan.version>15.0.18.Final</infinispan.version>
134134
<infinispan.protostream.version>5.0.13.Final</infinispan.protostream.version>
135135
<caffeine.version>3.2.0</caffeine.version>
136136
<netty.version>4.1.121.Final</netty.version>
@@ -142,7 +142,7 @@
142142
<kafka3.version>4.0.0</kafka3.version>
143143
<lz4.version>1.8.0</lz4.version> <!-- dependency of the kafka-clients that could be overridden by other imported BOMs in the platform -->
144144
<snappy.version>1.1.10.5</snappy.version>
145-
<strimzi-test-container.version>0.109.1</strimzi-test-container.version>
145+
<strimzi-test-container.version>0.109.2</strimzi-test-container.version>
146146
<!-- Scala is used by Kafka so we need to choose a compatible version -->
147147
<scala.version>2.13.16</scala.version>
148148
<aws-lambda-java.version>1.3.0</aws-lambda-java.version>
@@ -159,11 +159,11 @@
159159
<maven-invoker.version>3.2.0</maven-invoker.version>
160160
<awaitility.version>4.3.0</awaitility.version>
161161
<jboss-logmanager.version>3.1.2.Final</jboss-logmanager.version>
162-
<flyway.version>11.10.2</flyway.version>
162+
<flyway.version>11.10.3</flyway.version>
163163
<yasson.version>3.0.4</yasson.version>
164164
<!-- liquibase-mongodb is not released everytime with liquibase anymore, but the two versions need to be compatible -->
165-
<liquibase.version>4.29.1</liquibase.version>
166-
<liquibase-mongodb.version>4.29.1</liquibase-mongodb.version>
165+
<liquibase.version>4.33.0</liquibase.version>
166+
<liquibase-mongodb.version>4.33.0.1</liquibase-mongodb.version>
167167
<snakeyaml.version>2.4</snakeyaml.version>
168168
<osgi.version>6.0.0</osgi.version>
169169
<mongo-client.version>5.5.1</mongo-client.version>

bom/test/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<jaxb-api.version>2.3.1</jaxb-api.version>
2121

2222
<rxjava1.version>1.3.8</rxjava1.version>
23-
<strimzi-test-container.version>0.109.1</strimzi-test-container.version>
23+
<strimzi-test-container.version>0.109.2</strimzi-test-container.version>
2424

2525
<opentelemetry-proto.version>1.3.2-alpha</opentelemetry-proto.version>
2626
</properties>

core/deployment/src/main/java/io/quarkus/deployment/dev/testing/TestConfig.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,14 @@ interface Container {
298298
Map<String, String> volumeMounts();
299299
}
300300

301+
interface RestAssured {
302+
/**
303+
* Enable logging of both the request and the response if REST Assureds test validation fails
304+
*/
305+
@WithDefault("true")
306+
boolean enableLoggingOnFailure();
307+
}
308+
301309
enum Mode {
302310
PAUSED,
303311
ENABLED,

devtools/gradle/gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
plugin-publish = "1.3.1"
33

44
kotlin = "2.2.0"
5-
smallrye-config = "3.13.2"
5+
smallrye-config = "3.13.3"
66

7-
junit5 = "5.13.3"
7+
junit5 = "5.13.4"
88
assertj = "3.27.3"
99

1010
[plugins]
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
////
2+
This guide is maintained in the main Quarkus repository
3+
and pull requests should be submitted there:
4+
https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
5+
////
6+
= Dev Assistant
7+
include::_attributes.adoc[]
8+
:categories: writing-extensions
9+
:summary: Learn more about the Dev Assistant
10+
:topics: dev-ui, assistant, extension
11+
12+
== General overview
13+
14+
The Quarkus Dev Assistant is an AI-powered helper built directly into Quarkus Dev Mode. Its goal is to make you more productive by helping you troubleshoot and assisting with development tasks.
15+
16+
The assistant runs **only** within dev mode and never affects your production application.
17+
18+
---
19+
20+
=== What Can It Do?
21+
22+
The Dev Assistant can help with:
23+
24+
- Troubleshooting exceptions and stack traces
25+
- Generating example client code (e.g., `javascript` client for REST endpoints)
26+
- Generating javadoc for your code
27+
- Generating test code for your application
28+
- Generating test data for your application
29+
- Explain existing code in you application
30+
- Complete `//TODO` sections in your code
31+
- ... and more to come !
32+
33+
=== How to Add the Dev Assistant
34+
35+
To enable the Dev Assistant in your Quarkus project, add the `quarkus-chappie` extension:
36+
37+
[source,xml]
38+
----
39+
<dependency>
40+
<groupId>io.quarkiverse.chappie</groupId>
41+
<artifactId>quarkus-chappie</artifactId>
42+
<version>${chappie-extension-version}</version> // <1>
43+
</dependency>
44+
----
45+
<1> Replace `${chappie-extension-version}` with the latest available version. You can find the latest version on https://search.maven.org/artifact/io.quarkiverse.chappie/quarkus-chappie[search.maven.org].
46+
47+
Once added, open the Dev UI to start using the assistant.
48+
49+
[NOTE]
50+
51+
The assistant interfaces are defined in Quarkus "core", but their implementation are located in Quarkiverse (Chappie). You can, if needed, provide an alternative implementation of the assistant.
52+
53+
=== Configuration and Providers
54+
55+
By default, the assistant is disabled until configured. You can choose from supported AI providers:
56+
57+
- OpenAI (e.g., ChatGPT, Openshift AI, Podman AI Lab, ...)
58+
- Ollama (local models like `llama3`)
59+
60+
Configuration can be done directly in Dev UI via the assistant settings pane. You'll need:
61+
62+
- An API key (for OpenAI)
63+
- A local running model (for Ollama or Podman AI)
64+
65+
Settings are stored in local storage per browser.
66+
67+
image::dev_assistant_configuration.png[Dev Assistant Configuration, width=100%]
68+
69+
=== Usage
70+
71+
The Dev Assistant integrates seamlessly into various parts of the Dev UI. Wherever assistant features are available, they are highlighted using a distinctive *pink theme*, making it easy to spot AI-powered interactions.
72+
73+
Currently, assistant functions are available in:
74+
75+
- The *Workspace* view
76+
- Extension pages that support AI-driven help
77+
78+
Look for pink-highlighted buttons or badges - these indicate actions powered by the Dev Assistant.
79+
80+
81+
image::dev_assistant_pink_theme.png[Dev Assistant pink link]
82+
83+
==== Exception help
84+
85+
When an error or exception occurs, the error page includes a `Get help with this` button.
86+
87+
Clicking it takes you directly to the Dev UI's Assistant panel, pre-filled with relevant error context. This allows the assistant to help you:
88+
89+
- Understand what the exception means
90+
- Suggest likely causes
91+
- Recommend how to fix the issue
92+
93+
This provides a fast and focused troubleshooting workflow without needing to copy and paste logs manually.
94+
95+
image::dev_assistant_errorpage.png[Dev Assistant Error page, width=100%]
96+
97+
== Assistant log
98+
99+
You can access the log of the assistant in the Dev UI Footer:
100+
101+
image::dev_assistant_log.png[Dev Assistant Log, width=100%]
102+
103+
== Guide for Extension Developers
104+
105+
Quarkus extensions can enhance the developer experience by contributing to the Dev Assistant. This section explains how to integrate your extension with the Dev Assistant, covering:
106+
107+
- Workspace-based assistant actions
108+
- Assistant-specific pages
109+
- Backend integration via JSON-RPC
110+
- UI features for assistant-aware components
111+
112+
An extension can define Assistant features without depending on Chappie directly. The interfaces and associated structures are located in the `assistant` extension.
113+
114+
=== Workspace participation
115+
116+
You can add an assistant function to a workspace item using the same approach as regular https://quarkus.io/guides/dev-ui#workspace[workspace actions], with one key difference: instead of using `.function(...)`, you use `.assistantFunction(...)`.
117+
118+
[source,java]
119+
----
120+
Action.actionBuilder()
121+
.label("Joke AI")
122+
.assistantFunction((a, p) -> { // <1>
123+
Assistant assistant = (Assistant) a;
124+
Map params = (Map) p;
125+
126+
return assistant.assistBuilder()
127+
.systemMessage(JOKE_SYSTEM_MESSAGE) // <2>
128+
.userMessage(JOKE_USER_MESSAGE) // <3>
129+
.variables(params)
130+
.assist();
131+
132+
})
133+
.display(Display.split)
134+
.displayType(DisplayType.markdown)
135+
.filter(Patterns.JAVA_SRC));
136+
----
137+
<1> Use `assistantFunction` to receive the `Assistant` instance and https://quarkus.io/guides/dev-ui#input[input] parameters.
138+
<2> Provide an optional *system message* to guide the assistant's behavior.
139+
<3> Provide a *user message* as the primary prompt.
140+
141+
=== Assistant pages
142+
143+
To add a standalone assistant-powered page to the Dev UI, use the https://quarkus.io/guides/dev-ui#card[`CardPageBuildItem`] and `Page.assistantPageBuilder()`:
144+
145+
[source,java]
146+
----
147+
cardPageBuildItem.addPage(Page.assistantPageBuilder() // <1>
148+
.title("AI Joke")
149+
.componentLink("qwc-jokes-ai.js"));
150+
----
151+
<1> Use the assistant page builder.
152+
153+
=== Communicating to the backend
154+
155+
You can invoke the assistant from backend code using https://quarkus.io/guides/dev-ui#communicating-to-the-backend[standard Dev UI JSON-RPC] patterns — both against the *runtime* and *deployment* classpaths.
156+
157+
==== JsonRPC against the Runtime classpath
158+
159+
To use the assistant in a https://quarkus.io/guides/dev-ui#jsonrpc-against-the-runtime-classpath[`JsonRpcService`] on the runtime classpath, inject the `Assistant` like this:
160+
161+
[source,java]
162+
----
163+
public class JokesJsonRPCService {
164+
165+
@Inject
166+
Optional<Assistant> assistant; // <1>
167+
----
168+
<1> Inject the assistant as optional, it will only be present if a provider is added and configured.
169+
170+
You can now use this assistant in any JsonRPC method, example:
171+
172+
[source,java]
173+
----
174+
public CompletionStage<Map<String, String>> getAiJoke() {
175+
if (assistant.isPresent()) {
176+
return assistant.get().assistBuilder()
177+
.userMessage("Tell me a funny joke")
178+
.assist();
179+
}
180+
return CompletableFuture.failedStage(new RuntimeException("Assistant is not available"));
181+
}
182+
----
183+
184+
==== JsonRPC against the Deployment classpath
185+
186+
In https://quarkus.io/guides/dev-ui#jsonrpc-against-the-deployment-classpath[deployment-time] code, use the `BuildTimeActionBuildItem` and register assistant actions via `.addAssistantAction(...)`:
187+
188+
[source,java]
189+
----
190+
BuildTimeActionBuildItem bta = new BuildTimeActionBuildItem();
191+
192+
bta.addAssistantAction("getAIJokeInDeployment", (a, p) -> { // <1>
193+
Assistant assistant = (Assistant) a;
194+
195+
return assistant.assistBuilder()
196+
.userMessage(USER_MESSAGE)
197+
.variables(p)
198+
.assist();
199+
});
200+
buildTimeActionProducer.produce(bta);
201+
----
202+
<1> Use `addAssistantAction` instead of `addAction` to access the assistant context.
203+
204+
=== Assistant State in the UI
205+
206+
To conditionally render assistant UI in your Web Component, you can use the https://quarkus.io/guides/dev-ui#assistant-state[assistant state] to
207+
check the state of the assistant. The state can be:
208+
209+
- notAvailable: No assistant implementation (like Chappie) is present.
210+
- available: Assistant is available but not yet configured.
211+
- ready: Assistant is configured and ready to use.
212+
213+
To use this state in your page:
214+
215+
[source,javascript]
216+
----
217+
import { observeState } from 'lit-element-state'; // <1>
218+
import { assistantState } from 'assistant-state'; // <2>
219+
220+
export class QwcExtentionPage extends observeState(LitElement) { // <3>
221+
----
222+
<1> import observeState from the LitState library.
223+
<2> import the state you are interested in, in this case assistant state.
224+
<3> Wrap the LitElement in `observerState`
225+
226+
Now you can access the assistant state anywhere in your page, and when that state changes it will act exactly the same as a local state - re-render the relevant parts of the page:
227+
228+
[source,javascript]
229+
----
230+
render() {
231+
if(assistantState.current.isConfigured){
232+
return html`<div class="assistantfeature">
233+
<span> Magic happends here</span>
234+
</div>`;
235+
}
236+
}
237+
----
238+
239+
=== Assistant themes and UI Components
240+
241+
To maintain visual consistency with other Dev Assistant features, use the following components and styles:
242+
243+
- `<qui-assistant-button>`: A pre-styled pink button with a robot icon.
244+
- `<qui-assistant-warning>`: A standard warning message with the text: `"Quarkus assistant can make mistakes. Check responses."`
245+
246+
You can also use the CSS var `--quarkus-assistant` anywhere you want to apply the assistant's theme color.
247+
248+
== Feedback
249+
250+
The Dev Assistant is evolving! If it gives incorrect answers or misses something obvious, please report it at:
251+
252+
https://github.com/quarkusio/quarkus/issues

docs/src/main/asciidoc/blaze-persistence.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Add the following dependencies to your project:
5151
</dependency>
5252
<dependency>
5353
<groupId>com.blazebit</groupId>
54-
<artifactId>blaze-persistence-integration-hibernate-6.2</artifactId>
54+
<artifactId>blaze-persistence-integration-hibernate-7.0</artifactId>
5555
<scope>runtime</scope>
5656
</dependency>
5757
----
@@ -60,7 +60,7 @@ Add the following dependencies to your project:
6060
.Using Gradle
6161
----
6262
implementation("com.blazebit:blaze-persistence-integration-quarkus-3")
63-
runtimeOnly("com.blazebit:blaze-persistence-integration-hibernate-6.2")
63+
runtimeOnly("com.blazebit:blaze-persistence-integration-hibernate-7.0")
6464
----
6565

6666
The use in native images requires a dependency on the entity view annotation processor that may be extracted into a separate `native` profile:

0 commit comments

Comments
 (0)