From f331847074902f1c78fa59c2d38747b9224c89d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Wed, 2 Aug 2023 22:57:01 +0200 Subject: [PATCH] Rewrite step 3 and 4 (and add step 5) with the linking of volume with the host container --- ExerciceChecker/src/app.ts | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/ExerciceChecker/src/app.ts b/ExerciceChecker/src/app.ts index abccdb2..a740445 100644 --- a/ExerciceChecker/src/app.ts +++ b/ExerciceChecker/src/app.ts @@ -26,34 +26,38 @@ import Config from './config/Config'; - Read the dojo enonce file from the enonce repository - Download immutables files (maybe throw or show an error if the files have been modified ?) */ - console.log(chalk.green('Checking the exercice\'s enonce and his immutables files')); + console.log(chalk.green('- Checking the exercice\'s enonce and his immutable files')); const exerciceEnonce = await DojoBackendManager.getExerciceEnonce(); if ( !exerciceEnonce ) { - console.error(chalk.red(`Error while getting the exercice's enonce`)); + console.error(chalk.red(`X Error while getting the exercice's enonce`)); process.exit(ExerciceCheckerError.EXERCICE_ENONCE_GET_ERROR); } exerciceEnonce.immutable.forEach(immutableFile => { - const filePath = `${ Config.filesFolder }/${ immutableFile.file_path }`.replace(/\/\//g, '/'); + const filePath = `${ Config.folders.project }/${ immutableFile.file_path }`.replace(/\/\//g, '/'); fs.mkdirSync(path.dirname(filePath), { recursive: true }); fs.writeFileSync(filePath, immutableFile.content, { encoding: 'base64' }); }); /* - Step 3 & 4: + Step 3 & 4 & 5: + - Get override of docker-compose file (for override the volume by a bind mount to the results folder shared between dind and the host) - Run docker-compose file - - Wait until the end of the execution of the result container + - Get logs from linked services */ - console.log(chalk.green('Run docker compose file')); - const changeDirectoryCommand = `cd "${ Config.filesFolder }"`; - const dockerComposeCommand = `docker compose --project-name ${ Config.dockerCompose.projectName } --progress plain`; + console.log(chalk.green('- Run docker compose file')); + const dockerComposeOverride = fs.readFileSync(path.join(__dirname, '../assets/docker-compose-override.yml'), 'utf8').replace('{{VOLUME_NAME}}', exerciceEnonce.enonceFile.result.volume).replace('{{MOUNT_PATH}}', Config.folders.resultsExercice); + fs.writeFileSync(`${ Config.folders.project }/docker-compose-override.yml`, dockerComposeOverride); + + const changeDirectoryCommand = `cd "${ Config.folders.project }"`; + const dockerComposeCommand = `docker compose --project-name ${ Config.dockerCompose.projectName } --progress plain --file docker-compose.yml --file docker-compose-override.yml`; const containerExitStatus = await new Promise<[ number, string ]>((resolve, reject) => { let logs = '####################################################### Docker Compose & Main Container Logs #######################################################\n'; const dockerCompose = spawn(`${ dockerComposeCommand } run ${ exerciceEnonce.enonceFile.result.container }`, { - cwd : Config.filesFolder, + cwd : Config.folders.project, shell: true, env : { 'DOCKER_BUILDKIT' : '1', @@ -77,23 +81,24 @@ import Config from './config/Config'; }); }); if ( containerExitStatus[0] === ExerciceCheckerError.DOCKER_COMPOSE_UP_ERROR ) { - console.error(chalk.red(`Error while running the docker-compose file`)); + console.error(chalk.red(`X Error while running the docker compose file`)); process.exit(containerExitStatus[0]); } - fs.writeFileSync(`${ Config.resultsFolder }/dockerComposeLogs.txt`, containerExitStatus[1]); + fs.writeFileSync(`${ Config.folders.resultsDojo }/dockerComposeLogs.txt`, containerExitStatus[1]); + console.log(chalk.green('- Acquire logs of linked services')); try { - await execAsync(`${ changeDirectoryCommand };${ dockerComposeCommand } logs --timestamps >> ${ Config.resultsFolder }/dockerComposeLogs.txt`); + await execAsync(`${ changeDirectoryCommand };${ dockerComposeCommand } logs --timestamps >> ${ Config.folders.resultsDojo }/dockerComposeLogs.txt`); } catch ( error ) { - console.error(chalk.red(`Error while getting the docker-compose logs`)); + console.error(chalk.red(`X Error while getting the linked services logs`)); process.exit(ExerciceCheckerError.DOCKER_COMPOSE_LOGS_ERROR); } - // Step 5: Get the result from the volume // Step 6: Check content requirements and content size // Step 7: Upload and show the results + // Step 8: Exit with container exit code process.exit(containerExitStatus[0]); })(); -- GitLab