Skip to content

Commit 1d2c24a

Browse files
committed
Appĺying Codestart to Quarkus Dapr Extension
1 parent 8e5cf20 commit 1d2c24a

12 files changed

Lines changed: 192 additions & 18 deletions

File tree

deployment/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
<version>${assertj.version}</version>
5151
<scope>test</scope>
5252
</dependency>
53+
<dependency>
54+
<groupId>io.dapr</groupId>
55+
<artifactId>testcontainers-dapr</artifactId>
56+
<version>0.14.0</version>
57+
</dependency>
5358
</dependencies>
5459
<build>
5560
<plugins>

deployment/src/main/java/io/quarkiverse/dapr/deployment/DevServicesDaprProcessor.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919
import org.testcontainers.containers.Network;
2020
import org.yaml.snakeyaml.Yaml;
2121

22-
import io.diagrid.dapr.DaprContainer;
23-
import io.diagrid.dapr.DaprContainer.Component;
24-
import io.diagrid.dapr.DaprContainer.MetadataEntry;
22+
import io.dapr.testcontainers.Component;
23+
import io.dapr.testcontainers.DaprContainer;
24+
import io.dapr.testcontainers.DaprLogLevel;
25+
import io.dapr.testcontainers.MetadataEntry;
2526
import io.quarkiverse.dapr.config.DaprDevServiceBuildTimeConfig;
2627
import io.quarkus.deployment.IsNormal;
2728
import io.quarkus.deployment.annotations.BuildStep;
@@ -126,7 +127,7 @@ private DevServicesResultBuildItem.RunningDevService startDapr(
126127
DaprContainer dapr = new DaprContainer(config.daprdImage())
127128
.withAppName("local-dapr-app")
128129
.withAppPort(QuarkusPorts.http(launchModeTest))
129-
.withDaprLogLevel(DaprContainer.DaprLogLevel.debug)
130+
.withDaprLogLevel(DaprLogLevel.DEBUG)
130131
.withAppChannelAddress("host.testcontainers.internal");
131132

132133
Yaml yaml = new Yaml();
@@ -148,8 +149,8 @@ private DevServicesResultBuildItem.RunningDevService startDapr(
148149

149150
dapr.start();
150151

151-
System.setProperty(DAPR_GRPC_PORT_PROPERTY, Integer.toString(dapr.getGRPCPort()));
152-
System.setProperty(DAPR_HTTP_PORT_PROPERTY, Integer.toString(dapr.getHTTPPort()));
152+
System.setProperty(DAPR_GRPC_PORT_PROPERTY, Integer.toString(dapr.getGrpcPort()));
153+
System.setProperty(DAPR_HTTP_PORT_PROPERTY, Integer.toString(dapr.getHttpPort()));
153154

154155
return new DevServicesResultBuildItem.RunningDevService(FEATURE,
155156
dapr.getContainerId(),
@@ -203,13 +204,15 @@ private static Optional<Component> tryGenerateComponentFromFile(Yaml yaml, Path
203204
Map<String, Object> map = yaml.load(componentAsString);
204205

205206
Map<String, Object> spec = (Map<String, Object>) map.get("spec");
207+
String version = (String) spec.get("version");
208+
206209
String type = (String) spec.get("type");
207210
Map<String, Object> metadata = (Map<String, Object>) map
208211
.get("metadata");
209212
String name = (String) metadata.get("name");
210213
List<Map<String, Object>> specMetadata = (List<Map<String, Object>>) spec
211214
.getOrDefault("metadata", Collections.emptyMap());
212-
ArrayList<MetadataEntry> metadataEntries = new ArrayList<>();
215+
List<MetadataEntry> metadataEntries = new ArrayList<>();
213216

214217
for (Map<String, Object> specMetadataItem : specMetadata) {
215218
String metadataItemName = (String) specMetadataItem.get("name");
@@ -219,7 +222,7 @@ private static Optional<Component> tryGenerateComponentFromFile(Yaml yaml, Path
219222
.add(new MetadataEntry(metadataItemName,
220223
metadataItemValue));
221224
}
222-
return Optional.of(new Component(name, type, metadataEntries));
225+
return Optional.of(new Component(name, type, version, metadataEntries));
223226
}
224227

225228
private static Network getNetwork() {

integration-tests/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@
2828
<artifactId>rest-assured</artifactId>
2929
<scope>test</scope>
3030
</dependency>
31+
<dependency>
32+
<groupId>io.quarkus</groupId>
33+
<artifactId>quarkus-devtools-testing</artifactId>
34+
<scope>test</scope>
35+
</dependency>
3136
</dependencies>
3237
<build>
3338
<plugins>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package codestarts;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
6+
import io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartCatalog;
7+
import io.quarkus.devtools.testing.codestarts.QuarkusCodestartTest;
8+
9+
public class QuarkusDaprCodestartsTest {
10+
11+
@RegisterExtension
12+
public static QuarkusCodestartTest codestartTest = QuarkusCodestartTest.builder()
13+
.languages(QuarkusCodestartCatalog.Language.JAVA)
14+
.setupStandaloneExtensionTest("io.quarkiverse.dapr:quarkus-dapr")
15+
.build();
16+
17+
@Test
18+
void testContent() throws Throwable {
19+
codestartTest.checkGeneratedSource("org.acme.DaprResource");
20+
}
21+
22+
@Test
23+
void testFile() throws Throwable {
24+
codestartTest
25+
.assertThatGeneratedFile(QuarkusCodestartCatalog.Language.JAVA,
26+
"src/main/java/ilove/quark/us/DaprResource.java")
27+
.content()
28+
.contains("@Path");
29+
}
30+
31+
@Test
32+
void buildAllProjects() throws Throwable {
33+
codestartTest.buildAllProjects();
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package ilove.quark.us;
2+
3+
import io.dapr.Topic;
4+
import io.dapr.client.domain.CloudEvent;
5+
import io.dapr.client.domain.State;
6+
import io.quarkiverse.dapr.core.SyncDaprClient;
7+
import jakarta.inject.Inject;
8+
import jakarta.ws.rs.GET;
9+
import jakarta.ws.rs.POST;
10+
import jakarta.ws.rs.Path;
11+
import jakarta.ws.rs.core.Response;
12+
import java.util.Map;
13+
import java.util.UUID;
14+
15+
@Path("/dapr")
16+
public class DaprResource {
17+
18+
@Inject
19+
SyncDaprClient client;
20+
21+
@POST
22+
@Path("/state")
23+
public Response saveState() {
24+
client.saveState("kvstore", "identity", UUID.randomUUID().toString());
25+
return Response.ok().build();
26+
}
27+
28+
@GET
29+
@Path("/state")
30+
public Response getState() {
31+
State<String> state = client.getState("kvstore", "identity", String.class);
32+
return Response.ok(Map.of("identity", state.getValue())).build();
33+
}
34+
35+
@POST
36+
@Path("/pub")
37+
public void pub() {
38+
client.publishEvent("pubsub", "topicName", "Hello from Quarkus!");
39+
}
40+
41+
@POST
42+
@Topic(name = "topicName")
43+
@Path("/sub")
44+
public void sub(CloudEvent<String> event) {
45+
System.out.println("Received event: " + event.getData());
46+
}
47+
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<maven.compiler.release>11</maven.compiler.release>
2727
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2828
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
29-
<quarkus.version>3.19.3</quarkus.version>
29+
<quarkus.version>3.21.0</quarkus.version>
3030
<dapr.version>1.14.0</dapr.version>
3131
<okhttp.version>4.12.0</okhttp.version>
3232
<assertj.version>3.27.3</assertj.version>

runtime/pom.xml

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
<artifactId>quarkus-dapr-parent</artifactId>
77
<version>999-SNAPSHOT</version>
88
</parent>
9-
<properties>
10-
<testcontainers-dapr.version>0.10.14</testcontainers-dapr.version>
11-
</properties>
129
<artifactId>quarkus-dapr</artifactId>
1310
<name>Quarkus - Dapr - Runtime</name>
1411
<dependencies>
@@ -42,11 +39,6 @@
4239
<groupId>io.dapr</groupId>
4340
<artifactId>dapr-sdk-actors</artifactId>
4441
</dependency>
45-
<dependency>
46-
<groupId>io.diagrid.dapr</groupId>
47-
<artifactId>testcontainers-dapr</artifactId>
48-
<version>${testcontainers-dapr.version}</version>
49-
</dependency>
5042
</dependencies>
5143
<build>
5244
<plugins>
@@ -83,6 +75,26 @@
8375
</annotationProcessorPaths>
8476
</configuration>
8577
</plugin>
78+
<plugin>
79+
<artifactId>maven-jar-plugin</artifactId>
80+
<executions>
81+
<execution>
82+
<id>generate-codestart-jar</id>
83+
<phase>generate-resources</phase>
84+
<goals>
85+
<goal>jar</goal>
86+
</goals>
87+
<configuration>
88+
<classesDirectory>${project.basedir}/src/main</classesDirectory>
89+
<includes>
90+
<include>codestarts/**</include>
91+
</includes>
92+
<classifier>codestarts</classifier>
93+
<skipIfEmpty>true</skipIfEmpty>
94+
</configuration>
95+
</execution>
96+
</executions>
97+
</plugin>
8698
</plugins>
8799
</build>
88100
</project>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
name: quarkus-dapr-codestart
2+
ref: quarkus-dapr
3+
type: code
4+
tags: extension-codestart
5+
metadata:
6+
title: Dapr Extension Codestart
7+
description: This codestart generates a Quarkus Dapr Extension
8+
related-guide-section: https://docs.quarkiverse.io/quarkus-dapr/dev/index.html
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.acme;
2+
3+
import io.dapr.Topic;
4+
import io.dapr.client.domain.CloudEvent;
5+
import io.dapr.client.domain.State;
6+
import io.quarkiverse.dapr.core.SyncDaprClient;
7+
import jakarta.inject.Inject;
8+
import jakarta.ws.rs.GET;
9+
import jakarta.ws.rs.POST;
10+
import jakarta.ws.rs.Path;
11+
import jakarta.ws.rs.core.Response;
12+
import java.util.Map;
13+
import java.util.UUID;
14+
15+
@Path("/dapr")
16+
public class DaprResource {
17+
18+
@Inject
19+
SyncDaprClient client;
20+
21+
@POST
22+
@Path("/state")
23+
public Response saveState() {
24+
client.saveState("kvstore", "identity", UUID.randomUUID().toString());
25+
return Response.ok().build();
26+
}
27+
28+
@GET
29+
@Path("/state")
30+
public Response getState() {
31+
State<String> state = client.getState("kvstore", "identity", String.class);
32+
return Response.ok(Map.of("identity", state.getValue())).build();
33+
}
34+
35+
@POST
36+
@Path("/pub")
37+
public void pub() {
38+
client.publishEvent("pubsub", "topicName", "Hello from Quarkus!");
39+
}
40+
41+
@POST
42+
@Topic(name = "topicName")
43+
@Path("/sub")
44+
public void sub(CloudEvent<String> event) {
45+
System.out.println("Received event: " + event.getData());
46+
}
47+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{#include readme-header /}

0 commit comments

Comments
 (0)