Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ Contents:
coursepath: <base path of course in gitlab>
# if you want to generate directly in coursepath, do not define semesterpath
semesterpath: <gitlab subgroup of coursepath used for this semester>
useCoursenameAsPrefix: <false|true> # if true, repos start with <baseNameOfCourse>-<assignment>, default false
students: # needs only to defined if generating per student
<array of student specifier>
groups: # if students are allowed to work in groups
Expand Down Expand Up @@ -118,12 +119,22 @@ Contents:
groups: <add or redefine groups>
```

Naming behavior:

- `useCoursenameAsPrefix: false` (default)
- student repo: `<assignment>-<student>` (example: `blatt1-max_mustermann_at_hm.edu`)
- group repo: `<assignment>-<group>` (example: `blatt1-grp01`)
- `useCoursenameAsPrefix: true`
- student repo: `<baseNameOfCourse>-<assignment>-<student>` (example: `algdati-blatt1-max_mustermann_at_hm.edu`)
- group repo: `<baseNameOfCourse>-<assignment>-<group>` (example: `algdati-blatt1-grp01`)

Example:

```.yaml
algdati:
coursepath: algdati
semesterpath: semester/ob-20ws
useCoursenameAsPrefix: true
students:
- 12334 # GitLab ID
- ob@glabs.io # email address
Expand Down
49 changes: 35 additions & 14 deletions config/assignment.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,21 @@ func GetAssignmentConfig(course, assignment string, onlyForStudentsOrGroups ...s
}

assignmentConfig := &AssignmentConfig{
Course: course,
Name: assignment,
Path: path,
URL: url,
Per: per,
Description: description(assignmentKey),
ContainerRegistry: containerRegistry,
AccessLevel: accessLevel(assignmentKey),
Students: students(per, course, assignment, onlyForStudentsOrGroups...),
Groups: groups(per, course, assignment, onlyForStudentsOrGroups...),
Startercode: startercode(assignmentKey),
Clone: clone(assignmentKey),
Release: release,
Seeder: seeder(assignmentKey),
Course: course,
Name: assignment,
UseCoursenameAsPrefix: viper.GetBool(course + ".useCoursenameAsPrefix"),
Path: path,
URL: url,
Per: per,
Description: description(assignmentKey),
ContainerRegistry: containerRegistry,
AccessLevel: accessLevel(assignmentKey),
Students: students(per, course, assignment, onlyForStudentsOrGroups...),
Groups: groups(per, course, assignment, onlyForStudentsOrGroups...),
Startercode: startercode(assignmentKey),
Clone: clone(assignmentKey),
Release: release,
Seeder: seeder(assignmentKey),
}

return assignmentConfig
Expand All @@ -83,6 +84,26 @@ func (cfg *AssignmentConfig) RepoSuffix(student *Student) string {
return ""
}

func (cfg *AssignmentConfig) RepoBaseName() string {
if cfg.UseCoursenameAsPrefix {
return fmt.Sprintf("%s-%s", cfg.Course, cfg.Name)
}

return cfg.Name
}

func (cfg *AssignmentConfig) RepoNameWithSuffix(suffix string) string {
return fmt.Sprintf("%s-%s", cfg.RepoBaseName(), suffix)
}

func (cfg *AssignmentConfig) RepoNameForStudent(student *Student) string {
return cfg.RepoNameWithSuffix(cfg.RepoSuffix(student))
}

func (cfg *AssignmentConfig) RepoNameForGroup(group *Group) string {
return cfg.RepoNameWithSuffix(group.Name)
}

