Otomatisasi Tag pada Perubahan Versi Paket: GitHub Action Guide
Memelihara proyek perangkat lunak modern melibatkan lebih dari sekadar menulis kode. Rilis terkelola dengan baik, pelacakan perubahan, dan otomatisasi adalah komponen penting dari siklus hidup pengembangan perangkat lunak (SDLC). Salah satu praktik yang umum digunakan adalah *versioning*, yang memungkinkan pengembang untuk melacak perubahan kode dan memberikan cara yang konsisten untuk merujuk ke versi perangkat lunak tertentu. Dalam ekosistem pengembangan yang serba cepat saat ini, otomasi proses ini sangat penting untuk efisiensi dan akuratan.
Artikel ini membahas cara mengotomatiskan proses *tagging* rilis Anda pada perubahan versi paket menggunakan GitHub Actions. Kita akan membahas apa itu GitHub Actions, mengapa otomasi tagging itu penting, dan panduan langkah demi langkah tentang cara menyiapkan alur kerja yang melakukan proses ini secara otomatis.
Mengapa Otomatisasi Tagging pada Perubahan Versi Paket Penting?
Sebelum kita masuk ke detail teknis, mari kita pahami mengapa otomasi tagging itu penting:
- Konsistensi dan Akurasi: Tagging manual rentan terhadap kesalahan manusia. Otomatisasi memastikan bahwa tag dibuat secara konsisten dan akurat sesuai dengan perubahan versi paket.
- Efisiensi Waktu: Otomatisasi membebaskan pengembang dari tugas yang berulang-ulang, memungkinkan mereka untuk fokus pada tugas yang lebih strategis. Ini terutama berharga dalam proyek dengan siklus rilis yang sering.
- Pelacakan yang Lebih Baik: Tag menyediakan titik referensi yang jelas untuk setiap rilis. Otomatisasi memastikan bahwa setiap perubahan versi ditandai dengan tepat, membuat pelacakan perubahan menjadi lebih mudah.
- Alur Kerja yang Disederhanakan: Otomasi tagging terintegrasi dengan alur kerja CI/CD Anda, menyederhanakan proses rilis dan mengurangi kebutuhan intervensi manual.
- Peningkatan Kolaborasi: Dengan proses tagging otomatis, tim dapat berkolaborasi lebih efektif, karena semua orang tahu persis versi mana yang sedang digunakan.
Apa itu GitHub Actions?
GitHub Actions adalah platform otomatisasi alur kerja dan CI/CD yang terintegrasi langsung ke dalam GitHub. Ini memungkinkan Anda untuk mengotomatiskan alur kerja pengembangan perangkat lunak Anda, termasuk pembangunan, pengujian, dan penyebaran, tepat di repositori GitHub Anda. Dengan GitHub Actions, Anda dapat membuat alur kerja yang dipicu oleh berbagai peristiwa, seperti dorongan kode, permintaan penarikan, atau peristiwa terjadwal.
Berikut adalah beberapa konsep utama yang terkait dengan GitHub Actions:
- Alur Kerja (Workflow): Alur kerja adalah proses otomatis yang Anda tentukan dalam file YAML. Alur kerja terdiri dari satu atau beberapa pekerjaan (job).
- Pekerjaan (Job): Pekerjaan adalah set langkah (step) yang berjalan pada runner. Sebuah alur kerja dapat memiliki beberapa pekerjaan yang berjalan secara paralel atau berurutan.
- Langkah (Step): Langkah adalah tugas individual yang dijalankan dalam pekerjaan. Sebuah langkah dapat menjalankan perintah shell, menjalankan action, atau keduanya.
- Action: Action adalah aplikasi mandiri yang melakukan tugas tertentu. Anda dapat menggunakan action yang telah dibuat oleh komunitas GitHub atau membuat action Anda sendiri.
- Runner: Runner adalah server yang menjalankan pekerjaan dalam alur kerja Anda. GitHub menyediakan runner yang di-hosting oleh GitHub, atau Anda dapat menggunakan runner yang di-hosting sendiri.
Prasyarat
Sebelum kita mulai mengimplementasikan otomatisasi tagging, pastikan Anda memiliki prasyarat berikut:
- Akun GitHub: Anda memerlukan akun GitHub untuk membuat dan mengelola repositori.
- Repositori GitHub: Anda memerlukan repositori GitHub untuk proyek Anda.
- File Definisi Paket: Proyek Anda harus memiliki file definisi paket seperti `package.json` (untuk Node.js), `pyproject.toml` (untuk Python), atau file lain yang sesuai dengan bahasa atau kerangka kerja yang Anda gunakan.
- Pemahaman Dasar YAML: Alur kerja GitHub Actions didefinisikan dalam file YAML. Pemahaman dasar YAML akan membantu Anda membuat dan memodifikasi alur kerja.
- Akses untuk Menulis Tag: Akun GitHub Anda (atau yang digunakan oleh GitHub Action) harus memiliki izin untuk menulis tag ke repositori. Biasanya, ini berarti memiliki akses *write* ke repositori.
Langkah-langkah untuk Mengotomatiskan Tagging pada Perubahan Versi Paket
Sekarang, mari kita masuk ke panduan langkah demi langkah tentang cara mengotomatiskan proses tagging pada perubahan versi paket menggunakan GitHub Actions:
Langkah 1: Membuat File Alur Kerja GitHub Actions
Pertama, kita perlu membuat file alur kerja GitHub Actions. File alur kerja berada di direktori `.github/workflows` di repositori Anda. Jika direktori ini belum ada, buatlah.
Buat file baru bernama `tag-on-version-change.yml` (atau nama lain yang deskriptif) di direktori `.github/workflows`. Ini adalah tempat kita akan mendefinisikan alur kerja kita.
Berikut adalah contoh dasar dari file alur kerja:
“`yaml
name: Tag pada Perubahan Versi Paket
on:
push:
branches:
– main # atau cabang utama Anda
jobs:
tag_release:
runs-on: ubuntu-latest
steps:
– name: Checkout Kode
uses: actions/checkout@v3
– name: Dapatkan Versi Paket
id: get_version
run: |
VERSION=$(jq -r .version package.json) # Sesuaikan untuk file definisi paket Anda
echo “::set-output name=version::$VERSION”
– name: Buat Tag
uses: actions/github-script@v6
with:
script: |
const version = ‘${{ steps.get_version.outputs.version }}’
const tagName = `v${version}`
console.log(`Creating tag: ${tagName}`)
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/tags/${tagName}`,
sha: context.sha
})
“`
Mari kita bedah file alur kerja ini:
- `name: Tag pada Perubahan Versi Paket`: Ini adalah nama alur kerja, yang ditampilkan di UI GitHub Actions.
- `on:`: Bagian ini menentukan kapan alur kerja harus dipicu. Dalam hal ini, alur kerja dipicu setiap kali ada `push` ke cabang `main` (Anda dapat menyesuaikan ini dengan cabang yang ingin Anda monitor).
- `jobs:`: Bagian ini mendefinisikan pekerjaan yang dijalankan dalam alur kerja. Dalam hal ini, kita memiliki satu pekerjaan yang disebut `tag_release`.
- `runs-on: ubuntu-latest`: Ini menentukan runner yang digunakan untuk menjalankan pekerjaan. Dalam hal ini, kita menggunakan runner yang di-hosting oleh GitHub dengan Ubuntu.
-
`steps:`: Bagian ini mendefinisikan langkah-langkah yang dijalankan dalam pekerjaan.
- `name: Checkout Kode`: Langkah ini menggunakan action `actions/checkout@v3` untuk melakukan checkout kode dari repositori.
- `name: Dapatkan Versi Paket`: Langkah ini menggunakan perintah shell untuk mengekstrak versi dari file `package.json` (sesuaikan untuk file definisi paket Anda). Ini menggunakan `jq` untuk mengurai file JSON dan mengekstrak nilai `version`. Kemudian menetapkan nilai tersebut sebagai output langkah, yang dapat digunakan oleh langkah-langkah selanjutnya.
- `name: Buat Tag`: Langkah ini menggunakan action `actions/github-script@v6` untuk membuat tag. Ini membaca versi dari output langkah `get_version`, membuat nama tag (misalnya, `v1.2.3`), dan menggunakan API GitHub untuk membuat tag.
Langkah 2: Menginstal `jq` (Jika diperlukan)
Contoh di atas menggunakan `jq` untuk mengurai file JSON. Jika runner Ubuntu Anda tidak memiliki `jq` terinstal secara default, Anda perlu menginstalnya. Tambahkan langkah berikut sebelum langkah “Dapatkan Versi Paket”:
“`yaml
– name: Instal jq
run: sudo apt-get update && sudo apt-get install -y jq
“`
Alur kerja yang diperbarui akan terlihat seperti ini:
“`yaml
name: Tag pada Perubahan Versi Paket
on:
push:
branches:
– main # atau cabang utama Anda
jobs:
tag_release:
runs-on: ubuntu-latest
steps:
– name: Checkout Kode
uses: actions/checkout@v3
– name: Instal jq
run: sudo apt-get update && sudo apt-get install -y jq
– name: Dapatkan Versi Paket
id: get_version
run: |
VERSION=$(jq -r .version package.json) # Sesuaikan untuk file definisi paket Anda
echo “::set-output name=version::$VERSION”
– name: Buat Tag
uses: actions/github-script@v6
with:
script: |
const version = ‘${{ steps.get_version.outputs.version }}’
const tagName = `v${version}`
console.log(`Creating tag: ${tagName}`)
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/tags/${tagName}`,
sha: context.sha
})
“`
Langkah 3: Sesuaikan File Alur Kerja untuk File Definisi Paket Anda
Anda perlu menyesuaikan file alur kerja agar sesuai dengan file definisi paket Anda. Khususnya, Anda perlu mengubah langkah “Dapatkan Versi Paket” untuk mengekstrak versi dengan benar dari file Anda.
Berikut adalah beberapa contoh untuk file definisi paket yang berbeda:
-
`package.json` (Node.js):
Jika Anda menggunakan `package.json`, Anda dapat menggunakan `jq` seperti yang ditunjukkan dalam contoh di atas:
“`bash
VERSION=$(jq -r .version package.json)
“` -
`pyproject.toml` (Python):
Jika Anda menggunakan `pyproject.toml`, Anda dapat menggunakan `tomlq` untuk mengurai file TOML. Pertama, Anda perlu menginstal `tomlq`:
“`yaml
– name: Instal tomlq
run: pip install tomlq
“`Kemudian, Anda dapat mengekstrak versi:
“`bash
VERSION=$(tomlq -t ‘tool.poetry.version’ pyproject.toml)
“` -
`pom.xml` (Java):
Jika Anda menggunakan `pom.xml`, Anda dapat menggunakan `xmllint` dan `xpath` untuk mengekstrak versi. Pertama, Anda perlu menginstal `xmllint`:
“`yaml
– name: Instal xmllint
run: sudo apt-get update && sudo apt-get install -y libxml2-utils
“`Kemudian, Anda dapat mengekstrak versi:
“`bash
VERSION=$(xmllint –xpath ‘string(/project/version)’ pom.xml)
“`
Pastikan untuk menyesuaikan perintah untuk mengekstrak versi dengan benar dari file definisi paket Anda.
Langkah 4: Menambahkan Perlindungan Cabang (Opsional)
Untuk mencegah penerapan (commit) langsung ke cabang `main` (atau cabang utama Anda), pertimbangkan untuk menambahkan perlindungan cabang. Ini akan memaksa semua perubahan untuk ditinjau melalui permintaan penarikan (pull request), menambahkan lapisan keamanan dan kontrol kualitas tambahan.
Untuk mengonfigurasi perlindungan cabang:
- Buka repositori GitHub Anda.
- Klik “Settings”.
- Klik “Branches”.
- Klik “Add rule”.
- Masukkan nama cabang yang ingin Anda lindungi (misalnya, `main`).
- Aktifkan pengaturan yang diinginkan, seperti “Require pull request reviews before merging” dan “Require status checks to pass before merging”.
- Klik “Create”.
Langkah 5: Memicu Alur Kerja dan Memeriksa Tag
Setelah Anda membuat file alur kerja dan menyesuaikannya untuk file definisi paket Anda, Anda siap untuk menguji alur kerja. Untuk memicu alur kerja, Anda perlu melakukan perubahan pada file definisi paket Anda dan mendorong perubahan ke cabang yang ditentukan dalam pemicu `on:` (misalnya, `main`).
- Perbarui Versi Paket: Ubah versi dalam file definisi paket Anda (misalnya, dari `1.0.0` menjadi `1.1.0`).
- Commit dan Push Perubahan: Commit dan push perubahan ke repositori Anda.
GitHub Actions akan secara otomatis memicu alur kerja. Anda dapat memantau jalannya alur kerja di tab “Actions” di repositori Anda.
Setelah alur kerja selesai dengan sukses, tag baru akan dibuat di repositori Anda. Anda dapat memverifikasi ini dengan mengunjungi tab “Releases” atau “Tags” di repositori Anda.
Penyelesaian Masalah
Jika alur kerja gagal, periksa log alur kerja untuk kesalahan. Berikut adalah beberapa masalah umum dan solusinya:
- Kesalahan Izin: Pastikan bahwa akun GitHub Anda (atau yang digunakan oleh GitHub Action) memiliki izin untuk menulis tag ke repositori.
- Kesalahan Sintaks YAML: Periksa file alur kerja Anda untuk kesalahan sintaks YAML.
- Kesalahan Perintah: Pastikan bahwa perintah untuk mengekstrak versi dari file definisi paket Anda benar.
- `jq` atau `tomlq` Tidak Terinstal: Pastikan bahwa `jq` atau `tomlq` terinstal di runner jika Anda menggunakannya untuk mengurai file definisi paket Anda.
Praktik Terbaik untuk Otomatisasi Tagging
Berikut adalah beberapa praktik terbaik untuk otomatisasi tagging:
- Gunakan Skema Versioning Semantik: Gunakan skema versioning semantik (SemVer) untuk memberikan makna pada nomor versi Anda dan mempermudah bagi pengguna untuk memahami perubahan yang termasuk dalam setiap rilis.
- Buat Tag Informatif: Sertakan informasi yang relevan dalam nama tag Anda, seperti nomor versi dan mungkin beberapa metadata tambahan.
- Gunakan Perlindungan Cabang: Gunakan perlindungan cabang untuk mencegah penerapan langsung ke cabang utama Anda dan memastikan bahwa semua perubahan ditinjau melalui permintaan penarikan.
- Uji Alur Kerja Anda dengan Cermat: Sebelum menerapkan alur kerja Anda ke lingkungan produksi, ujilah dengan cermat untuk memastikan bahwa alur kerja tersebut berfungsi seperti yang diharapkan.
- Pantau Alur Kerja Anda: Pantau alur kerja Anda secara teratur untuk memastikan bahwa alur kerja tersebut berjalan dengan sukses dan untuk mengidentifikasi masalah yang mungkin muncul.
- Dokumentasikan Alur Kerja Anda: Dokumentasikan alur kerja Anda untuk membantu orang lain memahami cara kerjanya dan cara menggunakannya.
- Gunakan Secret untuk Kredensial Sensitif: Jika alur kerja Anda memerlukan kredensial sensitif, seperti kunci API atau token akses, gunakan GitHub Secrets untuk menyimpannya dengan aman.
- Pertimbangkan untuk Menggunakan Action yang Ada: Sebelum menulis action Anda sendiri, pertimbangkan untuk menggunakan action yang ada dari GitHub Marketplace. Ini dapat menghemat waktu dan tenaga Anda.
Kesimpulan
Otomatisasi tagging pada perubahan versi paket menggunakan GitHub Actions adalah praktik yang berharga untuk memelihara proyek perangkat lunak yang bersih, terstruktur, dan mudah dikelola. Dengan mengotomatiskan proses tagging, Anda dapat meningkatkan konsistensi, efisiensi, dan pelacakan, yang pada akhirnya mengarah pada SDLC yang lebih baik. Panduan langkah demi langkah ini harus memberi Anda dasar yang kuat untuk mengimplementasikan otomasi tagging dalam proyek Anda. Ingatlah untuk menyesuaikan alur kerja untuk mencerminkan kebutuhan spesifik Anda dan praktik terbaik yang diuraikan di atas untuk hasil yang optimal.
Dengan menggabungkan otomatisasi tagging ke dalam alur kerja Anda, Anda dapat menyederhanakan proses rilis Anda, meningkatkan kolaborasi tim, dan fokus pada apa yang paling penting: membangun perangkat lunak yang luar biasa.
“`