Skip to content
Snippets Groups Projects
Commit de38dfe0 authored by michael.minelli's avatar michael.minelli
Browse files

Merge branch 'esm-migration-and-dependencies-update' into v4.0

parents 8ae82abc bcbf1f6d
No related branches found
No related tags found
No related merge requests found
import { TypedEmitter } from 'tiny-typed-emitter'; import { TypedEmitter } from 'tiny-typed-emitter';
import AssignmentValidatorEvents from '../../types/Dojo/AssignmentValidatorEvents'; import AssignmentValidatorEvents from '../../types/Dojo/AssignmentValidatorEvents.js';
import SharedAssignmentHelper from '../../../shared/helpers/Dojo/SharedAssignmentHelper'; import SharedAssignmentHelper from '../../../shared/helpers/Dojo/SharedAssignmentHelper.js';
import path from 'node:path'; import path from 'node:path';
import AssignmentCheckerError from '../../../shared/types/Dojo/AssignmentCheckerError'; import AssignmentCheckerError from '../../../shared/types/Dojo/AssignmentCheckerError.js';
import fs from 'fs-extra'; import fs from 'fs-extra';
import ClientsSharedConfig from '../../config/ClientsSharedConfig'; import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
import YAML from 'yaml'; import YAML from 'yaml';
import DojoDockerCompose from '../../types/Dojo/DojoDockerCompose'; import DojoDockerCompose from '../../types/Dojo/DojoDockerCompose.js';
import { exec, spawn } from 'child_process'; import { exec, spawn } from 'child_process';
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile'; import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile.js';
import ExerciseDockerCompose from './ExerciseDockerCompose'; import ExerciseDockerCompose from './ExerciseDockerCompose.js';
import util from 'util'; import util from 'util';
...@@ -288,7 +288,7 @@ class AssignmentValidator { ...@@ -288,7 +288,7 @@ class AssignmentValidator {
} }
run() { run() {
(async () => { void (async () => {
try { try {
await this.checkRequirements(); await this.checkRequirements();
......
import chalk from 'chalk'; import { ChalkInstance } from 'chalk';
import boxen from 'boxen'; import boxen from 'boxen';
import Icon from '../../../shared/types/Icon'; import Icon from '../../../shared/types/Icon.js';
import AssignmentValidator from './AssignmentValidator'; import AssignmentValidator from './AssignmentValidator.js';
class ClientsSharedAssignmentHelper { class ClientsSharedAssignmentHelper {
displayExecutionResults(validator: AssignmentValidator, successMessage: string, Style: { INFO: chalk.Chalk, SUCCESS: chalk.Chalk, FAILURE: chalk.Chalk }) { displayExecutionResults(validator: AssignmentValidator, successMessage: string, Style: { INFO: ChalkInstance, SUCCESS: ChalkInstance, FAILURE: ChalkInstance }) {
const globalResult = validator.success ? Style.SUCCESS(`${ Icon.SUCCESS } Success`) : Style.FAILURE(`${ Icon.FAILURE } Failure`); const globalResult = validator.success ? Style.SUCCESS(`${ Icon.SUCCESS } Success`) : Style.FAILURE(`${ Icon.FAILURE } Failure`);
const finalLogGlobalResult = `${ Style.INFO('Global result') } : ${ globalResult }`; const finalLogGlobalResult = `${ Style.INFO('Global result') } : ${ globalResult }`;
......
import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile'; import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile.js';
import chalk from 'chalk'; import { ChalkInstance } from 'chalk';
import boxen from 'boxen'; import boxen from 'boxen';
import Icon from '../../../shared/types/Icon'; import Icon from '../../../shared/types/Icon.js';
class ClientsSharedExerciseHelper { class ClientsSharedExerciseHelper {
private getOtherInformations(exerciseResults: ExerciseResultsFile, Style: { INFO: chalk.Chalk, SUCCESS: chalk.Chalk, FAILURE: chalk.Chalk }) { private getOtherInformations(exerciseResults: ExerciseResultsFile, Style: { INFO: ChalkInstance, SUCCESS: ChalkInstance, FAILURE: ChalkInstance }) {
return exerciseResults.otherInformations ? [ '', ...exerciseResults.otherInformations.map(information => { return exerciseResults.otherInformations ? [ '', ...exerciseResults.otherInformations.map(information => {
const informationTitle = Style.INFO(`${ information.icon && information.icon !== '' ? Icon[information.icon] + ' ' : '' }${ information.name }: `); const informationTitle = Style.INFO(`${ information.icon && information.icon !== '' ? Icon[information.icon] + ' ' : '' }${ information.name }: `);
const informationItems = typeof information.itemsOrInformations == 'string' ? information.itemsOrInformations : information.itemsOrInformations.map(item => `- ${ item }`).join('\n'); const informationItems = typeof information.itemsOrInformations == 'string' ? information.itemsOrInformations : information.itemsOrInformations.map(item => `- ${ item }`).join('\n');
...@@ -15,7 +15,7 @@ class ClientsSharedExerciseHelper { ...@@ -15,7 +15,7 @@ class ClientsSharedExerciseHelper {
}) ].join('\n\n') : ''; }) ].join('\n\n') : '';
} }
displayExecutionResults(exerciseResults: ExerciseResultsFile, containerExitCode: number, Style: { INFO: chalk.Chalk, SUCCESS: chalk.Chalk, FAILURE: chalk.Chalk }, additionalText: string = '') { displayExecutionResults(exerciseResults: ExerciseResultsFile, containerExitCode: number, Style: { INFO: ChalkInstance, SUCCESS: ChalkInstance, FAILURE: ChalkInstance }, additionalText: string = '') {
const globalResult = exerciseResults.success ? Style.SUCCESS(`${ Icon.SUCCESS } Success`) : Style.FAILURE(`${ Icon.FAILURE } Failure`); const globalResult = exerciseResults.success ? Style.SUCCESS(`${ Icon.SUCCESS } Success`) : Style.FAILURE(`${ Icon.FAILURE } Failure`);
const finalLogGlobalResult = `${ Style.INFO('Global result: ') }${ globalResult }`; const finalLogGlobalResult = `${ Style.INFO('Global result: ') }${ globalResult }`;
......
import ApiRoute from '../../types/Dojo/ApiRoute'; import ApiRoute from '../../types/Dojo/ApiRoute.js';
import ClientsSharedConfig from '../../config/ClientsSharedConfig'; import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
class DojoBackendHelper { class DojoBackendHelper {
......
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile'; import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile.js';
import { TypedEmitter } from 'tiny-typed-emitter'; import { TypedEmitter } from 'tiny-typed-emitter';
import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents'; import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents.js';
import { spawn } from 'child_process'; import { spawn } from 'child_process';
import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError'; import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError.js';
import { ChildProcessWithoutNullStreams } from 'node:child_process'; import { ChildProcessWithoutNullStreams } from 'node:child_process';
...@@ -60,10 +60,12 @@ class ExerciseDockerCompose { ...@@ -60,10 +60,12 @@ class ExerciseDockerCompose {
private registerChildProcess(childProcess: ChildProcessWithoutNullStreams, resolve: (value: (number | PromiseLike<number>)) => void, reject: (reason?: unknown) => void, displayable: boolean, rejectIfCodeIsNotZero: boolean) { private registerChildProcess(childProcess: ChildProcessWithoutNullStreams, resolve: (value: (number | PromiseLike<number>)) => void, reject: (reason?: unknown) => void, displayable: boolean, rejectIfCodeIsNotZero: boolean) {
childProcess.stdout.on('data', data => { childProcess.stdout.on('data', data => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call
this.log(data.toString(), false, displayable); this.log(data.toString(), false, displayable);
}); });
childProcess.stderr.on('data', data => { childProcess.stderr.on('data', data => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call
this.log(data.toString(), true, displayable); this.log(data.toString(), true, displayable);
}); });
...@@ -73,7 +75,7 @@ class ExerciseDockerCompose { ...@@ -73,7 +75,7 @@ class ExerciseDockerCompose {
} }
run(doDown: boolean = false) { run(doDown: boolean = false) {
(async () => { void (async () => {
let containerExitCode: number = -1; let containerExitCode: number = -1;
const filesOverrideArguments = this.composeFileOverride.map(file => `--file "${ file }"`).join(' '); const filesOverrideArguments = this.composeFileOverride.map(file => `--file "${ file }"`).join(' ');
......
import { TypedEmitter } from 'tiny-typed-emitter'; import { TypedEmitter } from 'tiny-typed-emitter';
import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents'; import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents.js';
import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError'; import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError.js';
import path from 'node:path'; import path from 'node:path';
import ClientsSharedConfig from '../../config/ClientsSharedConfig'; import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
import Toolbox from '../../../shared/helpers/Toolbox'; import Toolbox from '../../../shared/helpers/Toolbox.js';
import * as fs from 'fs-extra'; import * as fs from 'fs-extra';
import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile'; import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile.js';
import JSON5 from 'json5'; import JSON5 from 'json5';
import Json5FileValidator from '../../../shared/helpers/Json5FileValidator'; import Json5FileValidator from '../../../shared/helpers/Json5FileValidator.js';
class ExerciseResultsSanitizerAndValidator { class ExerciseResultsSanitizerAndValidator {
...@@ -27,7 +27,7 @@ class ExerciseResultsSanitizerAndValidator { ...@@ -27,7 +27,7 @@ class ExerciseResultsSanitizerAndValidator {
this.containerExitCode = containerExitCode; this.containerExitCode = containerExitCode;
} }
private async resultsFileSanitization() { private resultsFileSanitization() {
this.events.emit('step', 'RESULTS_FILE_SANITIZATION', 'Sanitizing results file'); this.events.emit('step', 'RESULTS_FILE_SANITIZATION', 'Sanitizing results file');
if ( this.exerciseResults.success === undefined ) { if ( this.exerciseResults.success === undefined ) {
...@@ -57,7 +57,7 @@ class ExerciseResultsSanitizerAndValidator { ...@@ -57,7 +57,7 @@ class ExerciseResultsSanitizerAndValidator {
// Results file content sanitization // Results file content sanitization
await this.resultsFileSanitization(); this.resultsFileSanitization();
// Results folder size // Results folder size
...@@ -76,19 +76,14 @@ class ExerciseResultsSanitizerAndValidator { ...@@ -76,19 +76,14 @@ class ExerciseResultsSanitizerAndValidator {
return true; return true;
} }
private async resultsFileNotProvided(): Promise<boolean> {
await this.resultsFileSanitization();
return true;
}
run() { run() {
(async () => { void (async () => {
// Results file existence // Results file existence
this.events.emit('step', 'CHECK_RESULTS_FILE_EXIST', 'Checking if results file exists'); this.events.emit('step', 'CHECK_RESULTS_FILE_EXIST', 'Checking if results file exists');
const resultsFileOriginPath = path.join(this.folderResultsExercise, ClientsSharedConfig.filenames.results); const resultsFileOriginPath = path.join(this.folderResultsExercise, ClientsSharedConfig.filenames.results);
this.resultsFilePath = path.join(this.folderResultsDojo, ClientsSharedConfig.filenames.results); this.resultsFilePath = path.join(this.folderResultsDojo, ClientsSharedConfig.filenames.results);
let result: boolean; let result: boolean = true;
if ( fs.existsSync(resultsFileOriginPath) ) { if ( fs.existsSync(resultsFileOriginPath) ) {
this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file found', false); this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file found', false);
...@@ -102,7 +97,7 @@ class ExerciseResultsSanitizerAndValidator { ...@@ -102,7 +97,7 @@ class ExerciseResultsSanitizerAndValidator {
} else { } else {
this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file not found', false); this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file not found', false);
result = await this.resultsFileNotProvided(); this.resultsFileSanitization();
} }
if ( result ) { if ( result ) {
......
import User from './User'; import User from './User.js';
import Exercise from './Exercise'; import Exercise from './Exercise.js';
import * as Gitlab from '@gitbeaker/rest'; import * as Gitlab from '@gitbeaker/rest';
......
import User from './User'; import User from './User.js';
import Assignment from './Assignment'; import Assignment from './Assignment.js';
import * as Gitlab from '@gitbeaker/rest'; import * as Gitlab from '@gitbeaker/rest';
......
import AssignmentFile from '../../shared/types/Dojo/AssignmentFile'; import AssignmentFile from '../../shared/types/Dojo/AssignmentFile.js';
import Assignment from './Assignment'; import Assignment from './Assignment.js';
import * as Gitlab from '@gitbeaker/rest'; import * as Gitlab from '@gitbeaker/rest';
......
import UserRole from './UserRole'; import UserRole from './UserRole.js';
import Exercise from './Exercise'; import Exercise from './Exercise.js';
import Assignment from './Assignment'; import Assignment from './Assignment.js';
import * as Gitlab from '@gitbeaker/rest'; import * as Gitlab from '@gitbeaker/rest';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment