From c126a1d12659d402619fc86be329a4ae0d3d0400 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 ++++-- NodeApp/src/shared | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index 49299cd..af5395e 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -9,6 +9,7 @@ import DojoBackendManager from '../../../managers/DojoBackendManager'; import Toolbox from '../../../shared/helpers/Toolbox'; import SharedConfig from '../../../shared/config/SharedConfig'; import SharedSonarManager from '../../../shared/managers/SharedSonarManager'; +import { Option } from 'commander'; class AssignmentCreateCommand extends CommanderCommand { @@ -26,15 +27,19 @@ 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})); } } - protected async commandAction(options: { name: string, language: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean, sonar?: boolean}): Promise<void> { + protected async commandAction(options: { name: string, language: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean, sonar?: boolean, gate?: string, profile?: string[]}): Promise<void> { let members!: Array<GitlabUser> | false; let templateIdOrNamespace: string | null = null; let assignment!: Assignment; let sonar = false; + let sonarGate: string | undefined = undefined; + let sonarProfiles: string[] = []; // Check access and retrieve data { @@ -57,6 +62,9 @@ class AssignmentCreateCommand extends CommanderCommand { return; } assignmentGetSonarSpinner.succeed(`Sonar is supported by the server`); + + sonarGate = options.gate; + sonarProfiles = options.profile ?? []; } const assignmentGetSpinner: ora.Ora = ora('Checking assignment name availability').start(); @@ -106,7 +114,7 @@ class AssignmentCreateCommand extends CommanderCommand { console.log(chalk.cyan('Please wait while we are creating the assignment (approximately 10 seconds)...')); try { - assignment = await DojoBackendManager.createAssignment(options.name, options.language, members, templateIdOrNamespace, sonar); + assignment = await DojoBackendManager.createAssignment(options.name, options.language, members, templateIdOrNamespace, sonar, sonarGate, sonarProfiles); const oraInfo = (message: string) => { ora({ diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index a1d0343..a346758 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -82,7 +82,7 @@ class DojoBackendManager { } } - public async createAssignment(name: string, language: string, members: Array<GitlabUser>, templateIdOrNamespace: string | null, sonar: boolean = false, verbose: boolean = true): Promise<Assignment> { + public async createAssignment(name: string, language: string, members: Array<GitlabUser>, 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 ) { @@ -94,7 +94,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 ) { diff --git a/NodeApp/src/shared b/NodeApp/src/shared index 7f67e15..102e79d 160000 --- a/NodeApp/src/shared +++ b/NodeApp/src/shared @@ -1 +1 @@ -Subproject commit 7f67e15c6434e78040528a647bf41c40957528c1 +Subproject commit 102e79d9b78d79e495f7b82e5e767eb7898248db -- GitLab