GitHub

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 7 dari 8
  • 35 menit
  • 4 soal kuis

GitHub Actions, Pages, Releases, dan Keamanan Repository

Di bab ini (9 bagian)
  1. Tujuan
  2. GitHub Actions: robot yang kerja tiap ada push
  3. GitHub Pages dan Releases
  4. Keamanan repository
  5. GitHub CLI dan Gist
  6. Copilot, organisasi, dan hak akses
  7. Kesalahan umum
  8. Coba sendiri
  9. Rangkuman

Tujuan bab ini

  • Membaca dan menulis workflow GitHub Actions sederhana yang menjalankan test Node.js di setiap push dan pull request.
  • Menerbitkan situs lewat GitHub Pages dan menandai versi dengan tag serta Releases.
  • Mengaktifkan fitur keamanan dasar: Dependabot, secret scanning, branch protection, dan GitHub Secrets.
  • Memakai GitHub CLI gh dan Gist, serta memahami Copilot, organisasi, dan tingkat hak akses.

GitHub Actions: robot yang kerja tiap ada push

Bayangkan setiap kali ada pull request, robot otomatis meng-clone repo, memasang dependensi, lalu menjalankan semua test. Kalau ada yang gagal, tanda silang merah muncul di PR sebelum siapa pun menekan merge. Itulah GitHub Actions, layanan CI/CD (continuous integration / continuous delivery) bawaan GitHub.

Workflow ditulis dalam file YAML di folder .github/workflows/ di dalam repo. Nama file bebas, misalnya ci.yml. Contoh CI untuk proyek Node.js:

name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm test

Contoh workflow CI GitHub Actions dan konsep event, runner, job, step

Bedah satu per satu:

  • on: event pemicu. Di sini workflow jalan saat ada push ke main dan saat ada pull request yang menuju main. Event lain misalnya schedule (jadwal cron) dan workflow_dispatch (tombol jalankan manual).
  • jobs: kumpulan pekerjaan. Tiap job jalan di mesin terpisah dan secara default job-job berjalan paralel.
  • runs-on: jenis runner, mesin virtual yang disediakan GitHub. Pilihannya antara lain ubuntu-latest, windows-latest, dan macos-latest.
  • steps: urutan langkah dalam job. Langkah uses memakai action siap pakai dari Marketplace, sedangkan run menjalankan perintah shell.
  • actions/checkout@v4 mengunduh isi repo ke runner; tanpa ini runner tidak punya kodemu.
  • actions/setup-node@v4 memasang Node.js versi yang kamu minta lewat with.
  • npm ci memasang dependensi persis sesuai package-lock.json, lalu npm test menjalankan test.

Angka @v4 adalah versi mayor action. Versi baru bisa keluar (misalnya v5), jadi cek halaman action di Marketplace sesekali. YAML memakai spasi, bukan tab, jadi jaga indentasi.

Hasil tiap run tampil di tab Actions dan sebagai status check di pull request. Untuk repo publik, runner standar GitHub gratis; repo privat mendapat kuota menit gratis per bulan sesuai paket akun.

GitHub Pages dan Releases

GitHub Pages adalah hosting gratis untuk situs statis (HTML, CSS, JS) langsung dari repo. Cocok buat portofolio atau tugas kuliah berbentuk web. Aktifkan di Settings › Pages, lalu pada bagian Build and deployment pilih sumbernya:

  • Deploy from a branch: pilih branch (misalnya main) dan folder (/ (root) atau /docs). Paling gampang untuk situs HTML biasa.
  • GitHub Actions: situs dibangun oleh workflow, cocok untuk proyek yang perlu build dulu seperti Vite, Astro, atau Hugo.

Situs terbit di https://username.github.io/nama-repo. Repo khusus bernama username.github.io menjadi situs utama di https://username.github.io. Domain kustom dan HTTPS juga didukung.

Releases menandai versi yang siap dipakai orang. Dasarnya adalah tag Git (detailnya ada di kelas Git):

git tag -a v1.0.0 -m "Rilis pertama"
git push origin v1.0.0

Setelah tag sampai di GitHub, buka bagian Releases di halaman repo, buat release baru, pilih tag v1.0.0, lalu tulis release notes. Tombol Generate release notes bisa menyusun daftar PR yang masuk sejak rilis sebelumnya secara otomatis. Gunakan Semantic Versioning MAJOR.MINOR.PATCH: naikkan PATCH untuk perbaikan bug, MINOR untuk fitur baru yang tidak merusak, MAJOR untuk perubahan yang merusak kompatibilitas.

Keamanan repository

Repo publik dibaca siapa saja, termasuk bot pemburu kunci API. Fitur keamanan yang wajib kamu kenal:

  • Dependabot alerts memberi peringatan bila ada dependensi dengan celah keamanan yang diketahui. Dependabot security updates membuka PR otomatis untuk menaikkan versi yang rentan. Untuk pembaruan versi rutin, tambahkan file .github/dependabot.yml.
  • Secret scanning mendeteksi token atau kunci API yang ter-commit. Dengan push protection, push yang berisi secret yang dikenali bahkan diblokir sebelum masuk.
  • Branch protection rules (di Settings › Branches, atau versi barunya, rulesets) melarang push langsung ke main, mewajibkan pull request, minimal sekian approval, dan status check CI yang lulus sebelum merge.
  • GitHub Secrets menyimpan kredensial terenkripsi untuk dipakai workflow, di Settings › Secrets and variables › Actions.

Contoh dependabot.yml untuk proyek npm:

version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: weekly

Memakai secret di workflow:

      - run: npm run deploy
        env:
          API_TOKEN: ${{ secrets.API_TOKEN }}

