Ketika bekerja sendirian, sebuah akun GitHub personal sudah lebih dari cukup. Tapi begitu kamu memimpin tim atau membangun startup, kamu butuh cara yang lebih terstruktur untuk mengelola banyak repository, mengatur siapa yang bisa mengakses apa, dan menstandarkan proses di seluruh tim. Di sinilah GitHub Organizations berperan.
Apa itu GitHub Organizations?
GitHub Organization adalah akun bersama di GitHub yang bisa dimiliki oleh beberapa orang. Repository, team, dan pengaturan dikelola di bawah satu atap organisasi — bukan di akun personal anggota.
Keuntungan Organizations vs Personal Account:
- Repository milik org, bukan personal — tidak hilang jika anggota pergi
- Kontrol akses yang granular per tim dan per repository
- Audit log semua aktivitas
- Fitur keamanan tambahan (SAML SSO, IP allowlist di plan berbayar)
Membuat dan Setup Organization
- Klik foto profil → Your organizations → New organization
- Pilih plan (Free sudah sangat powerful untuk tim kecil)
- Isi nama org dan email billing
Pengaturan Awal yang Disarankan
Di Organization Settings:
Member privileges:
✅ Default repository permission: Read (anggota bisa lihat semua repo)
✅ Allow members to create repositories: Internal/Private only
✅ Allow forking of private repositories: sesuai kebutuhan
Repository defaults:
✅ Default branch: main
✅ Require signed commits
Security:
✅ Require two-factor authentication for everyone
Teams — Grup Akses yang Terorganisir
Teams adalah cara mengelompokkan anggota dan memberikan mereka akses ke sekumpulan repository.
Struktur Teams yang Umum
Organization: startup-kita
├── @startup-kita/backend-team
│ ├── repo: api-service
│ ├── repo: database-migrations
│ └── permission: Write
├── @startup-kita/frontend-team
│ ├── repo: web-app
│ └── permission: Write
├── @startup-kita/devops
│ ├── repo: infrastructure
│ ├── repo: api-service (juga)
│ └── permission: Admin
└── @startup-kita/read-only-stakeholders
├── semua repo
└── permission: Read
Membuat Team via GitHub CLI
# Install GitHub CLI: https://cli.github.com
# Buat team
gh api orgs/startup-kita/teams \
--method POST \
-f name="backend-team" \
-f description="Tim Backend" \
-f privacy="closed"
# Tambahkan member ke team
gh api orgs/startup-kita/teams/backend-team/memberships/username \
--method PUT \
-f role="member"
# Berikan team akses ke repository
gh api orgs/startup-kita/teams/backend-team/repos/startup-kita/api-service \
--method PUT \
-f permission="push"
Permission Levels
| Level | Hak Akses |
|---|---|
| Read | Clone, pull, buka issues |
| Triage | Read + kelola issues/PR tanpa bisa push |
| Write | Read + push ke branch non-protected |
| Maintain | Write + kelola repo settings (kecuali sensitif) |
| Admin | Full access termasuk hapus repo |
Repository Settings untuk Tim
Branch Protection Rules
Branch: main
✅ Require a pull request before merging
✅ Required approvals: 2
✅ Dismiss stale reviews when new commits pushed
✅ Require review from Code Owners
✅ Require status checks to pass
✅ CI / test
✅ CI / lint
✅ Require branches to be up to date before merging
✅ Require signed commits
✅ Include administrators (jangan bisa bypass)
✅ Restrict who can push to matching branches
→ Allow: @startup-kita/devops
CODEOWNERS per Repository
# .github/CODEOWNERS
* @startup-kita/tech-leads
/src/ @startup-kita/backend-team
/frontend/ @startup-kita/frontend-team
/infrastructure/ @startup-kita/devops
*.sql @startup-kita/dba-team
Monorepo vs Multirepo
Multirepo (Default)
Satu repository per service/aplikasi:
github.com/startup-kita/api-service
github.com/startup-kita/web-app
github.com/startup-kita/mobile-app
github.com/startup-kita/infrastructure
Keuntungan: Isolasi yang jelas, permission per repo mudah, CI/CD independen
Kerugian: Sulit berbagi kode antar repo, perubahan lintas-repo butuh banyak PR
Monorepo
Semua kode dalam satu repository:
github.com/startup-kita/monorepo
├── apps/
│ ├── api/
│ ├── web/
│ └── mobile/
├── packages/
│ ├── shared-types/
│ ├── ui-components/
│ └── utils/
└── infrastructure/
Keuntungan: Mudah berbagi kode, atomic commit lintas aplikasi, satu PR bisa update semua
Kerugian: Repository besar, CI/CD lebih kompleks, butuh tool khusus (Nx, Turborepo)
Tool populer untuk Monorepo:
- Nx — untuk JavaScript/TypeScript
- Turborepo — dari Vercel, lebih ringan
- Lerna — khusus untuk npm packages
- Bazel — untuk polyglot (multi-bahasa)
Audit Log dan Keamanan
Di Organization Settings → Audit log:
Semua aktivitas tercatat:
- Siapa yang di-add/remove dari tim
- Repository yang dibuat/dihapus
- Permission yang diubah
- Secret yang diakses
- Branch protection yang diubah
Security Best Practices untuk Organizations
# 1. Wajibkan 2FA untuk semua anggota
# Settings → Authentication security → Require two-factor authentication
# 2. Review anggota secara berkala
gh api orgs/startup-kita/members --paginate | jq '.[].login'
# 3. Hapus anggota yang sudah tidak aktif
gh api orgs/startup-kita/members/username --method DELETE
# 4. Review OAuth apps yang punya akses ke org
# Settings → Third-party access → OAuth app policy
GitHub Actions untuk Organization-Wide Policies
Buat reusable workflows di repository khusus (.github repository) yang bisa dipanggil oleh semua repository di org:
# di repo: startup-kita/.github
# file: workflow-templates/ci-template.yml
name: CI Template
on:
workflow_call:
inputs:
node-version:
required: false
type: string
default: '20'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: $
- run: npm ci
- run: npm test
Di repository lain dalam org:
jobs:
ci:
uses: startup-kita/.github/.github/workflows/ci-template.yml@main
with:
node-version: '20'
Kesimpulan
GitHub Organizations memberikan fondasi yang kuat untuk mengelola kode dan kolaborasi di tingkat perusahaan. Dengan Teams, Branch Protection Rules, dan CODEOWNERS, kamu bisa memastikan kode yang masuk ke production sudah melalui proses review yang tepat oleh orang yang tepat.
Di artikel berikutnya, kita bahas GitHub Actions untuk CI/CD — membangun pipeline otomatis untuk testing dan deployment langsung dari GitHub.
Kiki/🎮🍉⌨️🍩💻