blob: b44243a210fa845a350b88693933596c845d919e [file] [log] [blame]
/*
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.
*/
package cmd
import (
"context"
"fmt"
"os"
"os/exec"
"path"
"strings"
)
var (
ctx9, cancel9 = context.WithCancel(context.Background()) // preemptive: kill subprocess
ctx, cancel = context.WithCancel(ctx9) // cooperative: wait for subprocess
)
func formatRoutes(files []string) []string {
routes := []string{}
for _, route := range files {
// Split route path.
a := strings.Split(route, ".")
// Extract extension.
extension := a[len(a)-1]
// Add file if extension is supported.
routes = append(routes, "file:"+route+"?language="+extension)
}
return routes
}
func confDirectories(properties []string) []string {
confDirs := []string{}
for _, propertiesPath := range properties {
confDirs = append(confDirs, path.Dir(propertiesPath))
}
return confDirs
}
func assembleClasspatchArgValue(properties []string, dependencies []string, routes []string) string {
classpathContents := []string{}
classpathContents = append(classpathContents, properties...)
classpathContents = append(classpathContents, routes...)
classpathContents = append(classpathContents, dependencies...)
return strings.Join(classpathContents, ":")
}
// RunLocalIntegration --
func RunLocalIntegration(properties []string, dependencies []string, routes []string) error {
// Create classpath value.
classpathValue := assembleClasspatchArgValue(properties, dependencies, routes)
// Create java command that runs the integration.
javaCmd := "java"
// Create java command arguments.
args := make([]string, 0)
args = append(args, "-cp")
args = append(args, classpathValue)
args = append(args, "io.quarkus.runner.GeneratedMain")
cmd := exec.CommandContext(ctx, javaCmd, args...)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
fmt.Printf("executing: %s", strings.Join(cmd.Args, " "))
// Add directory where the properties file resides.
cmd.Env = append(cmd.Env, "CAMEL_K_CONF_D="+strings.Join(confDirectories(properties), ","))
// Add files to the command line under the CAMEL_K_ROUTES flag.
cmd.Env = append(cmd.Env, "CAMEL_K_ROUTES="+strings.Join(formatRoutes(routes), ","))
return cmd.Run()
}