From 86c102ac87c8c53a5d812b2a32f04f3992574613 Mon Sep 17 00:00:00 2001 From: Salvatore Ingala <6681844+bigspider@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:11:51 +0200 Subject: [PATCH 1/3] Add 'dockerRunArgs' setting --- package.json | 5 +++++ src/taskProvider.ts | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 311600e..db93825 100644 --- a/package.json +++ b/package.json @@ -165,6 +165,11 @@ "default": "ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest", "description": "Ledger developer tools Docker image." }, + "ledgerDevTools.dockerRunArgs": { + "type": "string", + "default": "", + "description": "Additional arguments to pass to the 'docker run' command for the Ledger developer tools Docker image." + }, "ledgerDevTools.onboardingPin": { "type": "string", "default": "1234", diff --git a/src/taskProvider.ts b/src/taskProvider.ts index 355edc6..cacb1e0 100644 --- a/src/taskProvider.ts +++ b/src/taskProvider.ts @@ -276,18 +276,21 @@ export class TaskProvider implements vscode.TaskProvider { private runDevToolsImageExec(): string { let exec = ""; + const conf = vscode.workspace.getConfiguration("ledgerDevTools"); + const dockerRunArgs = conf.get("dockerRunArgs"); + if (this.currentApp) { // Checks if a container with the name ${this.containerName} exists, and if it does, it is stopped and removed before a new container is created using the same name and other specified configuration parameters if (platform === "linux") { // Linux - exec = `docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY=$DISPLAY -v '/dev/bus/usb:/dev/bus/usb' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' -t -d --name ${this.containerName} ${this.image}`; + exec = `docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY=$DISPLAY -v '/dev/bus/usb:/dev/bus/usb' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } else if (platform === "darwin") { // macOS - exec = `xhost + ; docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY='host.docker.internal:0' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' -t -d --name ${this.containerName} ${this.image}`; + exec = `xhost + ; docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY='host.docker.internal:0' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } else { // Assume windows const winWorkspacePath = this.workspacePath.substring(1); // Remove first '/' from windows workspace path URI. Otherwise it is not valid. - exec = `if (docker ps -a --format '{{.Names}}' | Select-String -Quiet ${this.containerName}) { docker container stop ${this.containerName}; docker container rm ${this.containerName} }; docker pull ${this.image}; docker run --privileged -e DISPLAY='host.docker.internal:0' -v '${winWorkspacePath}:/app' -t -d --name ${this.containerName} ${this.image}`; + exec = `if (docker ps -a --format '{{.Names}}' | Select-String -Quiet ${this.containerName}) { docker container stop ${this.containerName}; docker container rm ${this.containerName} }; docker pull ${this.image}; docker run --privileged -e DISPLAY='host.docker.internal:0' -v '${winWorkspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } } From 0eaa644f061b56cf695f6884b130d3f5af5faa9f Mon Sep 17 00:00:00 2001 From: Salvatore Ingala <6681844+bigspider@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:22:47 +0200 Subject: [PATCH 2/3] Bump version to 0.7.2; document new 'dockerRunArgs' setting --- CHANGELOG.md | 6 ++++++ README.md | 5 +++++ package.json | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index faa8b9e..5000033 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.7.2] + +### Added + +* Added `dockerRunArgs` setting. + ## [0.7.1] ### Fixed diff --git a/README.md b/README.md index a32b519..a6d9aa3 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ 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.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.containerUpdateRetries`: Set the max number of Container Update retries. @@ -72,6 +73,10 @@ This extension contributes the following settings: ## Release Notes +## 0.7.2 + +* Added `dockerRunArgs` setting. + ## 0.7.1 * Fix regression on AppName detection on Windows platform diff --git a/package.json b/package.json index db93825..9d7d8e0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "ledger-dev-tools", "displayName": "Ledger Dev Tools", "description": "Tools to accelerate development of apps for Ledger devices.", - "version": "0.7.1", + "version": "0.7.2", "publisher": "LedgerHQ", "license": "Apache", "icon": "resources/ledger-square.png", From 8e1f68561eb0523d6bd5e82a994625bd77fa3f27 Mon Sep 17 00:00:00 2001 From: Salvatore Ingala <6681844+bigspider@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:46:54 +0200 Subject: [PATCH 3/3] Change scope the 'dockerRunArgs' to 'resource'; add `dockerRunArgs` as a member of TaskProvider --- package.json | 1 + src/taskProvider.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 9d7d8e0..0c858db 100644 --- a/package.json +++ b/package.json @@ -167,6 +167,7 @@ }, "ledgerDevTools.dockerRunArgs": { "type": "string", + "scope": "resource", "default": "", "description": "Additional arguments to pass to the 'docker run' command for the Ledger developer tools Docker image." }, diff --git a/src/taskProvider.ts b/src/taskProvider.ts index cacb1e0..bf214c6 100644 --- a/src/taskProvider.ts +++ b/src/taskProvider.ts @@ -67,6 +67,7 @@ export class TaskProvider implements vscode.TaskProvider { private packageName?: string; private tasks: MyTask[] = []; private currentApp?: App; + private dockerRunArgs: string = ""; private taskSpecs: TaskSpec[] = [ { group: "Docker Container", @@ -244,6 +245,10 @@ export class TaskProvider implements vscode.TaskProvider { this.buildDir = this.currentApp.buildDirPath; this.workspacePath = this.currentApp.folderUri.path; this.packageName = this.currentApp.packageName; + + const appConf = vscode.workspace.getConfiguration("ledgerDevTools", this.appFolderUri); + this.dockerRunArgs = appConf.get("dockerRunArgs") || ""; + this.checkDisabledTasks(); this.pushAllTasks(); this.treeProvider.addAllTasksToTree(this.taskSpecs); @@ -276,21 +281,18 @@ export class TaskProvider implements vscode.TaskProvider { private runDevToolsImageExec(): string { let exec = ""; - const conf = vscode.workspace.getConfiguration("ledgerDevTools"); - const dockerRunArgs = conf.get("dockerRunArgs"); - if (this.currentApp) { // Checks if a container with the name ${this.containerName} exists, and if it does, it is stopped and removed before a new container is created using the same name and other specified configuration parameters if (platform === "linux") { // Linux - exec = `docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY=$DISPLAY -v '/dev/bus/usb:/dev/bus/usb' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; + exec = `docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY=$DISPLAY -v '/dev/bus/usb:/dev/bus/usb' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${this.dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } else if (platform === "darwin") { // macOS - exec = `xhost + ; docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY='host.docker.internal:0' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; + exec = `xhost + ; docker ps -a --format '{{.Names}}' | grep -q ${this.containerName} && (docker container stop ${this.containerName} && docker container rm ${this.containerName}) ; docker pull ${this.image} && docker run --user $(id -u):$(id -g) --privileged -e DISPLAY='host.docker.internal:0' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v '${this.workspacePath}:/app' ${this.dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } else { // Assume windows const winWorkspacePath = this.workspacePath.substring(1); // Remove first '/' from windows workspace path URI. Otherwise it is not valid. - exec = `if (docker ps -a --format '{{.Names}}' | Select-String -Quiet ${this.containerName}) { docker container stop ${this.containerName}; docker container rm ${this.containerName} }; docker pull ${this.image}; docker run --privileged -e DISPLAY='host.docker.internal:0' -v '${winWorkspacePath}:/app' ${dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; + exec = `if (docker ps -a --format '{{.Names}}' | Select-String -Quiet ${this.containerName}) { docker container stop ${this.containerName}; docker container rm ${this.containerName} }; docker pull ${this.image}; docker run --privileged -e DISPLAY='host.docker.internal:0' -v '${winWorkspacePath}:/app' ${this.dockerRunArgs} -t -d --name ${this.containerName} ${this.image}`; } }