From dfe11ad2c7489d7578b9cc1910ff850c911f1c3d Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Tue, 7 May 2024 16:21:59 +0200 Subject: [PATCH] Add profiles/gate options for sonar --- .../subcommands/AssignmentCreateCommand.ts | 14 +++++++++++--- NodeApp/src/managers/DojoBackendManager.ts | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index 5e89eed..b755b37 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 c2c4b66..e82c903 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 ) { -- GitLab