Commit abd509bb authored by Marek Veselý's avatar Marek Veselý
Browse files

feat: add commands.yml and command channel type

### Additions

- added new `ChannelType`: `command`

Closes #552, inject/inject-issues#337

Related to inject/inject-issues#336
parent aac3fc30
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
## 0.24.8

Issues: inject/backend#552

Added new channel for executed commands within sandbox exercises and a new optional file
for milestone evaluation based on the executed commands.

### channels.yml

- added new optional channel type `command` (only makes sense for sandbox exercises)

### commands.yml

- added new optional file `commands.yml` (only makes sense for sandbox exercises)

## 0.24.7
Issues: inject/backend#542

+13 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ tools.yml
roles.yml
questionnaires.yml
objectives.yml
commands.yml
```

`content/`, `files/`, `drive/`, and `llm/` directories are optional.
@@ -69,6 +70,7 @@ Every field is required unless a default value is specified or it is stated othe
- [roles.yml](#rolesyml)
- [questionnaires.yml](#questionnairesyml)
- [objectives.yml](#objectivesyml)
- [commands.yml](#commandsyml)

### Common definitions

@@ -256,6 +258,7 @@ Currently supported channel types:
  Injects _cannot_ be specified with this type and there can be at most _one channel_ with this type in a definition
- `email` - injects meant to represent email communication
- `form` - questionnaires will be sent to this channel
- `command` - sandbox command logs will be sent to this channel

_At most one channel_ of a specific type can exist (except the `info` channels).
In other words, there cannot be multiple channels with type `email`.
@@ -515,3 +518,13 @@ Each questionnaire has the following fields:
- **min**: _int, default=1_ - optional field that specifies the minimum length of the answer to be accepted
- **max**: _int, default=-1_ - optional field that specifies the maximum length of the answer to be accepted,
  `-1` signifies no requirement

## commands.yml

This file contains all expected sandbox commands.
Each command has the following fields:

- **name**: _string, unique_ - name of the command
- **command**: _string_ - the command that is expected to be run in the sandbox
- **regex**: _bool, default=False_ - determines whether `command` is used as a regex when matching the command output
- **control**: _[control](#control), default=empty_ - milestone modifications triggered when the matched command is logged
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ exercise_duration: 60
show_exercise_time: False
show_exercise_overview: True
instructor_required: True
version: 0.24.7
version: 0.24.8
description: Some description about this definition.
instructor_notes: { content: Some notes about this definition }
target_audience: Some description of target audience
+24 −0
Original line number Diff line number Diff line
- name: information
  display_name: Exercise Information
  description: This channel contains information about the exercise.
  type: info

- name: tv
  display_name: TV Channel
  type: info

- name: social_media
  display_name: Social Media Feed
  type: info

- name: tools
  display_name: Tools
  type: tool

- name: questionnaires
  display_name: Questionnaires
  type: form

- name: commands
  display_name: Commands
  type: command
+8 −0
Original line number Diff line number Diff line
- name: test command
  command: echo "This is a test command."
  control: { activate_milestone: [ test_command_executed ] }

- name: test regex command
  command: ls.*
  regex: True
  control: { activate_milestone: [ test_regex_command_executed ] }
 No newline at end of file
Loading