Nilai secret tidak pernah tampil di kode, dan GitHub menyamarkannya menjadi *** di log. Aturan mutlaknya tetap sama: jangan pernah commit kata sandi, token, atau file .env. Sekali ter-push, anggap sudah bocor.

GitHub CLI dan Gist

GitHub CLI (gh) adalah alat resmi untuk mengurus GitHub dari terminal. Pasang dari cli.github.com, lalu:

gh auth login
gh repo clone username/belajar-github
gh pr create --title "feat: tambah form login" --body "Closes #12"
gh pr list
gh pr checkout 42
gh pr merge 42 --squash

gh auth login menuntunmu login lewat browser. gh pr create membuka PR dari branch aktif, dan gh pr checkout 42 mengambil branch PR nomor 42 ke laptopmu untuk dicoba saat review.

Gist (gist.github.com) adalah tempat berbagi potongan kode atau catatan singkat. Setiap gist adalah repo Git mini dengan riwayat versi. Ada gist publik dan gist secret. Ingat, secret bukan berarti privat: siapa pun yang punya tautannya tetap bisa membuka. Dari terminal: gh gist create catatan.md (default secret, tambah --public untuk publik).

Copilot, organisasi, dan hak akses

GitHub Copilot adalah asisten AI yang memberi saran kode di editor dan menjawab pertanyaan soal kode. Ada paket gratis berkuota, dan pelajar terverifikasi lewat GitHub Education mendapat paket lebih lengkap. Sarannya tetap harus kamu baca dan uji.

Organization adalah akun bersama untuk kelompok, kelas, atau perusahaan. Anggotanya bisa dikelompokkan ke dalam team. Untuk repo organisasi, hak akses diatur per orang atau per team dengan lima tingkat:

PeranBisa apa
ReadMelihat dan meng-clone, membuka issue dan berkomentar
TriageMengelola issue dan PR (label, assignee, tutup) tanpa push
WritePush ke branch dan merge pull request
MaintainMengelola repo tanpa akses ke pengaturan sensitif
AdminAkses penuh, termasuk pengaturan, hak akses, dan menghapus repo

Repo milik akun pribadi lebih sederhana: hanya ada pemilik dan collaborator. Prinsipnya least privilege: beri hak seminimal yang dibutuhkan.

Kesalahan umum

  • Workflow tidak jalan sama sekali. Biasanya file bukan di .github/workflows/, ekstensinya bukan .yml/.yaml, atau indentasinya pakai tab.
  • Lupa actions/checkout. Langkah npm ci gagal karena tidak ada package.json di runner.
  • Menulis token langsung di YAML. Simpan di GitHub Secrets dan panggil lewat ${{ secrets.NAMA }}.
  • Mengira gist secret itu privat. Jangan taruh data rahasia di gist.
  • Memberi semua teman peran Admin. Cukup Write untuk anggota tim yang ngoding.

Coba sendiri

Siapkan proyek Node kecil (butuh Node.js 20 atau lebih baru):

mkdir kalkulator-ci && cd kalkulator-ci
git init -b main
npm init -y
npm pkg set type=module scripts.test="node --test"
echo 'export function tambah(a, b) { return a + b; }' > tambah.js

Buat tambah.test.js:

import test from "node:test";
import assert from "node:assert/strict";
import { tambah } from "./tambah.js";

test("tambah 2 + 3 = 5", () => {
  assert.equal(tambah(2, 3), 5);
});

Jalankan npm install (membuat package-lock.json, yang dibutuhkan npm ci), lalu npm test. Di bagian akhir output kamu akan melihat ringkasan seperti:

# tests 1
# pass 1
# fail 0

Sekarang simpan workflow CI di atas sebagai .github/workflows/ci.yml, lalu commit dan push ke repo baru di GitHub:

git add .
git commit -m "ci: tambah workflow test"
git remote add origin https://github.com/username/kalkulator-ci.git
git push -u origin main

Buka tab Actions di repo itu: run bernama CI akan muncul dan berubah hijau bila test lulus. Ubah a + b menjadi a - b, commit, push, dan lihat run-nya merah. Terakhir, kembalikan kodenya, buat tag v1.0.0, push tag itu, dan buat Release pertamamu.

Rangkuman

  • Workflow Actions adalah file YAML di .github/workflows/ dengan kunci utama on, jobs, runs-on, dan steps.
  • uses memakai action siap pakai seperti actions/checkout@v4 dan actions/setup-node@v4; run menjalankan perintah shell.
  • GitHub Pages menerbitkan situs statis dari branch atau lewat Actions; Releases membungkus tag dengan release notes dan file unduhan.
  • Dependabot, secret scanning, branch protection, dan GitHub Secrets menjaga repo tetap aman; kredensial yang ter-push harus diganti.
  • gh mempercepat urusan repo dan PR dari terminal; gist secret tetap bisa dibuka siapa pun yang punya tautan.
  • Repo organisasi punya peran Read, Triage, Write, Maintain, dan Admin; berikan hak seminimal mungkin.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Kuis (4 soal)

Cek pemahaman

  1. 1File .github/workflows/ci.yml berisi workflow berikut. Kapan workflow ini dijalankan?

    name: CI
    on:
      push:
        branches: [main]
      pull_request:
        branches: [main]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: actions/setup-node@v4
            with:
              node-version: 20
          - run: npm ci
          - run: npm test
  2. 2Workflow deploy butuh token API. Di mana sebaiknya token itu disimpan?

  3. 3Gist yang dibuat sebagai secret hanya bisa dibuka oleh pemiliknya sendiri.

  4. 4Di repo organisasi, peran minimal untuk mengelola label dan menutup issue tanpa bisa push kode adalah