func assignmentPath(course, assignment string) string {
path := viper.GetString(course + ".coursepath")
if semesterpath := viper.GetString(course + ".semesterpath"); len(semesterpath) > 0 {
Expand Down
2 changes: 2 additions & 0 deletions config/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ func (cfg *AssignmentConfig) Show() {
fmt.Print(aurora.Sprintf(aurora.Cyan(`
Course: %s
Assignment: %s
Coursename-Prefix: %t
Per: %s
Base-URL: %s
Description: %s
Expand All @@ -148,6 +149,7 @@ Release: %s
`),
aurora.Yellow(cfg.Course),
aurora.Yellow(cfg.Name),
aurora.Yellow(cfg.UseCoursenameAsPrefix),
aurora.Yellow(cfg.Per),
aurora.Yellow(cfg.URL),
aurora.Yellow(cfg.Description),
Expand Down
29 changes: 15 additions & 14 deletions config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ type Student struct {
}

type AssignmentConfig struct {
Course string
Name string
Path string
URL string
Per Per
Description string
ContainerRegistry bool
AccessLevel AccessLevel
Students []*Student
Groups []*Group
Startercode *Startercode
Clone *Clone
Release *Release
Seeder *Seeder
Course string
Name string
UseCoursenameAsPrefix bool
Path string
URL string
Per Per
Description string
ContainerRegistry bool
AccessLevel AccessLevel
Students []*Student
Groups []*Group
Startercode *Startercode
Clone *Clone
Release *Release
Seeder *Seeder
}

type Per string
Expand Down
4 changes: 2 additions & 2 deletions config/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ func (cfg *AssignmentConfig) Urls(assignment bool) {
fmt.Println(cfg.URL)
} else if cfg.Per == PerStudent {
for _, stud := range cfg.Students {
fmt.Printf("%s/%s-%s\n", cfg.URL, cfg.Name, cfg.RepoSuffix(stud))
fmt.Printf("%s/%s\n", cfg.URL, cfg.RepoNameForStudent(stud))
}
} else { // PerGroup
for _, group := range cfg.Groups {
fmt.Printf("%s/%s-%s\n", cfg.URL, cfg.Name, group.Name)
fmt.Printf("%s/%s\n", cfg.URL, cfg.RepoNameForGroup(group))
}
}
}
4 changes: 2 additions & 2 deletions git/clone.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ func Clone(cfg *config.AssignmentConfig, noSpinner bool) {
func cloneurl(cfg *config.AssignmentConfig, suffix string) string {
return fmt.Sprintf("%s/%s-%s",
strings.Replace(strings.Replace(cfg.URL, "https://", "git@", 1), "/", ":", 1),
cfg.Name, suffix)
cfg.RepoBaseName(), suffix)
}

func localpath(cfg *config.AssignmentConfig, suffix string) string {
return fmt.Sprintf("%s/%s-%s", cfg.Clone.LocalPath, cfg.Name, suffix)
return fmt.Sprintf("%s/%s", cfg.Clone.LocalPath, cfg.RepoNameWithSuffix(suffix))
}

func clone(localpath, branch, cloneurl string, auth ssh.AuthMethod, force bool, noSpinner bool) {
Expand Down
5 changes: 2 additions & 3 deletions gitlab/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ func (c *Client) archivePerStudent(assignmentCfg *config.AssignmentConfig, unarc
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand All @@ -60,7 +59,7 @@ func (c *Client) archivePerGroup(assignmentCfg *config.AssignmentConfig, unarchi
}

for _, grp := range assignmentCfg.Groups {
projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand Down
5 changes: 2 additions & 3 deletions gitlab/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ func (c *Client) deletePerStudent(assignmentCfg *config.AssignmentConfig, assign
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
c.delete(assignmentGroupID, name)
c.delete(assignmentGroupID, assignmentCfg.RepoNameForStudent(student))
}
}

Expand All @@ -46,7 +45,7 @@ func (c *Client) deletePerGroup(assignmentCfg *config.AssignmentConfig, assignme
}

for _, grp := range assignmentCfg.Groups {
c.delete(assignmentGroupID, assignmentCfg.Name+"-"+grp.Name)
c.delete(assignmentGroupID, assignmentCfg.RepoNameForGroup(grp))
}
}

Expand Down
4 changes: 2 additions & 2 deletions gitlab/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ func (c *Client) generatePerStudent(assignmentCfg *config.AssignmentConfig, assi
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
name := assignmentCfg.RepoNameForStudent(student)
c.generate(assignmentCfg, assignmentGroupID, name, []*config.Student{student}, starterrepo)
}
}
Expand All @@ -232,6 +232,6 @@ func (c *Client) generatePerGroup(assignmentCfg *config.AssignmentConfig, assign
}

for _, grp := range assignmentCfg.Groups {
c.generate(assignmentCfg, assignmentGroupID, assignmentCfg.Name+"-"+grp.Name, grp.Members, starterrepo)
c.generate(assignmentCfg, assignmentGroupID, assignmentCfg.RepoNameForGroup(grp), grp.Members, starterrepo)
}
}
5 changes: 2 additions & 3 deletions gitlab/protect.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,7 @@ func (c *Client) protectToBranchPerStudent(assignmentCfg *config.AssignmentConfi
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand All @@ -141,7 +140,7 @@ func (c *Client) protectToBranchPerGroup(assignmentCfg *config.AssignmentConfig)
}

for _, grp := range assignmentCfg.Groups {
projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand Down
5 changes: 2 additions & 3 deletions gitlab/setaccess.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,7 @@ func (c *Client) setaccessPerStudent(assignmentCfg *config.AssignmentConfig) {
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand All @@ -181,7 +180,7 @@ func (c *Client) setaccessPerGroup(assignmentCfg *config.AssignmentConfig) {
}

for _, grp := range assignmentCfg.Groups {
projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand Down
5 changes: 2 additions & 3 deletions gitlab/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@ func (c *Client) updatePerStudent(assignmentCfg *config.AssignmentConfig, starte
}

for _, student := range assignmentCfg.Students {
name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand All @@ -117,7 +116,7 @@ func (c *Client) updatePerGroup(assignmentCfg *config.AssignmentConfig, starterr
}

for _, grp := range assignmentCfg.Groups {
projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
Expand Down
Loading