diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index 5e89eed08e721fbbc13c51648f5340771004f66f..b755b37b80342781747d08c1277adf2e463e3959 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -9,9 +9,10 @@ import * as Gitlab from '@gitbeaker/rest'; import TextStyle from '../../../types/TextStyle.js'; import Config from '../../../config/Config'; import SharedSonarManager from '../../../shared/managers/SharedSonarManager'; +import { Option } from 'commander'; -type CommandOptions = { name: string, language: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean, sonar?: boolean } +type CommandOptions = { name: string, language: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean, sonar?: boolean, gate?: string, profile?: string[] } class AssignmentCreateCommand extends CommanderCommand { @@ -21,6 +22,8 @@ class AssignmentCreateCommand extends CommanderCommand { private templateIdOrNamespace: string | null = null; private assignment!: Assignment; private sonar: boolean = false; + private sonarGate: string | undefined = undefined; + private sonarProfiles: string[] = []; protected defineCommand() { this.command @@ -34,7 +37,9 @@ class AssignmentCreateCommand extends CommanderCommand { .action(this.commandAction.bind(this)); if ( SharedConfig.sonar.enabled ) { - this.command.requiredOption('-s, --sonar', 'add sonar to the code checking process for exercises derived from the assignment'); + this.command.requiredOption('-s, --sonar', 'add sonar to the code checking process for exercises derived from the assignment') + .addOption(new Option('-g, --gate <gate>', 'quality gate for sonar').implies({ sonar: true })) + .addOption(new Option('-p, --profile <profile...>', 'quality profiles for sonar').default([]).implies({ sonar: true })); } } @@ -56,6 +61,9 @@ class AssignmentCreateCommand extends CommanderCommand { throw new Error(); } assignmentGetSonarSpinner.succeed(`Sonar is supported by the server`); + + this.sonarGate = options.gate; + this.sonarProfiles = options.profile ?? []; } const assignmentGetSpinner: ora.Ora = ora('Checking assignment name availability').start(); @@ -103,7 +111,7 @@ class AssignmentCreateCommand extends CommanderCommand { private async createAssignment(options: CommandOptions) { console.log(TextStyle.BLOCK('Please wait while we are creating the assignment (approximately 10 seconds)...')); - this.assignment = await DojoBackendManager.createAssignment(options.name, options.language, this.members!, this.templateIdOrNamespace, this.sonar); + this.assignment = await DojoBackendManager.createAssignment(options.name, options.language, this.members!, this.templateIdOrNamespace, this.sonar, this.sonarGate, this.sonarProfiles); const oraInfo = (message: string) => { ora({ diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index c2c4b66d02f5e8d19a1d4a7c2dafb48c1dd279c1..e82c9037c470d70bd420b61cb313ffc200769d90 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -247,7 +247,7 @@ class DojoBackendManager { } } - public async createAssignment(name: string, language: string, members: Array<Gitlab.UserSchema>, templateIdOrNamespace: string | null, sonar: boolean = false, verbose: boolean = true): Promise<Assignment> { + public async createAssignment(name: string, language: string, members: Array<Gitlab.UserSchema>, templateIdOrNamespace: string | null, sonar: boolean = false, sonarGate: string | undefined = undefined, sonarProfiles: string[] = [], verbose: boolean = true): Promise<Assignment> { const spinner: ora.Ora = ora('Creating assignment...'); if ( verbose ) { @@ -259,7 +259,9 @@ class DojoBackendManager { name : name, language: language, members : JSON.stringify(members), - useSonar: String(sonar) + useSonar: String(sonar), + sonarGate: sonarGate ?? '', + sonarProfiles : JSON.stringify(sonarProfiles), }, templateIdOrNamespace ? { template: templateIdOrNamespace } : {})); if ( verbose ) {