github-education-resources / classroom

GitHub Classroom automates repository creation and access control, making it easy for teachers to distribute starter code and collect assignments on GitHub.
https://classroom.github.com
1.34k stars 564 forks source link

Repository setup planning (WIP) #937

Closed wilfriedE closed 6 years ago

wilfriedE commented 7 years ago

For repository setup, I am going in the direction of having config files under .github/classroom/

I am considering we have three types of repositories: Course Repository, Classroom Repository, Assignment Repository

Course Repository Config (.github/classroom/config.yml)

The Course repository will have configs for course wide setup. e.i #595

org_name: education
active: Summer-2016-p1, Summer-2016-p2
archive: Spring-2016-p1, Spring-2016-p2, Spring-2016-p3, Fall-2015-p1, Fall-2015-p2
ta: @ta1, @ta2, @ta3
issues: 
   -  name            :  Add yourself to Student profiles
      description     : >
                Add your profile to students folder. Following the following format ...
      labels          :  first-pr

Active Being currently active classrooms where are Archive are non active classrooms which repos can be locked. I can also see the above getting overwhelming to maintain however if it's encouraged to only keep track of the archives one wants to see from the github/Classroom Dashboard on here it'll minimize how many classes need to be kept track of.

With this, on github/Classroom we can have a 'Start New Classroom' button that would just take the course repo and clone it into another repo for the new classroom repository

Classroom Repository Config (.github/classroom/config.yml)

The Classroom Repository is for the individual classes. If we go with the idea of cloning the course repo into a Classroom Repository to start a new Classroom then, we will not need to do much regarding configs. However the following configs could be added.

 branches: 
      - name         : master
        default      : true
        protected    : true
      - name         : develop
 groups:
      - name        : TeamA
        members : @student1, @student2
      - name        : TeamB
        members :@student3, @student3
 assignments: 
      - name            : Register your Student Profile
        starter_repo : git@github.com:education/assignments.git
        branch          : assignment1
      - name            : Hello World
        starter_repo : git@github.com:education/assignments.git
        branch          : assignment2

This will be helpful for when creating a new classroom from github/Classroom. We can auto create assignments and groups for students.

Groups will be left out for now, but can be something to enable when support for Student Identifiers comes into play.

Assignment Repository Config (A.K.A Starter Code config) (.github/classroom/config.yml)

The Assignment Repository can specify more specific configs such as issues, labels and groups etc ...

Overall these configs can be anywhere from the Course Repository to Classroom Repository to Assignment Repository. They are just cascaded downward from hierarchical level of importance. Whenever one of the config files gets updated, we could have buttons on github/Classroom to update based on config changes.

I am unsure at the moment how much of this is possible but this is what I've been thinking of so far. And while some of these configuration options are available, I don't think they'll need to be required.

/cc @johndbritton @mozzadrella @joenash @tarebyte @nwoodthorpe

nwoodthorpe commented 7 years ago

@wilfriedE Im really liking the direction this is going, but I think we might be biting off a bit too much at once here. The stuff you've described in this issue solves initialization, assignment reuse, pre-setup teams and pre-setup assignments. I would definitely break this down to solve one problem at a time.

Pre-setup teams will also be tricky to implement without the concept of a "User" in our app, at least until student identifiers ships.

What kind of UI are you visioning for having teachers create these configs at each level?

Does a course config repo need to be in the same org as the classroom?

wilfriedE commented 7 years ago

The stuff you've described in this issue solves initialization, assignment reuse, pre-setup teams and pre-setup assignments. I would definitely break this down to solve one problem at a time.

@nwoodthorpe I agree, I am thinking of breaking them down and tackling the requirements for initialization first then move on to the next items.

I am also thinking that we introduce the concept of a Course in github/Classroom. This will introduce a few other things but I want to know what everyone else thinks about this.

A way in which I think this will be good is that the instructor have the ability to add more courses and the Course template code can be hosted wherever they want. With each course we can have multiple classrooms under them.

What kind of UI are you visioning for having teachers create these configs at each level?

Right now, what I envisioned is that the configs are in the repositories and all the teachers will have to do from github/Classroom is to click on a button e.i 'Update Course Config', 'Update Classroom Configs' and we github/Classroom takes care of updating the resources accordingly.

After the course is initialized, the teacher can then just 'Start a New Classroom'. This will replicate course repo into a specific repo for the classroom. This however might not be necessary, but the benefits of this way is that the configs can be overwritten for the respective classroom to be more specific. Let's say the instructor wants the different classrooms to be accessible to their corresponding TAs or have slightly different assignments/issues for them. I think it can be a feature though not necessarily a requirement.

Does a course config repo need to be in the same org as the classroom?

The Course config can be located anywhere. Let's take for example a University that has a GitHub organization which contains all kinds of Course repos. From github/Classroom, a Teacher can 'Start New Course' and initializes that course using the Course repo from the University organization. This will run through the configs and set things up as needed. At this moment though this portion isn't fully fleshed out yet needs more discussion.

How we can facilitate this?

I think we can have it so that on github/Classroom we have a way to help generate the configs for the teachers.

mozzadrella commented 7 years ago

@wilfriedE -see where you're coming from on the "Course Repositories" as an organizing principle.

Let's discuss tomorrow ✨

wilfriedE commented 7 years ago

After today's discussions I've decided on the following as a starting point.

Milestone 1: Assignment Initialization

Initialize assignment issues from private branch For this, we'll be expecting a github-classroom branch in the starter code which will contain the configurations regarding an Assignment. It will be treated as a private branch and will not be cloned when accepting assignment invitation.

Initialize assignment labels from private branch The list of labels will be in a labels folder which contains all of the labels. Each file representing a label with yaml front matter indicating label name and color.

Assign labels to assignments on initialization In this step, we'll have a labels field in the issues front matter. And using this, we'll create labels for the issues.

Milestone 2: Group Assignment Repo Initialization + Delayed Repo Setup

/cc @mozzadrella @johndbritton @tarebyte @nwoodthorpe

mozzadrella commented 7 years ago

Are pre-built issues part of this jawn?

wilfriedE commented 7 years ago

@mozzadrella yep, that'll be implemented as part of Initialize assignment issues from private branch

stale[bot] commented 6 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] commented 6 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.