From 35ce2f3fdbe610fe5db9f246aca69e09dc3b7864 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 14 Oct 2024 18:33:19 +0200 Subject: [PATCH] Add settings to open container terminal as root --- README.md | 4 +++- package.json | 5 +++++ src/taskProvider.ts | 10 ++++++++-- src/treeView.ts | 10 ++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a6d9aa3..3e4aa92 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,11 @@ This extension contributes the following settings: * `ledgerDevTools.onboardingPin`: Set the device quick onboarding PIN code. * `ledgerDevTools.onboardingSeed`: Set the device quick onboarding 24-word Seed phrase. * `ledgerDevTools.dockerImage`: Set the Ledger developer tools Docker image. -* `ledgerDevTools.dockerRunArgs`: Any additional command line args to pass to the `docker run` command for the Ledger developer tools Docker image. +* `ledgerDevTools.dockerRunArgs`: Any additional command line args to pass to the `docker run` + command for the Ledger developer tools Docker image. * `ledgerDevTools.additionalReqsPerApp`: Add prerequisites for current app's functional tests (for instance 'apk add python3-protobuf'). * `ledgerDevTools.keepTerminal`: Indicates to keep the Terminal window opened after a successful task execution. +* `ledgerDevTools.openContainerAsRoot`: Open docker container using `root`:`root` user. * `ledgerDevTools.containerUpdateRetries`: Set the max number of Container Update retries. * `ledgerDevTools.userScpPrivateKey`: Use the host's `SCP_PRIVKEY` environment variable when loading/deleting app on device. Cf. diff --git a/package.json b/package.json index 0c858db..a160ed7 100644 --- a/package.json +++ b/package.json @@ -194,6 +194,11 @@ "default": true, "markdownDescription": "Keep the Terminal window opened after a successful task execution." }, + "ledgerDevTools.openContainerAsRoot": { + "type": "boolean", + "default": true, + "markdownDescription": "Open docker container using root user." + }, "ledgerDevTools.containerUpdateRetries": { "type": "number", "default": 5, diff --git a/src/taskProvider.ts b/src/taskProvider.ts index cd7e0ae..e6a3a9e 100644 --- a/src/taskProvider.ts +++ b/src/taskProvider.ts @@ -383,7 +383,13 @@ export class TaskProvider implements vscode.TaskProvider { private openTerminalExec(): string { // Get the Selected target SDK to export inside the container let sdk: string = this.tgtSelector.getSelectedSDK(); - const exec = `docker exec -it -u 0 -e "BOLOS_SDK=${sdk}" ${this.containerName} bash`; + let userOpt: string = ""; + // Get settings to open terminal as root or not + const conf = vscode.workspace.getConfiguration("ledgerDevTools"); + if (conf.get("openContainerAsRoot") === true) { + userOpt = `-u 0`; + } + const exec = `docker exec -it ${userOpt} -e "BOLOS_SDK=${sdk}" ${this.containerName} bash`; return exec; } @@ -557,7 +563,7 @@ export class TaskProvider implements vscode.TaskProvider { console.log(`Ledger: Installing additional dependencies : ${addReqsExec}`); } const reqFilePath = this.functionalTestsDir + "/requirements.txt"; - const exec = `docker exec -it -u 0 ${this.containerName} bash -c '${addReqsExec} [ -f ${reqFilePath} ] && pip install -r ${reqFilePath}'`; + const exec = `docker exec -it -u 0 ${this.containerName} bash -c '${addReqsExec} [ -f ${reqFilePath} ] && pip install -r ${reqFilePath}'`; return exec; } diff --git a/src/treeView.ts b/src/treeView.ts index 2fc7c59..c08359b 100644 --- a/src/treeView.ts +++ b/src/treeView.ts @@ -185,6 +185,16 @@ export class TreeDataProvider implements vscode.TreeDataProvider { let buidUseCaseItem = this.data.find((item) => item.label && item.label.toString().startsWith("Build")); let selectVariantItem = this.data.find((item) => item.label && item.label.toString().startsWith("Select variant")); + this.data.forEach((item) => { + if (item.label?.toString().startsWith("Docker Container")) { + const terminalItem = item.children?.find((child) => child.label && child.label.toString().startsWith("Open terminal")); + if (terminalItem) { + const conf = vscode.workspace.getConfiguration("ledgerDevTools"); + terminalItem.label = conf.get("openContainerAsRoot") ? "Open terminal [root]" : "Open terminal"; + } + } + }); + if (selectAppItem) { selectAppItem.label = `Select app [${currentApp.folderName}]`; }