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 tags found
No related merge requests found
import { TypedEmitter } from 'tiny-typed-emitter';
import AssignmentValidatorEvents from '../../types/Dojo/AssignmentValidatorEvents';
import SharedAssignmentHelper from '../../../shared/helpers/Dojo/SharedAssignmentHelper';
import AssignmentValidatorEvents from '../../types/Dojo/AssignmentValidatorEvents.js';
import SharedAssignmentHelper from '../../../shared/helpers/Dojo/SharedAssignmentHelper.js';
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 ClientsSharedConfig from '../../config/ClientsSharedConfig';
import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
import YAML from 'yaml';
import DojoDockerCompose from '../../types/Dojo/DojoDockerCompose';
import DojoDockerCompose from '../../types/Dojo/DojoDockerCompose.js';
import { exec, spawn } from 'child_process';
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile';
import ExerciseDockerCompose from './ExerciseDockerCompose';
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile.js';
import ExerciseDockerCompose from './ExerciseDockerCompose.js';
import util from 'util';
......@@ -288,7 +288,7 @@ class AssignmentValidator {
}
run() {
(async () => {
void (async () => {
try {
await this.checkRequirements();
......
import chalk from 'chalk';
import { ChalkInstance } from 'chalk';
import boxen from 'boxen';
import Icon from '../../../shared/types/Icon';
import AssignmentValidator from './AssignmentValidator';
import Icon from '../../../shared/types/Icon.js';
import AssignmentValidator from './AssignmentValidator.js';
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 finalLogGlobalResult = `${ Style.INFO('Global result') } : ${ globalResult }`;
......
import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile';
import chalk from 'chalk';
import ExerciseResultsFile from '../../../shared/types/Dojo/ExerciseResultsFile.js';
import { ChalkInstance } from 'chalk';
import boxen from 'boxen';
import Icon from '../../../shared/types/Icon';
import Icon from '../../../shared/types/Icon.js';
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 => {
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');
......@@ -15,7 +15,7 @@ class ClientsSharedExerciseHelper {
}) ].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 finalLogGlobalResult = `${ Style.INFO('Global result: ') }${ globalResult }`;
......
import ApiRoute from '../../types/Dojo/ApiRoute';
import ClientsSharedConfig from '../../config/ClientsSharedConfig';
import ApiRoute from '../../types/Dojo/ApiRoute.js';
import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
class DojoBackendHelper {
......
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile';
import AssignmentFile from '../../../shared/types/Dojo/AssignmentFile.js';
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 ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError';
import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError.js';
import { ChildProcessWithoutNullStreams } from 'node:child_process';
......@@ -60,10 +60,12 @@ class ExerciseDockerCompose {
private registerChildProcess(childProcess: ChildProcessWithoutNullStreams, resolve: (value: (number | PromiseLike<number>)) => void, reject: (reason?: unknown) => void, displayable: boolean, rejectIfCodeIsNotZero: boolean) {
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);
});
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);
});
......@@ -73,7 +75,7 @@ class ExerciseDockerCompose {
}
run(doDown: boolean = false) {
(async () => {
void (async () => {
let containerExitCode: number = -1;
const filesOverrideArguments = this.composeFileOverride.map(file => `--file "${ file }"`).join(' ');
......
import { TypedEmitter } from 'tiny-typed-emitter';
import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents';
import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError';
import ExerciseRunningEvents from '../../types/Dojo/ExerciseRunningEvents.js';
import ExerciseCheckerError from '../../../shared/types/Dojo/ExerciseCheckerError.js';
import path from 'node:path';
import ClientsSharedConfig from '../../config/ClientsSharedConfig';
import Toolbox from '../../../shared/helpers/Toolbox';
import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
import Toolbox from '../../../shared/helpers/Toolbox.js';
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 Json5FileValidator from '../../../shared/helpers/Json5FileValidator';
import Json5FileValidator from '../../../shared/helpers/Json5FileValidator.js';
class ExerciseResultsSanitizerAndValidator {
......@@ -27,7 +27,7 @@ class ExerciseResultsSanitizerAndValidator {
this.containerExitCode = containerExitCode;
}
private async resultsFileSanitization() {
private resultsFileSanitization() {
this.events.emit('step', 'RESULTS_FILE_SANITIZATION', 'Sanitizing results file');
if ( this.exerciseResults.success === undefined ) {
......@@ -57,7 +57,7 @@ class ExerciseResultsSanitizerAndValidator {
// Results file content sanitization
await this.resultsFileSanitization();
this.resultsFileSanitization();
// Results folder size
......@@ -76,19 +76,14 @@ class ExerciseResultsSanitizerAndValidator {
return true;
}
private async resultsFileNotProvided(): Promise<boolean> {
await this.resultsFileSanitization();
return true;
}
run() {
(async () => {
void (async () => {
// Results file existence
this.events.emit('step', 'CHECK_RESULTS_FILE_EXIST', 'Checking if results file exists');
const resultsFileOriginPath = path.join(this.folderResultsExercise, ClientsSharedConfig.filenames.results);
this.resultsFilePath = path.join(this.folderResultsDojo, ClientsSharedConfig.filenames.results);
let result: boolean;
let result: boolean = true;
if ( fs.existsSync(resultsFileOriginPath) ) {
this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file found', false);
......@@ -102,7 +97,7 @@ class ExerciseResultsSanitizerAndValidator {
} else {
this.events.emit('endStep', 'CHECK_RESULTS_FILE_EXIST', 'Results file not found', false);
result = await this.resultsFileNotProvided();
this.resultsFileSanitization();
}
if ( result ) {
......
import User from './User';
import Exercise from './Exercise';
import User from './User.js';
import Exercise from './Exercise.js';
import * as Gitlab from '@gitbeaker/rest';
......
import User from './User';
import Assignment from './Assignment';
import User from './User.js';
import Assignment from './Assignment.js';
import * as Gitlab from '@gitbeaker/rest';
......
import AssignmentFile from '../../shared/types/Dojo/AssignmentFile';
import Assignment from './Assignment';
import AssignmentFile from '../../shared/types/Dojo/AssignmentFile.js';
import Assignment from './Assignment.js';
import * as Gitlab from '@gitbeaker/rest';
......
import UserRole from './UserRole';
import Exercise from './Exercise';
import Assignment from './Assignment';
import UserRole from './UserRole.js';
import Exercise from './Exercise.js';
import Assignment from './Assignment.js';
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