This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit c70c1bd1c68ed17f3c50c37e83e2740f9374743e Author: Marat Gubaidullin <[email protected]> AuthorDate: Wed Oct 19 21:41:10 2022 -0400 Deploy project --- karavan-vscode/package.json | 58 +++++++++++++++++++++++++++++------------ karavan-vscode/src/extension.ts | 8 +++++- karavan-vscode/src/jbang.ts | 54 ++++++++++++++++++++++++++++++++------ karavan-vscode/src/utils.ts | 2 +- 4 files changed, 95 insertions(+), 27 deletions(-) diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json index 85e9a13..6db1b1e 100644 --- a/karavan-vscode/package.json +++ b/karavan-vscode/package.json @@ -42,6 +42,7 @@ "onCommand:karavan.create-crd", "onCommand:karavan.create-yaml", "onCommand:karavan.create-application", + "onCommand:karavan.deploy", "onCommand:karavan.open", "onCommand:karavan.open-file", "onCommand:karavan.jbang-run-file", @@ -186,7 +187,7 @@ "type": "string" }, "default": [ - "quarkus.container-image.group=${KUBERNETES_NAMESPACE}", + "quarkus.container-image.group=${NAMESPACE}", "quarkus.container-image.name=$NAME", "quarkus.container-image.builder=jib", "quarkus.container-image.build=true", @@ -212,7 +213,7 @@ "quarkus.kubernetes.labels.\"app.openshift.io/runtime\"=camel", "quarkus.kubernetes-client.trust-certs=true", "quarkus.kubernetes-client.master-url=kubernetes.default.svc", - "quarkus.kubernetes-client.namespace=${KUBERNETES_NAMESPACE}", + "quarkus.kubernetes-client.namespace=${NAMESPACE}", "quarkus.kubernetes-client.token=${TOKEN}", "quarkus.openshift.deployment-kind=Deployment", "quarkus.openshift.add-version-to-label-selectors=false", @@ -268,6 +269,11 @@ "title": "Karavan: Export", "icon": "$(export)" }, + { + "command": "karavan.deploy", + "title": "Karavan: Deploy", + "icon": "$(layers)" + }, { "command": "karavan.generate-rest", "title": "Karavan: Generate REST API" @@ -303,35 +309,48 @@ "explorer/context": [ { "command": "karavan.create-crd", - "when": "explorerResourceIsFolder || explorerResourceIsRoot" + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@1" }, { "command": "karavan.create-yaml", - "when": "explorerResourceIsFolder || explorerResourceIsRoot" + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@2" }, { "command": "karavan.create-application", - "when": "explorerResourceIsFolder || explorerResourceIsRoot" + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@3" }, { "command": "karavan.open", - "when": "resourceExtname == .yaml" + "when": "resourceExtname == .yaml", + "group": "karavan@4" }, { "command": "karavan.jbang-run-file", - "when": "resourceExtname == .yaml" + "when": "resourceExtname == .yaml", + "group": "karavan@5" }, { "command": "karavan.jbang-run-project", - "when": "explorerResourceIsFolder || explorerResourceIsRoot" + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@6" }, { "command": "karavan.jbang-export", - "when": "explorerResourceIsFolder || explorerResourceIsRoot" + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@7" + }, + { + "command": "karavan.deploy", + "when": "explorerResourceIsFolder || explorerResourceIsRoot", + "group": "karavan@8" }, { "command": "karavan.generate-rest", - "when": "resourceExtname == .json" + "when": "resourceExtname == .json", + "group": "karavan@9" } ], "editor/title": [ @@ -348,24 +367,29 @@ ], "view/title": [ { - "command": "integrations.refresh", + "command": "karavan.jbang-run-project", "when": "view == integrations", - "group": "navigation@4" + "group": "navigation@1" }, { - "command": "karavan.jbang-run-project", + "command": "karavan.deploy", "when": "view == integrations", - "group": "navigation@1" + "group": "navigation@2" }, { - "command": "karavan.create-crd", + "command": "karavan.jbang-export", "when": "view == integrations", "group": "navigation@3" }, { - "command": "karavan.jbang-export", + "command": "karavan.create-crd", "when": "view == integrations", - "group": "navigation@2" + "group": "navigation@4" + }, + { + "command": "integrations.refresh", + "when": "view == integrations", + "group": "navigation@5" }, { "command": "openapi.refresh", diff --git a/karavan-vscode/src/extension.ts b/karavan-vscode/src/extension.ts index bef26f8..8b54520 100644 --- a/karavan-vscode/src/extension.ts +++ b/karavan-vscode/src/extension.ts @@ -145,6 +145,12 @@ export function activate(context: ExtensionContext) { }); context.subscriptions.push(exportCommand); + // Deploy project + const deployCommand = commands.registerCommand("karavan.deploy", (...args: any[]) => { + jbang.camelDeploy(rootPath + path.sep + ".export"); + }); + context.subscriptions.push(deployCommand); + // Run Integration in designer command const run = commands.registerCommand("karavan.jbang-run-file", (...args: any[]) => designer.jbangRun(args[0].fsPath)); context.subscriptions.push(run); @@ -155,7 +161,7 @@ export function activate(context: ExtensionContext) { }); context.subscriptions.push(runProjectCommand); - // Generate RST API from OpenAPI specification command + // Generate REST API from OpenAPI specification command const generateOptions = ["Create new CRD", "Create new YAML", "Add to existing file"]; const generateRest = commands.registerCommand('karavan.generate-rest', async (...args: any[]) => { const openApi: OpenApiItem = args[0]; diff --git a/karavan-vscode/src/jbang.ts b/karavan-vscode/src/jbang.ts index 612e583..c9e3c02 100644 --- a/karavan-vscode/src/jbang.ts +++ b/karavan-vscode/src/jbang.ts @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { workspace, window, Terminal } from "vscode"; +import { workspace, window, Terminal, ThemeIcon } from "vscode"; import * as path from "path"; import * as shell from 'shelljs'; import { CamelDefinitionYaml } from "core/api/CamelDefinitionYaml"; @@ -23,7 +23,7 @@ import * as utils from "./utils"; const TERMINALS: Map<string, Terminal> = new Map<string, Terminal>(); export async function camelJbangGenerate(rootPath: string, openApiFullPath: string, fullPath: string, add: boolean, crd?: boolean, generateRoutes?: boolean) { - let command = prepareCommand("generate rest -i " + openApiFullPath); + let command = prepareCommand("generate rest -i " + openApiFullPath); if (generateRoutes === true) command = command + " --routes"; executeJbangCommand(rootPath, command, (code, stdout, stderr) => { console.log('Exit code:', code); @@ -80,7 +80,7 @@ export function camelJbangRun(filename?: string) { const maxMessages: number = workspace.getConfiguration().get("camel.maxMessages") || -1; const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath"); const dev: boolean = workspace.getConfiguration().get("camel.dev") || false; - const cmd = (filename ? "run " + filename : "run * ") + const cmd = (filename ? "run " + filename : "run * ") + (maxMessages > -1 ? " --max-messages=" + maxMessages : "") + (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : ""); const command = prepareCommand(cmd) + (dev === true ? " --dev" : ""); @@ -94,19 +94,57 @@ export function camelJbangRun(filename?: string) { } export function camelJbangExport(directory: string) { - const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath"); - const cmd = "export --directory=" + directory - + (kameletsPath && kameletsPath.trim().length >0 ? " --local-kamelet-dir=" + kameletsPath : ""); - const command = prepareCommand(cmd); + const command = createExportCommand(directory); const terminalId = "export"; const existTerminal = TERMINALS.get(terminalId); if (existTerminal) existTerminal.dispose(); - const terminal = window.createTerminal('Camel export'); + const terminal = window.createTerminal('export'); TERMINALS.set(terminalId, terminal); terminal.show(); terminal.sendText(command); } +export function createExportCommand(directory: string) { + const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath"); + const cmd = "export --directory=" + directory + + (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : ""); + return prepareCommand(cmd); +} + +export function camelDeploy(directory: string) { + const command = createExportCommand(directory).concat(" && ").concat(createPackageCommand(directory)); + + utils.readFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace") + .then((readData: Uint8Array) => { + const namespace = Buffer.from(readData).toString('utf8'); + utils.readFile("/var/run/secrets/kubernetes.io/serviceaccount/token") + .then((readData: Uint8Array) => { + const token = Buffer.from(readData).toString('utf8'); + const env = { "TOKEN":token, "NAMESPACE": namespace, "DATE": Date.now().toString() }; + camelRunDeploy(command, env); + + }).catch((reason: any) => { + window.showErrorMessage("Token file not found. Set TOKEN environment variable!\n" + reason.message); + }); + }).catch((reason: any) => { + window.showErrorMessage("Namespace file not found. Set NAMESPACE environment variable!\n" + reason.message); + }); +} + +export function camelRunDeploy(command: string, env?: { [key: string]: string | null | undefined }) { + const terminalId = "deploy"; + const existTerminal = TERMINALS.get(terminalId); + if (existTerminal) existTerminal.dispose(); + const terminal = window.createTerminal({ name: terminalId, env: env, iconPath: new ThemeIcon("layers") }); + TERMINALS.set(terminalId, terminal); + terminal.show(); + terminal.sendText(command); +} + +export function createPackageCommand(directory: string) { + return "mvn clean package -f " + directory; +} + function executeJbangCommand(rootPath: string, command: string, callback: (code: number, stdout: any, stderr: any) => any) { console.log("excute command", command) const jbang = shell.which('jbang'); diff --git a/karavan-vscode/src/utils.ts b/karavan-vscode/src/utils.ts index 7949a46..e498e63 100644 --- a/karavan-vscode/src/utils.ts +++ b/karavan-vscode/src/utils.ts @@ -221,7 +221,7 @@ export async function createApplicationproperties(runtime: string, gav: string, const runtimeDefaults: [] = (runtime === 'quarkus') ? workspace.getConfiguration().get("Karavan.quarkusApplicationProperties") || [] : []; - const text = props.concat(runtimeDefaults).concat(imageBuildProps).concat(targetProps).map(v => { + const text = props.concat(runtimeDefaults).concat("\n").concat(imageBuildProps).concat("\n").concat(targetProps).map(v => { if (v.includes('$NAME')) return v.replace('$NAME', name) else if (v.includes('$GAV')) return v.replace('$GAV', gav) else if (v.includes('$RUNTIME_VERSION')) return v.replace('$RUNTIME_VERSION', runtimeVersion) // $RUNTIME_VERSION should be before $RUNTIME
