Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ mise.toml

# Ignore Gradle build output directory
workers/java/bin
workers/java/build
workers/java/**/build

/loadgen/kitchen-sink-gen/target/

Expand Down
19 changes: 19 additions & 0 deletions cmd/dev/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ func runTestWorker(ctx context.Context, language string) error {
if err := runPythonHarnessTests(ctx, repoDir); err != nil {
return err
}
} else if language == "java" {
if err := runJavaHarnessTests(ctx, repoDir); err != nil {
return err
}
}
if language == "dotnet" {
if err := runDotnetHarnessTests(ctx, repoDir); err != nil {
Expand Down Expand Up @@ -158,6 +162,21 @@ func runRubyHarnessTests(ctx context.Context, repoDir string) error {
return nil
}

func runJavaHarnessTests(ctx context.Context, repoDir string) error {
harnessDir := filepath.Join(repoDir, "workers", "java")
fmt.Println("Running Java harness tests...")
if err := runCommandInDir(
ctx,
harnessDir,
"./gradlew",
":harness:test",
); err != nil {
return fmt.Errorf("failed Java harness tests: %w", err)
}
fmt.Println("✅ Java harness tests completed successfully!")
return nil
}

func testWorkerLocally(ctx context.Context, repoDir, language, sdkVersion string) error {
args := []string{
"go", "run", "./cmd", "run-scenario-with-worker",
Expand Down
2 changes: 2 additions & 0 deletions dockerfiles/java.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ ARG SDK_DIR=.gitignore
COPY ${SDK_DIR} ./repo

# Copy the worker files
COPY workers/proto ./workers/proto
COPY workers/java ./workers/java

# Download Gradle using wrapper to cache it in build layer
Expand All @@ -51,6 +52,7 @@ RUN apt-get update && apt-get install --no-install-recommends --assume-yes git &
ENV GRADLE_USER_HOME="/gradle"

COPY --from=build /app/temporal-omes /app/temporal-omes
COPY --from=build /app/workers/proto/harness /app/workers/proto/harness
COPY --from=build /app/workers/java /app/workers/java
COPY --from=build /app/repo /app/repo
COPY --from=build /gradle /gradle
Expand Down
31 changes: 16 additions & 15 deletions workers/java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,27 @@ plugins {
id 'com.diffplug.spotless' version '6.18.0'
}

group 'io.temporal'
version '0.1.0'
allprojects {
group 'io.temporal'
version '0.1.0'

java {
sourceCompatibility = JavaVersion.VERSION_1_10
targetCompatibility = JavaVersion.VERSION_1_10
}
repositories {
mavenCentral()
}

repositories {
mavenCentral()
plugins.withType(JavaPlugin) {
java {
sourceCompatibility = JavaVersion.VERSION_1_10
targetCompatibility = JavaVersion.VERSION_1_10
}
}
}

spotless {
java {
target project.fileTree(project.rootDir) {
include '**/*.java'
exclude '**/build/**'
exclude 'io/temporal/omes/KitchenSink.java'
}
googleJavaFormat('1.22.0')
Expand All @@ -28,28 +33,24 @@ spotless {
compileJava.dependsOn spotlessJava

dependencies {
implementation 'ch.qos.logback:logback-classic:1.2.13'
implementation project(':harness')
implementation 'com.google.guava:guava:31.0.1-jre'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.jayway.jsonpath:json-path:2.6.0'
implementation 'info.picocli:picocli:4.6.2'
implementation 'io.temporal:temporal-sdk:1.34.0'
implementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
implementation 'org.reflections:reflections:0.10.2'
implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
implementation "io.micrometer:micrometer-registry-prometheus"

implementation(platform("com.fasterxml.jackson:jackson-bom:2.15.2"))
implementation "com.fasterxml.jackson.core:jackson-databind"
implementation "com.fasterxml.jackson.core:jackson-core"
implementation 'com.google.protobuf:protobuf-java:3.25.0'
implementation 'com.google.protobuf:protobuf-java:3.25.5'
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
}

sourceSets {
main {
java {
srcDirs = ['io/temporal/omes']
exclude '**/build/**'
}
}
}
54 changes: 54 additions & 0 deletions workers/java/harness/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
plugins {
id 'java'
id 'com.google.protobuf' version '0.9.4'
}

compileJava.dependsOn generateProto

dependencies {
compileOnly 'io.temporal:temporal-sdk:1.34.0'

implementation 'ch.qos.logback:logback-classic:1.2.13'
implementation 'com.google.protobuf:protobuf-java:3.25.5'
implementation 'info.picocli:picocli:4.6.2'
implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
implementation 'io.micrometer:micrometer-registry-prometheus'

testImplementation 'io.temporal:temporal-testing:1.34.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

sourceSets {
main {
proto {
srcDirs = ['../../proto/harness/api']
include 'api.proto'
}
}
}

protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.25.5'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.75.0'
}
}
generateProtoTasks {
all().configureEach { task ->
task.builtins {
java {}
}
task.plugins {
grpc {}
}
}
}
}

test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package io.temporal.omes.harness;

import java.util.Arrays;
import java.util.Objects;

public final class Harness {
private Harness() {}

public static void run(App app, String... argv) throws Exception {
if (argv.length == 0) {
throw new IllegalArgumentException(
"No command specified. Expected 'worker' or 'project-server'");
}

if ("worker".equals(argv[0])) {
WorkerHarness.runWorkerCli(
app.worker, app.clientFactory, Arrays.copyOfRange(argv, 1, argv.length));
return;
}

if ("project-server".equals(argv[0])) {
if (app.project == null) {
throw new IllegalStateException(
"Wanted project-server but no project handlers registered for this app");
}
ProjectHarness.runProjectServerCli(
app.project, app.clientFactory, Arrays.copyOfRange(argv, 1, argv.length));
return;
}

throw new IllegalArgumentException(
String.format("Unknown command: [%s]. Expected 'worker' or 'project-server'", argv[0]));
}

public static final class App {
public final WorkerHarness.WorkerRegistrar worker;
public final HarnessClients.ClientFactory clientFactory;
public final ProjectHarness.ProjectHandlers project;

public App(WorkerHarness.WorkerRegistrar worker, HarnessClients.ClientFactory clientFactory) {
this(worker, clientFactory, null);
}

public App(
WorkerHarness.WorkerRegistrar worker,
HarnessClients.ClientFactory clientFactory,
ProjectHarness.ProjectHandlers project) {
this.worker = Objects.requireNonNull(worker);
this.clientFactory = Objects.requireNonNull(clientFactory);
this.project = project;
}
}
}
Loading
Loading