Skip to content
Snippets Groups Projects
Commit 2a605df4 authored by Mohamed AZIKIOU's avatar Mohamed AZIKIOU Committed by Mario HOTAJ
Browse files

feat-launch_challenge_commands

parent bda8b583
Branches
Tags
1 merge request!16feat-launch_challenge_commands
Pipeline #15085 failed
Showing with 313 additions and 66 deletions
......@@ -23,10 +23,8 @@ RUN chown deadlock setup_trace.py
COPY recorder-out deadlock/
COPY .gitignore_recorder deadlock/.gitignore
COPY start.desktop.sh .
RUN chmod 504 deadlock/ -R
RUN chmod 500 /deadlock/recorder.js
RUN chmod 500 start.desktop.sh
RUN mkdir /project && mkdir /tmp/.ssh && mkdir /home/deadlock/mission
......
......@@ -13,6 +13,17 @@
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "${defaultBuildTask}"
},
{
"name": "Run Extension in test mode",
"type": "extensionHost",
"request": "launch",
"env": {
"DL_MOUNT_EXTENSION": "true"
},
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "${defaultBuildTask}"
},
{
"name": "Extension Tests",
"type": "extensionHost",
......
......@@ -8,6 +8,7 @@
"name": "deadlock-coding",
"version": "0.1.10",
"dependencies": {
"@types/yaml": "^1.9.7",
"@vscode/webview-ui-toolkit": "^1.0.0",
"async": "^3.2.2",
"axios": "^0.27.2",
......@@ -17,7 +18,8 @@
"marked": "^4.0.6",
"node-fetch": "^2.6.7",
"reflect-metadata": "^0.1.13",
"simple-git": "^3.7.0"
"simple-git": "^3.7.0",
"yaml": "^2.1.1"
},
"devDependencies": {
"@babel/preset-typescript": "^7.17.12",
......@@ -54,6 +56,19 @@
"vscode": ">=1.66.0"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
"integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.1.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
......@@ -764,6 +779,28 @@
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/@eslint/eslintrc/node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/@eslint/eslintrc/node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
......@@ -800,6 +837,28 @@
"node": ">=8"
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
......@@ -1734,6 +1793,15 @@
"@types/node": "*"
}
},
"node_modules/@types/yaml": {
"version": "1.9.7",
"resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz",
"integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==",
"deprecated": "This is a stub types definition. yaml provides its own type definitions, so you do not need this installed.",
"dependencies": {
"yaml": "*"
}
},
"node_modules/@types/yargs": {
"version": "17.0.10",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz",
......@@ -2381,13 +2449,10 @@
"dev": true
},
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/array-flatten": {
"version": "2.1.2",
......@@ -3960,6 +4025,15 @@
"node": ">=4"
}
},
"node_modules/eslint/node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
......@@ -3969,6 +4043,19 @@
"node": ">=10"
}
},
"node_modules/eslint/node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
......@@ -6508,19 +6595,6 @@
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
......@@ -6775,12 +6849,6 @@
"markdown-it": "bin/markdown-it.js"
}
},
"node_modules/markdown-it/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/markdown-it/node_modules/entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
......@@ -8592,7 +8660,7 @@
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
"node_modules/stack-utils": {
......@@ -9998,6 +10066,14 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/yaml": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz",
"integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==",
"engines": {
"node": ">= 14"
}
},
"node_modules/yargs": {
"version": "17.5.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
......@@ -10606,6 +10682,27 @@
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
}
}
},
"@humanwhocodes/config-array": {
......@@ -10638,6 +10735,25 @@
"resolve-from": "^5.0.0"
},
"dependencies": {
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
......@@ -11108,6 +11224,12 @@
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
"dev": true
},
"@types/async": {
"version": "3.2.13",
"resolved": "https://registry.npmjs.org/@types/async/-/async-3.2.13.tgz",
"integrity": "sha512-7Q3awrhnvm89OzfsmqeqRQh8mh+8Pxfgq1UvSAn2nWQ5y/F3+NrbIF0RbkWq8+5dY99ozgap2b3DNBNwjLVOxw==",
"dev": true
},
"@types/babel__core": {
"version": "7.1.19",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
......@@ -11464,6 +11586,14 @@
"@types/node": "*"
}
},
"@types/yaml": {
"version": "1.9.7",
"resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz",
"integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==",
"requires": {
"yaml": "*"
}
},
"@types/yargs": {
"version": "17.0.10",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz",
......@@ -11951,13 +12081,10 @@
"dev": true
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"array-flatten": {
"version": "2.1.2",
......@@ -13134,11 +13261,30 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
}
}
},
......@@ -15107,16 +15253,6 @@
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
......@@ -15318,12 +15454,6 @@
"uc.micro": "^1.0.5"
},
"dependencies": {
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
......@@ -16713,7 +16843,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
"stack-utils": {
......@@ -17743,6 +17873,11 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"yaml": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz",
"integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw=="
},
"yargs": {
"version": "17.5.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
......
......@@ -62,6 +62,13 @@
"id": "help",
"name": "Help",
"visibility": "visible"
},
{
"id": "commandTree",
"name": "Commands",
"icon": "media/dep.svg",
"contextualTitle": "Deadlock",
"when": "deadlock.showCommands"
}
]
},
......@@ -99,6 +106,7 @@
"postversion": "git add package*.json && auto-changelog -p && git add CHANGELOG.md && git commit -m \"build: $npm_package_version\""
},
"dependencies": {
"@types/yaml": "^1.9.7",
"@vscode/webview-ui-toolkit": "^1.0.0",
"async": "^3.2.2",
"axios": "^0.27.2",
......@@ -108,7 +116,8 @@
"marked": "^4.0.6",
"node-fetch": "^2.6.7",
"reflect-metadata": "^0.1.13",
"simple-git": "^3.7.0"
"simple-git": "^3.7.0",
"yaml": "^2.1.1"
},
"devDependencies": {
"@babel/preset-typescript": "^7.17.12",
......
......@@ -5,7 +5,7 @@ export interface DockerfileSpecific {
'build.args'?: string[];
'build.target'?: string;
'build.cacheFrom'?: string;
containerEnv?: string;
containerEnv?: { [id: string]: string };
containerUser?: string;
mounts?: string[];
workspaceMount?: string;
......@@ -18,7 +18,7 @@ export interface Base {
forwardPorts?: string[];
portsAttributes?: string[];
otherPortsAttributes?: string[];
remoteEnv?: string;
remoteEnv?: { [id: string]: string };
remoteUser?: string;
updateRemoteUserUID?: string;
userEnvProbe?: string;
......
......@@ -17,7 +17,7 @@ export class MissionDevContainer {
private isInit = false;
private mounts: string[] = [];
private readonly dockerImageUrl = 'registry.takima.io/deadlock/deadlock-challenges';
private readonly remoteGiteaWorkDir = `/workdir`;
private readonly remoteGiteaWorkDir = '/workdir';
private readonly dirs: { missionWorkdir: string; config: string; devcontainer: string; mounted: string };
......@@ -98,13 +98,21 @@ export class MissionDevContainer {
private createDevContainerFile(options?: Partial<DockerfileSpecific & Base & VSCodespecific & LifecycleScripts>) {
const hostMissionDevcontainerFileDir = `${this.dirs.devcontainer}/devcontainer.json`;
const image = `${this.dockerImageUrl}/${this.mission.id}:${this.mission.version}`;
let extTarget;
this.mounts.push(
`source=${userSshKeyFolderPath},target=/tmp/.ssh,type=bind,consistency=cached,readonly`,
`source=${this.dirs.config},target=/home/config/,type=bind,consistency=cached,readonly`,
'source=/etc/hosts,target=/etc/hosts,type=bind,consistency=cached,readonly',
);
if (process.env.DL_MOUNT_EXTENSION === 'true') {
const extPath =
'/home/takima/Desktop/d-projects/deadlock-desktop/deadlock-plugins/deadlock-extension/deadlock-coding-0.1.10.vsix';
extTarget = '/injected-extension/extension.vsix';
this.mounts.push(`source=${extPath},target=${extTarget},type=bind`);
} else {
extTarget = 'Deadlock.deadlock-coding';
}
this.addInMountRCs(this.dirs.missionWorkdir, '.bashrc', '.zshrc');
......@@ -114,7 +122,10 @@ export class MissionDevContainer {
const devcontainer: Partial<DockerfileSpecific & Base & VSCodespecific & LifecycleScripts> = {
name: `deadlock-${this.mission.id}`,
image,
extensions: ['Deadlock.deadlock-coding'],
containerEnv: {
WORKDIR: `${remoteMissionDir}`,
},
extensions: [extTarget],
remoteUser: 'deadlock',
mounts: this.mounts,
userEnvProbe: 'interactiveShell',
......
import { window, ExtensionContext, workspace } from 'vscode';
import { window, ExtensionContext, workspace, commands } from 'vscode';
import Controller from './core/controller';
import isDocker from './core/utils/isdocker';
import { extensionError as error } from './recorder/utils/log';
import { DepNodeProvider } from './theia/deadlockPanel';
import UserConfigTheia from './theia/userConfigTheia';
import { CommandTreeProvider } from './view/CommandTree';
export const userConfig = new UserConfigTheia();
......@@ -13,9 +15,14 @@ export async function activate(context: ExtensionContext) {
const workspaceFolders = workspace.workspaceFolders?.toString() ?? '';
if (!workspaceFolders) window.showInformationMessage('Pas de répertoires ouverts');
const deadlockPanelProvider = new DepNodeProvider(workspaceFolders);
const deadlockPanelProvider = new DepNodeProvider();
window.registerTreeDataProvider('deadlockPanel', deadlockPanelProvider);
if (isDocker()) {
commands.executeCommand('setContext', 'deadlock.showCommands', true);
window.registerTreeDataProvider('commandTree', new CommandTreeProvider(context));
} else {
commands.executeCommand('setContext', 'deadlock.showCommands', false);
}
try {
await userConfig.init();
} catch (e) {
......
interface ChallengeYaml {
version?: number;
name?: string;
label?: string;
description?: string;
level?: 'jedi';
type?: 'DESKTOP';
xp?: Map<string, number>;
desktop?: {
scripts: MissionCommand[];
};
}
export interface MissionCommand {
name: string;
command: string;
description?: string;
}
export default ChallengeYaml;
......@@ -9,8 +9,6 @@ export class DepNodeProvider implements TreeDataProvider<Action> {
readonly onDidChangeTreeData: Event<Action | undefined | void> = this._onDidChangeTreeData.event;
constructor(private workspaceRoot: string) {}
refresh(): void {
this._onDidChangeTreeData.fire();
}
......
import isDocker from '../core/utils/isdocker';
import ChallengeYaml, { MissionCommand as MissionCommandYaml } from '../model/challengeYaml';
import { parse } from 'yaml';
import { readFileSync } from 'fs';
import { commands, ExtensionContext, ThemeColor, ThemeIcon, TreeDataProvider, TreeItem, window } from 'vscode';
import { extensionLog } from '../recorder/utils/log';
export class CommandTreeProvider implements TreeDataProvider<MissionCommand> {
challenge: ChallengeYaml;
context: ExtensionContext;
constructor(context: ExtensionContext) {
this.context = context;
if (isDocker()) {
this.challenge = parse(readFileSync('/deadlock/challenge.yaml', 'utf8'));
} else {
this.challenge = {};
}
}
getTreeItem(element: MissionCommand): TreeItem {
return element;
}
getChildren(element?: MissionCommand): Thenable<MissionCommand[]> {
if (element) {
return Promise.resolve([]);
} else {
return Promise.resolve(this.challenge.desktop?.scripts?.map((script) => new MissionCommand(script)) ?? []);
}
}
}
class MissionCommand extends TreeItem {
missionCommandYaml: MissionCommandYaml;
constructor(missionCommandYaml: MissionCommandYaml) {
super(missionCommandYaml.name);
this.missionCommandYaml = missionCommandYaml;
this.tooltip = missionCommandYaml.description;
this.description = missionCommandYaml.description;
this.iconPath = new ThemeIcon('notebook-execute', new ThemeColor('debugIcon.startForeground'));
commands.registerCommand(missionCommandYaml.name, () => {
const terminalName = `Deadlock`;
extensionLog(JSON.stringify(window.terminals));
const terminal =
window.terminals.filter((terminal) => terminal.name === terminalName)[0] ??
window.createTerminal({
cwd: process.env.WORKDIR,
name: terminalName,
});
terminal.sendText(missionCommandYaml.command);
terminal.show();
});
this.command = {
title: missionCommandYaml.name,
command: missionCommandYaml.name,
};
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment