https://github.com/jhu-oose/roboose that I (@leafac) developed when teaching the course in the Fall of 2019. Some of the links may be broken.This is an archived version of
Roboose automates and serves as runnable documentation for the workflows used to run OOSE.
Besides running the Probot, you may also run tasks using:
$ npm run build $ npm run task <task>
npm run task to see the available tasks.
You may skip the
npm run build step if you replace
npm run task with
npm run dev:task.
Roboose is a Probot that not only responds to GitHub events, but also has an user interface of its own.
instructors): Documentation and credentials
<course>-staff, for example,
2019-staff): Staff forum, grading, and pedagogical material
<course>-students, for example,
2019-students): Public forum and lectures videos.
Individual Student (
<course>-student-<identifier>, for example,
2019-student-jhu-oose-fake-student): Private forum and individual assignments.
<course>-group-<identifier>, for example,
2019-group-fake-group): Group project.
Access Management: For example, teams make it easier to add staff to all Individual Students repositories.
Team Notifications: For example,
@jhu-oose/2019-staff. Roboose adds team notifications like these automatically when relevant.
- Add a command called
groups:checkto check group registration:
- Every registered group in the database must have the members in the team, and the repository with the template files.
- Every student must be in exactly one group.
- Groups must have the right number of members.
- Check assignment submission and notify students who haven’t submitted.
- Add tests to the grader’s repositories to test that they’re following the format and notify them of mistakes before it’s time to publish the grades.
- Add some form of plagiarism detection (Moss?).
- Collect and publish to students statistics on grades
- Both from individual assignments and from group project iterations.
- Calculate statistics similar to those for Approximate Number of Hours Spent on the
- Also show statistics about submission time and correlate with grade.
- Add tests to this repository. Maybe not extensive tests of functionality, because they’d probably be too difficult to write for the benefit they’d bring. But at least check that Prettier is being used.
- On the
initcommand, when creating the students and the staff repositories, also manage issues labels:
assignment, and so forth.
- Delete all other labels.
- Prevent TODOOSE from being forked, because most probably this means the student is about to publish their assignment answers publicly. Roboose can probably listen to an event of the repository being forked and notify the student accordingly.
- Automate running Roboose tasks:
- Start grading assignments when the grace period is over.
- Collect iterations & start grading them when the iteration is due.
- Publish the grades as soon as all the issues in the corresponding milestone are closed (or at least check that all issues are closed before publishing the grades).
- There are new versions of almost every dependency.
- In particular, there’s a new version of TypeScript with support for the
??operators, which may help clean the code base. We can get rid of some
myVariable["field"] !== undefined && myVariable["field"]["other-field"]and some
myVariable || defaultValue, respectively.
- Switch from the use of
JSON.stringify(). Also, there’s special syntax for accessing fields in an object (
- Fix a bug: When students submit their assignments, they may get the capitalization of their GitHub identifier wrong, and it gets stored that way in the database and in the grading files. Fix this by checking the canonical version of the GitHub identifier upon assignment submission. (Remember that assignment submission happens both via the web interface and via a command-line task.)
- When this is fixed, we can get rid of a hack in the
final-gradescommand in which we
slugify()the GitHub identifiers to get them out of the grades files.
- When this is fixed, we can get rid of a hack in the
- In the forms that we have on the webpage, use
kebab-case. This goes for both the
name=""fields in the forms as well as for the
- Close issues on students & groups repositories:
- The “assignment received” issues & the “iteration received” issues as well.
- The grades issues, after the regrade period has ended (one week starting from the time of the grade publication).
- Check that regrade requests aren’t pending.
- Have Roboose follow up on the issues for grading automatically and ask for the status.
- Have Roboose notify the interested parties automatically so that we don’t have to follow everyone’s repositories:
Repository Notify Condition
students& individual student repository
The issue was created by a student.
students& individual student repository & group repository
studentsor individual student or group
The issue was created by the staff.
- On the grades for the group projects, don’t have the grader calculate the total by hand, but parse the file, check for errors in formating, and calculate the total. This is similar to what we already do in the grading of the assignments.
- Create a truly anonymous way for students to communicate with the staff.
- This may be used for asking questions, reporting problems with groups, providing feedback, and so forth.
- To implement this, create a form on the website. The student fills in this form and the data gets put into a private gist, which we hand to the student. This allows the staff to answer and for the student to see the answer, but they remain anonymous. (There’s no way for the student to follow up on the gist without revealing themselves, but they can always ask a follow-up question.)
- Ask for a small version of the final report with the peer reviews for every iteration? This may be overwhelming, but it may help spot problems earlier.
- Ask for feedback on office hours and the rest of the staff (advisors & office hours CAs) earlier in the semester?
- Contribute back to Octokit’s plugin types and remove them from here:
- Then remove the types from here and from Probot.