diff --git a/runners/portability/java/build.gradle b/runners/portability/java/build.gradle index 9830b48c83ad..e69d0827a7af 100644 --- a/runners/portability/java/build.gradle +++ b/runners/portability/java/build.gradle @@ -54,6 +54,9 @@ dependencies { validatesRunner project(path: project.path, configuration: "testRuntimeMigration") } +// Set using -PjobEndpoint=, for example: -PjobEndpoint=localhost:8073 +def jobEndpointPropertyName = "jobEndpoint" + project.evaluationDependsOn(":sdks:java:core") project.evaluationDependsOn(":sdks:python") project.evaluationDependsOn(":runners:core-java") @@ -61,7 +64,7 @@ project.evaluationDependsOn(":runners:core-java") ext.pythonSdkDir = project.findProject(":sdks:python").getProjectDir().getAbsoluteFile().toString() // If this is set via -P then we assume it is already running and will not start it -def needsLocalJobService = !project.hasProperty("localJobServicePortFile") +def needsLocalJobService = !project.hasProperty("localJobServicePortFile") && !project.hasProperty(jobEndpointPropertyName) ext.localJobServicePortFile = project.hasProperty("localJobServicePortFile") ? project.property("localJobServicePortFile") : "${project.buildDir}/local_job_service_port" @@ -139,11 +142,15 @@ def createUlrValidatesRunnerTask = { name, environmentType, dockerImageTask = "" Task vrTask = tasks.create(name: name, type: Test, group: "Verification") { description "PortableRunner Java docker ValidatesRunner suite" classpath = configurations.validatesRunner + var jobEndpointOption = "--localJobServicePortFile=$localJobServicePortFile" + if (project.hasProperty(jobEndpointPropertyName)) { + jobEndpointOption = "--$jobEndpointPropertyName=${project.findProperty(jobEndpointPropertyName)}" + } systemProperty "beamTestPipelineOptions", JsonOutput.toJson([ "--runner=TestUniversalRunner", "--experiments=beam_fn_api", "--defaultEnvironmentType=${environmentType}", - "--localJobServicePortFile=${localJobServicePortFile}" + jobEndpointOption ]) testClassesDirs = files(project(":sdks:java:core").sourceSets.test.output.classesDirs) useJUnit { diff --git a/runners/prism/build.gradle b/runners/prism/build.gradle new file mode 100644 index 000000000000..7169f91ea156 --- /dev/null +++ b/runners/prism/build.gradle @@ -0,0 +1,65 @@ +/* + * 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. + */ + +plugins { id 'org.apache.beam.module' } +applyGoNature() + +description = "Apache Beam :: Runners :: Prism" +ext.summary = "Tasks related to executing the Prism Runner" + +// jobPort Property optionally configures the Prism job_port flag. +def jobPort = findProperty("jobPort") + +// jobPortFlag is Prism service's job management service port flag name. +def jobPortFlag = "job_port" + +// buildTarget is the go build output target path for the Prism service. +def buildTarget = layout.buildDirectory.get().file("tmp/prism") + +// modDir is the path containing the go.mod file. +def modDir = project.rootDir.toPath().resolve("sdks") + +// prismDir is the directory containing the prism executable. +def prismDir = modDir.resolve("go/cmd/prism") + +// Overrides the gradle build task to build the prism executable. +def buildTask = tasks.named("build") { + // goPrepare is a task registered in applyGoNature. + dependsOn("goPrepare") + doLast { + exec { + workingDir = modDir + executable = 'sh' + args = ["-c", "${project.ext.goCmd} build -o $buildTarget $prismDir"] + } + } +} + +tasks.register("runServer", Exec) { + dependsOn(buildTask) + group = "application" + description = "Run the Prism server" + + List command = new ArrayList<>() + command.add(buildTarget.asFile.path) + if (jobPort != null) { + command.add("-$jobPortFlag=$jobPort" as String) + } + + commandLine = command +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 330c45e45a0b..bbd0eeddcac2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -148,6 +148,7 @@ include(":runners:java-job-service") include(":runners:jet") include(":runners:local-java") include(":runners:portability:java") +include(":runners:prism") include(":runners:spark:3") include(":runners:spark:3:job-server") include(":runners:spark:3:job-server:container")