diff --git a/AssignmentChecker/.env.vault b/AssignmentChecker/.env.vault index e57de34e3caa09ee540530e1c44544f89ad85663..82a65b05d4bab98e1a177330a43ca027cc9f6fd1 100644 --- a/AssignmentChecker/.env.vault +++ b/AssignmentChecker/.env.vault @@ -4,8 +4,8 @@ #/--------------------------------------------------/ # development -DOTENV_VAULT_DEVELOPMENT="/LrM2dHMdkZ4WcPfZG1Fl75M7RmB0QBs4qQSGHS7l0H4FHODTSBqnny8vu4RxYn3lJwGackRGHVmChXk7D5PwDGL8S4tCGaEtKB7oIYjJ16b5xw41+z64KWrqZcgcCIM6qw5XQawfOefSV2ua08ZzOMb3Dt/qllZAkAk96VtTm3Z0TtzzU5C8KGqQOarxTTnQi1d4C0rLnrhkWBHa/KfPrlEipJvR/UR6UkS47eMzbuiKIclQpn6rifuV4dDN4krVBAIXRqoz8UHJemICVeTZutzJvWrrkldkGNdPxzmW34X5fC4ylcXwEoMOtGhtTZ8VMD4RSoAjetSIN782Uqv5AZVYA3WvvNCkEcxegEOhu+4HsCp9TVNRA7b5tC9CdFyNbWAQy1jKlEpnd3eQgK5K7l9OGUmq5+b/SU7Y3mcQIv+p3iDqQMa7jnl/O5iNQUDT0s/FeGTuuFaQjbCmb3L5J4VEJKVovSz/SXro5GjAnk2JUHg7njukYpX68xo6usYXqk6La77/cc7amsKw5703SnPtEU1bd+bKM/sklS5wvKDJXkE6l+lgygJmZ+TxZy3pHMxsrgvnaTxL2CTYL9nP55iUW17skx32R4Cv7WZNrXdll8Uvswrl/eUKmucrigeSV+tVXvCCsrTEhm79yEYzE4PU8ktIurBB2Wvxy4GKEVVOgcOK3AuUle9yApJVVtOzOaNAFQaSlVRZCqWA1U1A5N0SC+aLRbkkxEYM7LzfIXVlsVFDvTSSDogny380mFQDAfMnXqFRJasAUgfDHvFCHYKbCoUzRcdGvn8xIVLejhxUeYoO4fEHy1jxp6BrZWsvC8ByqPI8llIJyfqzpIrnZ7hKzKtNtwYN93NUwFsaf6Ke1ghLOziJejZfBoBMa0ny6GKhFyhfYtCMlW4hRvRpwUCbUtGGd8/EXanu9A+/C2mF9U7BtFtiXD9pDLoFT7RxHddhDyC6WyVKf2qJkBPLg==" +DOTENV_VAULT_DEVELOPMENT="avJmMhVKLmzILAGQBuj8x667vtJTDiLFsfbxc/S+STLmfS8ZeVfyByaHqIUAckC5dVMSM3Uc4yTZiKG6ivifOl9+KCR4Wz28s385licesH7ULAlCT0Ioq8EExxZ9/o2csNP9d23uKouwHXDPQPpt0F7YvxiaYnuWDqXnFLjYYVAe28usNnM9mjW3gWtWcIWfxOIU1P5RpCDBZqNdDFTeEqXxbBaRha5tb2uhJsgG41X3uPWMiToMOp6FAtDynO3cKVMBzKkaK6MRlI1O2dF1nRa5iYmNi6UDs8ZnSelJ+NMULcYGKn+ByZWhelJm0wD575L0wHvJMTESKRrsXS4rJ+Y2bT4TjrA9geJK3gFaWUaNOjDitRe21Q3mD6kONvrFOO5IzK8SsiqORZ2eeot3YXAlc/NsC3F6w+BHhi+X1V0mg6tJSw0qKtA8izbuWbu2mDqGBqAGhu4ffBscqaruoXsY/uPvl+FxiNYMElC/aQn6GyETEOgzfTWldFNqTufwNSAHxAy58ZNt7P/F50VK9r9PAKOHgZAWpUaGmgjv9Y2U+DCdnhFdEiJBr6mUaU6mldUjcSEbdzww6npt2NHPmeksKMa73JL0jIoGJR1rQLIwKGHTqah3fmfKKCc/aKuJEa7tpI8fzqcXLHMEU3vwKFxiT1mxkElEd2mj++qlnr2tjfM4tcDOxYJTwVt6kiKkYLFZg2yDwp757hlS0sR6YCBLaFEkIFL3W/ciBSn12wSSdoYJRLwT1Mrv7zv+yUXF/r+cDLmHdujitsMxJz7OMutzksocyJcH6Ls15z/7C+xPcbuyrKc0HNSdQL5dTqrT934uryIQhLZaEbyb/FcVLTn86hFlj9f+corJOhFHDAflko+HSosXR+OTHv22270Po+OlfglJvDOW7tdaylP53RtPUnlfxcdb1RrvRbQbUt4v5lG38nilPcHTShDPX0qdDearUWBJdunLGVHR4Of289DtraabEvmOOPEPuYCT8+8=" # production -DOTENV_VAULT_PRODUCTION="WylDNF/SdylCEvaQ1NAo9WOWmv8PvLA8L7wKhASX9ERiuKYPpuySEcQ1O14d2vOhs3Fb/ByftJRVEID8qQwuPjgXY81sLiMp7SknUYGmmM9ONHny6rpM412mP75MnaDKXTULSPmOy6j5mrq+vux1J04EAK8qsAe/AabamFU2wGgiZAREtZhCaV901/hh1qa7fgyjTCfz0hOpOs9SWFlHvJ4JjPatfi6h72+gfsVvtXDW+IPXTa4wYiXSty0j/PBf7x0ecvJoD3Xk3IQD+YtwNDTOK+Y2TgOo/GKRitj365cgHMW5enuZyWzXJkaBfyzofbNY9LWIk3YRiFtm2ixnadeHNMTotMo0XtQuNQ7yn7F34UGIM9cKcdLwzRfT8nbFQIsxwD8YQAttr6csNs7RDuQkgoF55eZNp+5mp87kJhVDHGdU2BnigeLwa2Em/kx3Mjacy00jggtrIokp2Di3023dUA6aAhpuyEAdQzBZBxELAisXdX5kyMe265Q9AGyc2OfFImLkdKfFgM/jDJMWRKg5NANoEAhv3UnPlhI6gzNiZuXCEl4+TEUkPxemxp9ylfL4wr9RARcVv+IarH6I996yZ8v2kWwYAd3jPw48OJYUgE+LVFualU5JTAse5jpiWtffn95od8VGtNj0O8BgotMTcH1F" +DOTENV_VAULT_PRODUCTION="+zsZmUoTEDJcrLk+EwjPXvyGT1jPcMhwVyMUjR3nYN3ztzREdea/vqqqOw78lm2kwzZC0guUMB4lShVprEEiUs7cW+iXjDOHZivvZ6xZZEFl2gbt15XaoZ19WMRQoKypO80VqULGib3BmrXQFYz4OQ6sqQiBnBovm4mb++DkIjnN+6e2wxGbPnhxhyeHi7H+C/D3b8rrQfAijlpWUgGG1x6aKS53PJxLmTB7/tHdOHyBWpgekiDurkTBYckYBWVZOrPLm3xJFBqeJLNmq2CHcvxt/4SaGBQ06ggonzyiatb20JJsKI2P6SwDxV/ae7k8Aj5PKfMVweCOsgPj5kII0mAAB9SkxZ+Jbohm0WxqwxZ3488mm/7BhK53MjOgFyhbf0eI09FPPYgBBZ2uvo0PuLbErnQ//ND+wNFCWGPSDTQO8T6kDYAGRWCH7ZeY1d0ZIf58wW+Zd7ipGu2J7b+NMk/ZaJLehJrc8KgTmQUTjvO4Yt5QSQ+kFQePuFfQNjvakCkyWkh/ElaHD6sMhDO/LCbr42J0a4fGUZn7RgCZDdYWwO2Gxutak2lbHV9JjAN5hJFbH2nXMnLAyWAVYJ2j0YE/SHjjkYiQp0CIuofKCfZN/DQNSMnvqXBOyTP0tUrCT0KVMRr3sptQ9DJ1fJvYtTxSigNECl3rPjEKxPSxD9F2zQO7zNNj8ujxn4SqZgjMq2nvELfokiuLQcZZniPAFLX5xRiWV1DJAklNPOB6HGcjgQ0w6tvqdo6sdXEV6/tpRP0Sl/AAQZPEz6BF5FR2+wNP/98mMeko+sWcZz35G3DpU5tnCDNTjpxNZUI=" diff --git a/AssignmentChecker/assets/.gitkeep b/AssignmentChecker/assets/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/AssignmentChecker/package-lock.json b/AssignmentChecker/package-lock.json index 39d1cccc9b25faa48ea5f3d2dab13f186a349764..d9279417895dcefb3db0534d6335d8c007350d28 100644 --- a/AssignmentChecker/package-lock.json +++ b/AssignmentChecker/package-lock.json @@ -15,12 +15,14 @@ "chalk": "^4.1.2", "dockerode": "^3.3.5", "dotenv": "^16.3.1", + "dotenv-expand": "^10.0.0", "fs-extra": "^11.1.1", "http-status-codes": "^2.2.0", "json5": "^2.2.3", "ora": "^5.4.1", "tar-stream": "^3.1.6", - "winston": "^3.10.0" + "winston": "^3.10.0", + "yaml": "^2.3.2" }, "bin": { "dirmanager": "dist/app.js" @@ -1450,6 +1452,14 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, "node_modules/dotenv-vault": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/dotenv-vault/-/dotenv-vault-1.25.0.tgz", @@ -3718,6 +3728,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/AssignmentChecker/package.json b/AssignmentChecker/package.json index c9502d951c41e2301900bb4791b82865d5b9a24f..8d91297f46368a8bc744d37eae3d426f65a0d536 100644 --- a/AssignmentChecker/package.json +++ b/AssignmentChecker/package.json @@ -34,12 +34,14 @@ "chalk" : "^4.1.2", "dockerode" : "^3.3.5", "dotenv" : "^16.3.1", + "dotenv-expand" : "^10.0.0", "fs-extra" : "^11.1.1", "http-status-codes": "^2.2.0", "json5" : "^2.2.3", "ora" : "^5.4.1", "tar-stream" : "^3.1.6", - "winston" : "^3.10.0" + "winston" : "^3.10.0", + "yaml" : "^2.3.2" }, "devDependencies": { "@types/dockerode" : "^3.3.19", diff --git a/AssignmentChecker/src/app.ts b/AssignmentChecker/src/app.ts index bb70d037ccab50afff41a9b5e1767a8a0d278881..7ae5b397ce3fb9109aab517649d63f0e1be69811 100644 --- a/AssignmentChecker/src/app.ts +++ b/AssignmentChecker/src/app.ts @@ -1,17 +1,21 @@ // Read from the .env file // ATTENTION : This lines MUST be the first of this file (except for the path import) const path = require('node:path'); -require('dotenv').config({ - path : path.join(__dirname, '../.env'), - DOTENV_KEY: 'dotenv://:key_f1778b6998874f6fd78c716ccef982c5595fa300f174b129eafc88ba7044d69b@dotenv.local/vault/.env.vault?environment=development' - }); +const myEnv = require('dotenv').config({ + path : path.join(__dirname, '../.env'), + DOTENV_KEY: 'dotenv://:key_f1778b6998874f6fd78c716ccef982c5595fa300f174b129eafc88ba7044d69b@dotenv.local/vault/.env.vault?environment=development' + }); +require('dotenv-expand').expand(myEnv); require('./shared/helpers/TypeScriptExtensions'); // ATTENTION : This line MUST be the second of this file -import Styles from './types/Style'; -import { exec } from 'child_process'; -import util from 'util'; -import HttpManager from './managers/HttpManager'; -import Config from './config/Config'; +import ClientsSharedAssignmentHelper from './sharedByClients/helpers/Dojo/ClientsSharedAssignmentHelper'; +import AssignmentValidator from './sharedByClients/helpers/Dojo/AssignmentValidator'; +import Styles from './types/Style'; +import { exec } from 'child_process'; +import util from 'util'; +import HttpManager from './managers/HttpManager'; +import Config from './config/Config'; +import Icon from './sharedByClients/types/Icon'; (async () => { @@ -20,4 +24,34 @@ import Config from './config/Config'; HttpManager.registerAxiosInterceptor(); console.log(Styles.APP_NAME(`${ Config.appName } (version {{VERSION}})`)); + + const assignmentValidator = new AssignmentValidator(Config.folders.project); + + try { + await new Promise<void>((resolve, reject) => { + assignmentValidator.events.on('step', (name: string, message: string) => { + console.log(Styles.CAT_INFO(`${ Icon.CAT_INFO } ${ message }`)); + }); + + assignmentValidator.events.on('subStep', (name: string, message: string) => { + console.log(Styles.INFO(`\t${ Icon.INFO } ${ message }`)); + }); + + assignmentValidator.events.on('endSubStep', (stepName: string, message: string, error: boolean) => { + if ( error ) { + console.error(Styles.ERROR(`\t${ Icon.ERROR } ${ message }`)); + } + }); + + assignmentValidator.events.on('finished', (success: boolean, exitCode: number) => { + success ? resolve() : reject(); + }); + + assignmentValidator.run(); + }); + } catch ( error ) { } + + ClientsSharedAssignmentHelper.displayExecutionResults(assignmentValidator, `The assignment is ready to be published.`, Styles); + + process.exit(assignmentValidator.exitCode); })(); \ No newline at end of file diff --git a/AssignmentChecker/src/shared b/AssignmentChecker/src/shared index 8424367748a6fc47f8da10b85e7663f3f7d07620..efe1bf313f57d1826faf935c183d37a0835f8c2d 160000 --- a/AssignmentChecker/src/shared +++ b/AssignmentChecker/src/shared @@ -1 +1 @@ -Subproject commit 8424367748a6fc47f8da10b85e7663f3f7d07620 +Subproject commit efe1bf313f57d1826faf935c183d37a0835f8c2d diff --git a/AssignmentChecker/src/sharedByClients b/AssignmentChecker/src/sharedByClients index 97ba763f9517880ecfa6245c172a0e330ebdd11a..d9379b055a4626e4b35cf4cc4a7429040a4aeaf7 160000 --- a/AssignmentChecker/src/sharedByClients +++ b/AssignmentChecker/src/sharedByClients @@ -1 +1 @@ -Subproject commit 97ba763f9517880ecfa6245c172a0e330ebdd11a +Subproject commit d9379b055a4626e4b35cf4cc4a7429040a4aeaf7 diff --git a/AssignmentChecker/src/types/Style.ts b/AssignmentChecker/src/types/Style.ts index 3b9d9f986980bd4d132da2f91bb92522825920c7..c937a17ca7a1c55c02eb5f7ed12d5b53d4c5732f 100644 --- a/AssignmentChecker/src/types/Style.ts +++ b/AssignmentChecker/src/types/Style.ts @@ -3,6 +3,7 @@ import chalk from 'chalk'; class Style { public readonly APP_NAME = chalk.bgBlue.black.bold; + public readonly CAT_INFO = chalk.magenta; public readonly INFO = chalk.blue; public readonly ERROR = chalk.red; public readonly SUCCESS = chalk.green;