GitHub Organizations & Collaboration d'Équipe
Prérequis
- Maîtriser les bases de Git (commits, branches, fusions)
- Savoir collaborer sur GitHub (Issues, Pull Requests, Code Reviews)
Objectifs d'apprentissage
- Comprendre l'architecture d'une GitHub Organization et la différence avec Enterprise
- Distinguer Owners vs Members et Outside Collaborators
- Créer et structurer des Teams avec permissions en cascade
- Maîtriser Read/Triage/Write/Maintain/Admin et les Custom Roles
- Configurer Branch Protection vs Rulesets, environnements et audit log
1. Pourquoi les Organizations ?
Section titled “1. Pourquoi les Organizations ?”Sans org, 50 devs = 50 comptes, 20 dépôts, invitations manuelles → chaos.
| Sans org | Avec org |
|---|---|
| Permissions par dépôt / par personne | Permissions par Team sur N dépôts |
| Code éparpillé | Centralisé sous github.com/mon-org |
| Pas de 2FA obligatoire | 2FA/SAML forcé org-wide |
| Pas de facturation groupée | Une facture, SSO, audit |
2. Membres et Rôles
Section titled “2. Membres et Rôles”Owners
Section titled “Owners”- Contrôle total : créer/supprimer dépôts, gérer Teams, billing, security.
Members
Section titled “Members”- Collaborent sur les dépôts autorisés, membres de Teams.
Outside Collaborators
Section titled “Outside Collaborators”- Accès dépôt par dépôt (sans passer par une Team) sans être membre de l’org — idéal pour un freelance ponctuel.
| Rôle | Facturation | Accès |
|---|---|---|
| Owner | Payé | Tout |
| Member | Payé | Selon Teams |
| Outside | Gratuit (limite) | 1 dépôt |
Commandes à exécuter
3. Gestion des Teams
Section titled “3. Gestion des Teams”Une Team = groupe → permissions affectées une fois.
HashCode Community├── Core Team (Owners)├── Engineering│ ├── Frontend│ └── Backend├── DevOps├── Security├── Documentation└── ContributorsCascade : Documentation → Write sur workshops, academy → chaque docs-team member hérite.
Visibilité des Teams :
- Visible — listée, membres visibles
- Secret — seulement visible par l’org
Création :
gh api orgs/HashCode-Community/teams -f name="Documentation" -f description="Docs" -f privacy="closed"gh api -X PUT orgs/HashCode-Community/teams/documentation/memberships/aida -f role="member"Commandes à exécuter
4. Niveaux de Permissions
Section titled “4. Niveaux de Permissions”| Niveau | Droits | Pour qui |
|---|---|---|
Read |
Voir, cloner, Issues | Contributors externes |
Triage |
+ gérer Issues/labels, close | Mentors / PM |
Write |
+ push branches, PRs | Engineering |
Maintain |
+ settings du repo (sans delete) | Tech Leads |
Admin |
Tout + secrets, delete, rulesets | Core |
Custom Roles (Enterprise) : créez Deploy qui peut seulement déployer, pas pousser.
Exemple CODEOWNERS avancé :
* @HashCode-Community/core-team*.js @HashCode-Community/frontend/deploy/ @HashCode-Community/devops5. Workflow moderne en équipe
Section titled “5. Workflow moderne en équipe”Règles :
- 1 Issue = 1 Assignee
- 1 PR = 1 auteur + 1–2 reviewers
CODEOWNERS mainjamais push direct
6. Branch Protection & Rulesets
Section titled “6. Branch Protection & Rulesets”Legacy — Branch Protection Rules
Section titled “Legacy — Branch Protection Rules”Sur main :
- Interdire push direct → tout via PR 2. Require approvals (1–2) 3. Require status
checks (CI
ci.ymlverte) 4. Require branches up to date avant merge
gh api repos/HashCode-Community/workshops/branches/main/protection --jq '.required_pull_request_reviews.required_approving_review_count'# 1Nouveau — Rulesets (recommandé)
Section titled “Nouveau — Rulesets (recommandé)”Rulesets = plus fin : s’applique à main, release/*, feature/* avec bypass list.
| Feature | Protection Rules (legacy) | Rulesets |
|---|---|---|
| Cibles | Une branche | Patron refs/heads/* |
| Bypass | Admin seulement | Liste (bots, Leads) |
| Historique linéaire | Oui | + Require signed commits |
Création via UI : Settings → Rules → New Ruleset → Require linear history + Require approvals + Require status checks (ci) → Bypass : @core.
Commandes à exécuter
7. Entreprise, environnements & audit
Section titled “7. Entreprise, environnements & audit”Enterprise vs Organization
Section titled “Enterprise vs Organization”- Organization =
github.com/mon-org(dépôts + teams) - Enterprise = regroupe plusieurs orgs + facturation + SAML/SCIM à l’échelle
SAML SSO & SCIM
Section titled “SAML SSO & SCIM”- SAML → se connecter via Okta/AzureAD, 2FA forcé org-wide
- SCIM → provisionner les Teams auto depuis l’IdP (ajout/retrait membre → team mise à jour)
Environnements & secrets
Section titled “Environnements & secrets”Settings → Environments → production :
- Protection : require 1 reviewer + wait 30 min
- Secrets :
PROD_TOKENaccessible seulement depuismainsurproduction - Deployment branches : seule
mainpeut déployer
jobs: deploy: environment: production runs-on: ubuntu-latestAudit log
Section titled “Audit log”Toute action est journalisée : qui a ajouté un membre, qui a forcé un push.
gh api orgs/HashCode-Community/audit-log --paginate --jq '.[].action' | head# team.add_member, repo.create, branch_protection_rule.createdBilling, Projects & Discussions
Section titled “Billing, Projects & Discussions”Facturation
Section titled “Facturation”- Members facturés (seat) —
Settings → Billing. - Outside Collaborators non facturés sur dépôts publics ; consomment un seat sur les dépôts privés.
- Enterprise : facture regroupée pour N orgs.
Projects (beta) & Discussions
Section titled “Projects (beta) & Discussions”- Projects org-wide : board Kanban multi-dépôts (ex: Roadmap M1→M4).
- Discussions : forum org (Q&A, idées) sans polluer les Issues.
gh project create --owner HashCode-Community --title "Roadmap Harmonisation"gh project item-add 1 --owner HashCode-Community --url https://github.com/HashCode-Community/workshops/issues/19Fiches de révision
Section titled “Fiches de révision”Owner vs Member ?
Cliquer pour révéler la réponseOwner = admin total (billing, delete). Member = collab sur dépôts autorisés. Peu d'Owners (least privilege).
Cliquer pour voir la questionÀ quoi sert une Team ?
Cliquer pour révéler la réponseGrouper des users et donner une permission une fois pour N dépôts (cascade).
Cliquer pour voir la questionWrite vs Maintain ?
Cliquer pour révéler la réponseWrite = push branches/PRs. Maintain = + settings sans delete, gérer rulesets.
Cliquer pour voir la questionProtection vs Ruleset ?
Cliquer pour révéler la réponseProtection = legacy une branche. Ruleset = nouveau, multi-branches, bypass list, plus fin.
Cliquer pour voir la questionEnvironnement production ?
Cliquer pour révéler la réponseSecrets + protection (reviewers + wait timer) + deployment branches.
Cliquer pour voir la questionOutside Collaborator ?
Cliquer pour révéler la réponseAccès à 1 dépôt sans être membre de l'org (freelance).
Cliquer pour voir la questionSAML/SCIM ?
Cliquer pour révéler la réponseSAML = connexion via IdP. SCIM = provision Teams auto.
Cliquer pour voir la questionAudit log ?
Cliquer pour révéler la réponseJournalise team.add_member, push, protection changes — consultable via gh api.
Cliquer pour voir la questionQuiz de validation
Section titled “Quiz de validation”1. Permission pour un externe qui lit et ouvre des Issues mais ne push pas ?
2. Quelle règle empêche le push direct sur main ?
3. Qui décide du merge final ?
4. Quelle commande liste les teams d'une org ?
Cheat Sheet
Section titled “Cheat Sheet”# Org & membresgh api orgs/ORG --jq '{login, name}'gh api orgs/ORG/members --jq '.[].login'gh api orgs/ORG/outside_collaborators --jq '.[].login'
# Teamsgh api orgs/ORG/teams --jq '.[].name'gh api orgs/ORG/teams/TEAM/members --jq '.[].login'gh api orgs/ORG/teams -f name="Docs" -f privacy="closed"
# Permissions & CODEOWNERScat .github/CODEOWNERS
# Protectiongh api repos/ORG/REPO/branches/main/protectiongh api repos/ORG/REPO/rulesets --jq '.[].name'
# Env & auditgh api repos/ORG/REPO/environments/production/protectiongh api orgs/ORG/audit-log --paginate --jq '.[].action' | headMini Challenge
Section titled “Mini Challenge”Carte mentale
Section titled “Carte mentale”Prochaine étape
Section titled “Prochaine étape”Vision org complète. Clôturons par la rétrospective et la certification.