CI CD Pipeline - Lumina-Enterprise-Solutions/prism-auth-service GitHub Wiki
🔄 CI/CD Pipeline
Kami menggunakan GitHub Actions untuk mengotomatiskan proses Continuous Integration (CI) dan Continuous Deployment (CD).
Continuous Integration (CI)
- File Konfigurasi:
.github/workflows/ci.yml
- Pemicu (Triggers):
- Push ke branch
main
,develop
. - Push ke branch dengan prefix
feature/
,bugfix/
,hotfix/
. - Setiap Pull Request yang menargetkan
main
ataudevelop
.
- Push ke branch
build-and-test
Alur Kerja Job Job ini berjalan di ubuntu-latest
dan melakukan langkah-langkah berikut:
- Setup Services: Sebelum job dimulai, GitHub Actions akan menyiapkan service containers untuk
postgres:17-alpine
danredis:7-alpine
. Ini memungkinkan integration test untuk berjalan dengan dependensi nyata. - Checkout Repository: Mengunduh kode dari repositori.
- Set up Go: Menginstal versi Go yang ditentukan (
1.24
). - Cache Go Modules: Menyimpan cache dependensi Go untuk mempercepat build di masa mendatang.
- Download Go modules: Menjalankan
go mod download
. - Run Linter: Menjalankan
golangci-lint
untuk memastikan kode mematuhi standar gaya dan praktik terbaik. - Run Unit Tests: Menjalankan
go test -v -short ./...
untuk mengeksekusi tes unit yang cepat. - Run Integration Tests: Menjalankan skrip
./scripts/test-integration.sh
. Skrip ini mengatur variabel lingkungan yang diperlukan agar tes dapat terhubung ke service container (Postgres dan Redis). - Build Application: Mengompilasi aplikasi Go menjadi binary untuk memastikan tidak ada error kompilasi.
- Build Docker Image: Membangun image Docker menggunakan
Dockerfile
untuk memvalidasi bahwa proses containerization berhasil.
Continuous Deployment (CD) / Release
- File Konfigurasi:
.github/workflows/release.yml
- Pemicu (Triggers):
- Hanya berjalan ketika sebuah tag Git baru dengan format
v*
(misalnya,v1.2.0
) di-push ke repositori.
- Hanya berjalan ketika sebuah tag Git baru dengan format
release-and-publish
Alur Kerja Job Job ini bertanggung jawab untuk merilis versi baru dari layanan:
- Checkout Repository: Mengunduh kode.
- Log in to GHCR: Melakukan login ke GitHub Container Registry menggunakan
GITHUB_TOKEN
yang disediakan secara otomatis. - Extract Docker Metadata: Menghasilkan tag yang relevan untuk image Docker (misalnya,
latest
,v1.2.0
,v1.2
). - Set up QEMU & Buildx: Menyiapkan environment build Docker yang lebih canggih.
- Build and Push Docker Image: Membangun image Docker menggunakan
Dockerfile
dan mendorongnya ke GitHub Container Registry dengan semua tag yang telah dihasilkan. - Create GitHub Release: Membuat entri rilis baru di halaman "Releases" GitHub, lengkap dengan catatan rilis yang dibuat secara otomatis dari commit messages sejak rilis terakhir.