Pertemuan Pertemuan 30

Best Practices, Security & Quiz 3.4-3.5

Pertemuan 30 / 32
Advanced Modul 3.4-3.5 60 menit
Pertemuan 30

Best Practices, Security & Quiz 3.4-3.5

Tujuan Pembelajaran

  • Memahami best practices dalam penggunaan Git
  • Mengenal aspek keamanan repository
  • Mampu melakukan audit keamanan repo
  • Mengevaluasi pemahaman modul 3.4-3.5

Materi Inti

A. Git Best Practices

1. Atomic Commits

Satu commit harus berisi satu perubahan logis yang utuh. Jangan mencampur fitur baru, bugfix, dan refactoring dalam satu commit.

# BAIK: atomic commits
git commit -m "feat: tambah validasi email di form login"
git commit -m "fix: perbaiki typo di halaman about"
git commit -m "refactor: pisahkan fungsi auth ke file terpisah"

# BURUK: commit campur aduk
git commit -m "tambah validasi, perbaiki typo, refactor auth"

2. Pesan Commit yang Baik

<tipe>(<scope>): <subject>       <- max 50 karakter

<body>                           <- jelaskan MENGAPA, bukan APA
                                    (opsional, wrap 72 karakter)

<footer>                         <- referensi issue, breaking changes
                                    (opsional)

Contoh pesan commit lengkap:

feat(auth): tambah validasi email di form registrasi

Sebelumnya user bisa mendaftar dengan format email tidak valid
(misalnya "abc" tanpa @). Validasi ini menggunakan regex standar
RFC 5322 untuk memastikan format email benar sebelum submit.

Closes #42

3. Branching Discipline

  • Jangan commit langsung ke main — selalu gunakan feature branch
  • Branch protection: aktifkan di GitHub Settings
  • Hapus branch setelah merge
  • Gunakan naming convention: feature/, fix/, hotfix/, docs/

4. Regular Push

# Push secara regular untuk backup dan kolaborasi
git push origin feature/login

# Jangan menumpuk banyak commit lokal tanpa push

5. Gunakan .gitignore Sejak Awal

Buat .gitignore sebagai langkah pertama di project baru. Template tersedia di https://github.com/github/gitignore.

B. Security Best Practices

1. Jangan Pernah Commit Secrets

# File yang TIDAK boleh di-commit:
# - .env (environment variables, API keys)
# - credentials.json
# - *.pem, *.key (private keys)
# - config/secrets.yml

# Pastikan ada di .gitignore SEBELUM membuat file
echo ".env" >> .gitignore
echo "*.pem" >> .gitignore
echo "credentials.json" >> .gitignore

2. Cari Secrets yang Tidak Sengaja Ter-commit

# Cek apakah file .env pernah ada di history
git log --all --full-history -- "*.env"

# Cari pattern sensitif di kode
grep -r "API_KEY\|SECRET\|PASSWORD" --include="*.js" --include="*.py"

# Cari hardcoded credentials
grep -rn "password\s*=" --include="*.js" --include="*.py" --include="*.ts"

3. Recovery Jika Secrets Sudah Ter-commit

# LANGKAH 1 (PALING PENTING): Rotate/ubah secret segera!
# Ubah API key, password, atau token yang bocor

# LANGKAH 2: Hapus dari history menggunakan git filter-repo
pip install git-filter-repo
git filter-repo --path .env --invert-paths

# LANGKAH 3: Force push (koordinasi dengan tim)
git push --force-with-lease

Penting: Menghapus dari history saja TIDAK cukup. Secret yang sudah pernah publik harus dianggap compromised dan harus diganti.

4. Branch Protection Rules

Di GitHub Settings > Branches > Branch protection rules:

  • Require pull request reviews — minimal 1 reviewer sebelum merge
  • Require status checks — CI harus pass sebelum merge
  • Require signed commits — verifikasi identitas committer
  • Restrict who can push — hanya maintainer yang bisa push ke main

