Skip to content
Snippets Groups Projects
Commit 6adcc7d7 authored by joel.vonderwe's avatar joel.vonderwe
Browse files

Add language to assignment creation

parent 6dd93fe7
No related branches found
No related tags found
No related merge requests found
Pipeline #30215 failed
......@@ -17,6 +17,7 @@ class AssignmentCreateCommand extends CommanderCommand {
this.command
.description('create a new repository for an assignment')
.requiredOption('-n, --name <name>', 'name of the assignment')
.requiredOption('-l, --language <string>', 'main programming language of the assignment')
.option('-i, --members_id <ids...>', 'list of gitlab members ids (teaching staff) to add to the repository')
.option('-u, --members_username <usernames...>', 'list of gitlab members username (teaching staff) to add to the repository')
.option('-t, --template <string>', 'id or url of the template (http/s and ssh urls are possible)')
......@@ -28,7 +29,7 @@ class AssignmentCreateCommand extends CommanderCommand {
}
}
protected async commandAction(options: { name: 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}): Promise<void> {
let members!: Array<GitlabUser> | false;
let templateIdOrNamespace: string | null = null;
let assignment!: Assignment;
......@@ -62,6 +63,18 @@ class AssignmentCreateCommand extends CommanderCommand {
}
assignmentGetSpinner.succeed(`Assignment name "${ options.name }" is available`);
const languagesSpinner: ora.Ora = ora('Checking language support').start();
const languages = await DojoBackendManager.getLanguages();
if ( !languages.includes(options.language) ) {
languagesSpinner.fail(`Language "${ options.language }" is not supported. Choose a supported language or "other"`);
console.log("List of supported languages:")
for (const l of languages) {
console.log(` - ${l}`);
}
return;
}
languagesSpinner.succeed(`Language "${ options.language }" is supported`);
if ( options.template ) {
templateIdOrNamespace = options.template;
......@@ -80,7 +93,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, members, templateIdOrNamespace, sonar);
assignment = await DojoBackendManager.createAssignment(options.name, options.language, members, templateIdOrNamespace, sonar);
const oraInfo = (message: string) => {
ora({
......
......@@ -82,7 +82,7 @@ class DojoBackendManager {
}
}
public async createAssignment(name: 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, verbose: boolean = true): Promise<Assignment> {
const spinner: ora.Ora = ora('Creating assignment...');
if ( verbose ) {
......@@ -92,6 +92,7 @@ class DojoBackendManager {
try {
const response = await axios.post<DojoBackendResponse<Assignment>>(this.getApiUrl(ApiRoute.ASSIGNMENT_CREATE), Object.assign({
name : name,
language : language,
members : JSON.stringify(members),
useSonar : String(sonar)
}, templateIdOrNamespace ? { template: templateIdOrNamespace } : {}));
......@@ -241,6 +242,11 @@ class DojoBackendManager {
const sonar = await axios.get<DojoBackendResponse<{ sonarEnabled: boolean }>>(this.getApiUrl(ApiRoute.SONAR));
return sonar.data.data.sonarEnabled;
}
public async getLanguages() {
const resp = await axios.get<DojoBackendResponse<string[]>>(this.getApiUrl(ApiRoute.LANGUAGES));
return resp.data.data;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment