Term | Description |
---|---|
Organization | A location on GitHub where many repositories and teams can be stored. Translates into a URL when browsing or cloning a repository. |
Working Copy | A clone of a Git repository that you can edit and compile. |
Repository | A location where Git history and code are stored. These are added as "remotes" on a local working copy. |
GHE | GitHub Enterprise |
HLA | High-Level Applications |
Fork | A copy of a repository from one organization to another. For example, github.com/slac-epics/asyn would be a fork of github.com/epics-modules/asyn. GitHub keeps track of forks so the upstream code has the link clearly visible. |
Upstream | Repository that is the origin of a fork. |
We've analyzed different ideas:
Given that slaclab has hundreds of repositories, a naming conflict was very probable. We decided that we needed some level of repository grouping without creating too many repositories.
One idea of grouping would be to have one GitHub organization per SLAC directorate. This idea was abandoned because:
For managing repositories in a per-directorate basis, a best approach would be to use GitHub teams.
Pros and cons for having this model:
A few repositories already receive collaboration from other labs around the world. Moving them to another organization would impact people outside SLAC. For these cases, we might have to keep them untouched. Examples:
The most obvious approach for organizing teams in GitHub would be to use its hierarchical team configuration to mimic what we have at SLAC. Using the embedded group in TID as an example:
This way, repositories maintained by a specific group can easily be configured to the correspondent team.
The easiest way to configure this model is to have the group leaders add their group members to the correct team in GitHub. This would share the effort among several people, reducing the load.
Another model that can use GitHub Teams is creating teams per system. Examples:
Both models can coexist as permission to individual repositories can receive multiple teams and individuals.
As GitHub doesn't allow the distribution of repositories in a hierarchy like file systems do, one way to ease the search is by the use of Topics. Topics are like labels that can be set in each repository. A repository can have multiple Topics.
Once this is set, if you are interested in LLRF, for example, you would search by the LLRF Topic and see only the repositories related to that Topic.
Topics cross organizations, so having more than one organization doesn't impact this search mechanism. For example, checking the rtems topic returns https://github.com/topics/rtems. slaclab is one organization that shows up in the search results, but there are others.
At this moment GitHub allows for searching a Topic in one organization or all organizations available in GitHub. There's no way to configure a search for a group of organizations. To improve the success in searches we could prepend "slac-" to all our Topics, like slac-timing, slac-atca, slac-llrf, etc. This way we ensure that a broad search in GitHub would bring repositories related only to organizations related to SLAC.
Currently we have 2 ticket systems in use for software development/bug tracking: CATER and Jira. GitHub brings its own ticket system called Issues.
CATER won't go away for a long time. So, what do we do regarding Jira and GitHub issues? The use cases could be:
Do we want to keep track of tickets in 3 different tools?
In TID we've been following SLAC's legal request of adding a specific LICENSE file to each repository's top directory, plus a disclamer text in all .c, .cpp., .h, .hpp, .py, .vhd, etc files. There's a Python script that we run that do this automatically: https://github.com/slaclab/surf/blob/pre-release/scripts/apply_slac_license.py. As this comes from SLAC legal, I believe that this would be extended to all code available in SLAC's GitHub organizations.
The problem arises for external code that we fork in our repos. It is very common that the forked code has its own license that we can't modify. TID directors' orientation in this case is that the repository must be made private.
I believe that we need to talk with SLAC legal again to verify more use cases.
Should we standardize for repository naming or keep each team to define them freely? Use cases:
Should the entire SLAC follow the same workflow, with standard names for branches, and standard rules for using each branch? What if different departments have conflicting requirements?
Settings > Rules > Rulesets
[0-9]+.[0-9]+.[0-9]+
Not for the current organization proposal.
ipmiComm and ek9000 module should be used as the reference implementation for these things.
These two modules should implement most or all of the recommended CI checks and whatnot, and adhere to the standards we define.