5. CODEOWNERS

File CODEOWNERS menentukan siapa yang otomatis diminta review untuk file tertentu:

# .github/CODEOWNERS
*.js       @frontend-team
*.css      @frontend-team
*.py       @backend-team
/docs/     @docs-team
/security/ @security-team

Demonstrasi: Audit Keamanan Repo

cd proyek-website  # atau project kamu

# Audit 1: Cek file sensitif di history
echo "=== Cek file .env di history ==="
git log --all --full-history -- "*.env" "*.pem" "*.key"

# Audit 2: Cek secrets di kode
echo "=== Cek hardcoded secrets ==="
grep -rn "API_KEY\|SECRET\|PASSWORD\|TOKEN" \
  --include="*.js" --include="*.py" --include="*.ts" \
  --include="*.json" --exclude-dir=node_modules || echo "Tidak ditemukan"

# Audit 3: Cek .gitignore ada dan lengkap
echo "=== Cek .gitignore ==="
if [ -f .gitignore ]; then
    echo ".gitignore ada"
    grep -q ".env" .gitignore && echo "OK: .env di-ignore" || echo "WARNING: .env tidak di-ignore!"
    grep -q "node_modules" .gitignore && echo "OK: node_modules di-ignore" || echo "WARNING: node_modules tidak di-ignore!"
else
    echo "WARNING: .gitignore tidak ditemukan!"
fi

# Audit 4: Cek integritas repository
echo "=== Cek integritas repo ==="
git fsck --no-dangling

Latihan Praktik

Latihan: Audit Keamanan Repository

# Gunakan project yang sudah ada
cd proyek-website

# Langkah 1: Buat checklist keamanan
echo "=== SECURITY AUDIT CHECKLIST ==="

# Cek 1: .gitignore
echo "[1] Cek .gitignore..."
cat .gitignore 2>/dev/null || echo "TIDAK ADA .gitignore!"

# Cek 2: Secrets di kode
echo "[2] Cek secrets di kode..."
grep -rn "password\|secret\|api_key\|token" \
  --include="*.js" --include="*.html" . || echo "BERSIH"

# Cek 3: File sensitif di staging
echo "[3] Cek file sensitif di history..."
git log --all --name-only --diff-filter=A | grep -E "\.(env|pem|key|p12)$" || echo "BERSIH"

# Cek 4: Repository integrity
echo "[4] Cek integritas repo..."
git fsck --no-dangling 2>&1 | tail -5

echo "=== AUDIT SELESAI ==="

Latihan: Setup Branch Protection

Untuk project di GitHub:

  1. Buka Settings > Branches
  2. Add branch protection rule untuk main
  3. Aktifkan: Require pull request reviews (1 reviewer)
  4. Aktifkan: Require status checks to pass
  5. Coba push langsung ke main — seharusnya ditolak

Preview: Capstone Project

Di 2 pertemuan terakhir (31-32), kamu akan mengerjakan proyek akhir yang menggabungkan semua materi dari pertemuan 1-30:

  • Setup repository dengan best practices
  • Feature development menggunakan GitHub Flow
  • Git hooks untuk code quality
  • CI/CD pipeline dengan GitHub Actions
  • Pull Request, code review, dan merge
  • Hotfix workflow
  • Release dan tagging

Pastikan semua materi sebelumnya sudah dipahami sebelum memulai capstone!


Tugas Mandiri

  1. Lakukan audit keamanan pada minimal 2 repository kamu menggunakan langkah-langkah di atas
  2. Pastikan semua repo punya .gitignore yang lengkap
  3. Setup branch protection rules di 1 repo GitHub
  4. (Opsional) Buat file CODEOWNERS di salah satu repo
  5. Review semua materi dari pertemuan 1-30 sebagai persiapan capstone project

Quiz: Review Modul 3.4–3.5

Jawab 10 pertanyaan berikut untuk menguji pemahaman kamu.

Soal 1 dari 10

Git submodule digunakan untuk...