diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts index fcf8a53eafd7b6231c5f25555b80e4ceb2380363..7eb8f4cd3d27f840f302d7a0ca578636437b82d5 100644 --- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts +++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts @@ -19,6 +19,7 @@ class AssignmentCreateCommand extends CommanderCommand { private members!: Array<Gitlab.UserSchema> | undefined; private templateIdOrNamespace: string | null = null; private assignment!: Assignment; + private sonar: boolean = false; protected defineCommand() { this.command @@ -45,6 +46,14 @@ class AssignmentCreateCommand extends CommanderCommand { throw new Error(); } + const assignmentGetSonarSpinner: ora.Ora = ora('Checking server sonar status').start(); + this.sonar = (SharedConfig.sonar.enabled ? options.sonar ?? false : false); + if ( this.sonar && !(await DojoBackendManager.isSonarEnabled()) ) { + assignmentGetSonarSpinner.fail(`Sonar is currently not supported by the server. Disable sonar integration or try again later.`); + return; + } + assignmentGetSonarSpinner.succeed(`Sonar is supported by the server`); + const assignmentGetSpinner: ora.Ora = ora('Checking assignment name availability').start(); if ( await DojoBackendManager.getAssignment(options.name) ) { assignmentGetSpinner.fail(`Assignment name "${ options.name }" is already taken. Please choose another one.`); @@ -68,9 +77,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)...')); - const sonar = (SharedConfig.sonar.enabled ? options.sonar ?? false : false); - - this.assignment = await DojoBackendManager.createAssignment(options.name, this.members!, this.templateIdOrNamespace, sonar); + this.assignment = await DojoBackendManager.createAssignment(options.name, this.members!, this.templateIdOrNamespace, this.sonar); const oraInfo = (message: string) => { ora({ diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts index 4d1fe1d5e172acc4b366244db7a134825362ae5b..64f048e611ad2372d3f6bbda6e5917964f3208f5 100644 --- a/NodeApp/src/managers/DojoBackendManager.ts +++ b/NodeApp/src/managers/DojoBackendManager.ts @@ -258,7 +258,7 @@ class DojoBackendManager { const response = await axios.post<DojoBackendResponse<Assignment>>(DojoBackendHelper.getApiUrl(ApiRoute.ASSIGNMENT_CREATE), Object.assign({ name : name, members: JSON.stringify(members), - sonar : sonar + useSonar : sonar }, templateIdOrNamespace ? { template: templateIdOrNamespace } : {})); if ( verbose ) { @@ -374,6 +374,11 @@ class DojoBackendManager { } } + public async isSonarEnabled() { + const sonar = await axios.get<DojoBackendResponse<{ sonarEnabled: boolean }>>(this.getApiUrl(ApiRoute.SONAR)); + return sonar.data.data.sonarEnabled; + } + public async createTag(name: string, type: string, verbose: boolean = true): Promise<Tag | undefined> { const spinner: ora.Ora = ora('Creating tag...');