Skip to content
Commencer

GitHub Organizations & Collaboration d'Équipe

Niveau : Intermediate
Durée : 1h30

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
SlidesPDFPPTX

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
<pre dir="ltr" class="mermaid">flowchart TD Org[HashCode Community - Organization] Org --&gt; Repos[Repositories] Org --&gt; Members[Collaborateurs] Org --&gt; Teams[Équipes] Repos --&gt; W[workshops] Repos --&gt; OS[operation-sentinel] Teams --&gt; Eng[Engineering] Teams --&gt; Sec[Security] Teams --&gt; Doc[Documentation]</pre>
  • Contrôle total : créer/supprimer dépôts, gérer Teams, billing, security.
  • Collaborent sur les dépôts autorisés, membres de Teams.
  • 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

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

Une Team = groupe → permissions affectées une fois.

HashCode Community
├── Core Team (Owners)
├── Engineering
│ ├── Frontend
│ └── Backend
├── DevOps
├── Security
├── Documentation
└── Contributors

Cascade : 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 :

Terminal window
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

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

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/devops

<pre dir="ltr" class="mermaid">flowchart LR Issue[1. Issue] --&gt; Assign[2. Assignation] Assign --&gt; Branch[3. Branche] Branch --&gt; Commit[4. Commits &amp; Push] Commit --&gt; PR[5. Pull Request] PR --&gt; Review[6. Review &amp; Approval] Review --&gt; Merge[7. Merge &amp; Tag]</pre>

Règles :

  • 1 Issue = 1 Assignee
  • 1 PR = 1 auteur + 1–2 reviewers CODEOWNERS
  • main jamais push direct

Sur main :

  1. Interdire push direct → tout via PR 2. Require approvals (1–2) 3. Require status checks (CI ci.yml verte) 4. Require branches up to date avant merge
Terminal window
gh api repos/HashCode-Community/workshops/branches/main/protection --jq '.required_pull_request_reviews.required_approving_review_count'
# 1

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

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

  • Organization = github.com/mon-org (dépôts + teams)
  • Enterprise = regroupe plusieurs orgs + facturation + SAML/SCIM à l’échelle
  • SAML → se connecter via Okta/AzureAD, 2FA forcé org-wide
  • SCIM → provisionner les Teams auto depuis l’IdP (ajout/retrait membre → team mise à jour)

Settings → Environments → production :

  • Protection : require 1 reviewer + wait 30 min
  • Secrets : PROD_TOKEN accessible seulement depuis main sur production
  • Deployment branches : seule main peut déployer
.github/workflows/deploy.yml
jobs:
deploy:
environment: production
runs-on: ubuntu-latest

Toute action est journalisée : qui a ajouté un membre, qui a forcé un push.

Terminal window
gh api orgs/HashCode-Community/audit-log --paginate --jq '.[].action' | head
# team.add_member, repo.create, branch_protection_rule.created

  • 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 org-wide : board Kanban multi-dépôts (ex: Roadmap M1→M4).
  • Discussions : forum org (Q&A, idées) sans polluer les Issues.
Terminal window
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/19

Question

Owner vs Member ?

Cliquer pour révéler la réponse
Réponse

Owner = admin total (billing, delete). Member = collab sur dépôts autorisés. Peu d'Owners (least privilege).

Cliquer pour voir la question
Question

À quoi sert une Team ?

Cliquer pour révéler la réponse
Réponse

Grouper des users et donner une permission une fois pour N dépôts (cascade).

Cliquer pour voir la question
Question

Write vs Maintain ?

Cliquer pour révéler la réponse
Réponse

Write = push branches/PRs. Maintain = + settings sans delete, gérer rulesets.

Cliquer pour voir la question
Question

Protection vs Ruleset ?

Cliquer pour révéler la réponse
Réponse

Protection = legacy une branche. Ruleset = nouveau, multi-branches, bypass list, plus fin.

Cliquer pour voir la question
Question

Environnement production ?

Cliquer pour révéler la réponse
Réponse

Secrets + protection (reviewers + wait timer) + deployment branches.

Cliquer pour voir la question
Question

Outside Collaborator ?

Cliquer pour révéler la réponse
Réponse

Accès à 1 dépôt sans être membre de l'org (freelance).

Cliquer pour voir la question
Question

SAML/SCIM ?

Cliquer pour révéler la réponse
Réponse

SAML = connexion via IdP. SCIM = provision Teams auto.

Cliquer pour voir la question
Question

Audit log ?

Cliquer pour révéler la réponse
Réponse

Journalise team.add_member, push, protection changes — consultable via gh api.

Cliquer pour voir la question

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 ?


Terminal window
# Org & membres
gh api orgs/ORG --jq '{login, name}'
gh api orgs/ORG/members --jq '.[].login'
gh api orgs/ORG/outside_collaborators --jq '.[].login'
# Teams
gh 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 & CODEOWNERS
cat .github/CODEOWNERS
# Protection
gh api repos/ORG/REPO/branches/main/protection
gh api repos/ORG/REPO/rulesets --jq '.[].name'
# Env & audit
gh api repos/ORG/REPO/environments/production/protection
gh api orgs/ORG/audit-log --paginate --jq '.[].action' | head

Votre Progression0%


Vision org complète. Clôturons par la rétrospective et la certification.

HashCode Workshops
Part of the JoinHashCode ecosystem

Ctrl + K Rechercher dans les workshops