Setelah kita menerapkan penjaga gerbang di sisi developer (tiap-tiap anggota tim), baiknya kita juga membuat sebuah GitHub Action yang bisa menjadi penjaga layer 2 di repo kita. Biasanya, menurut saya baiknya penjagaan dilakukan berdasarkan dua tipe task. Penjagaan ketika pull request dan ketika push di branch utama kita.
Baca post sebelumnya, memaksimalkan developer experience (DX) di Laravel 10
Table of contents
Open Table of contents
GitHub Action: Pull Request
Mari kita beri nama task ini sebagai Laravel PR, task ini akan dikerjakan ketika ada sebuah pull request ke branch utama. Disini kita perlu penjagaan secara menyeluruh, mulai dari code style, code analysis serta perlu menjalankan test yang sudah dibuat agar deployment yang kita lakukan ke depan tetap terjaga stabilitasnya.
name: Laravel PR
on:
pull_request:
branches: ["main"]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: "8.2"
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm install && npm run build
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute PHP code style via Laravel Pint
run: composer pint-test
- name: Execute PHP code analysis via Larastan
run: composer analyse
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: composer test
Code Style via Laravel Pint
Pada berkas yaml diatas, aksi ini dilakukan dengan perintah composer pint-test
. Lebih detail-nya, bisa kita lihat pada berkas composer.json
bagian scripts
.
Code Analysis via PHPStan
Dilakukan dengan perintah composer analyse
. Seperti halnya pada Code Style, rinciannya terdapat pada berkas composer.json
bagian scripts
.
Execute Tests via PHPUnit
Kita sebenarnya bisa langsung menulis perintah php artisan test
, sebuah command bawaan dari Laravel yang bisa menjalankan testing scripts melalui PHPUnit. Namun, agar sejalan disini saya buat alias seperti pada Code Style dan Code Analysis dengan perintah dari composer
.
GitHub Action: Push
Tidak beda jauh dengan aksi Pull Request, namun untuk mempercepat CI/CD menurut saya kita cukup menjalankan perintah Execute Tests via PHPUnit dan mengubah trigger ketika hanya ada push di branch utama kita.
---
name: Laravel Push
on:
push:
branches: ["main"]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: "8.2"
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm install && npm run build
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: composer testp
Agar lebih optimal lagi, Laravel secara out-of-the-box menyediakan sebuah opsi parallel
. Kita akan menjalankan testing script secara hampir bersamaan, dengan demikian waktu tunggu pada task ini akan lebih sedikit. Dikarenakan sebelumnya kita telah menerapkan penjagaan kualitas kode dua layer. Disini, kita cukup mengganti composer test
dengan composer testp
.
Rincian Perintah Composer
{
...
"scripts": {
...
"test": [
"XDEBUG_MODE=coverage php artisan test --coverage --profile"
],
"testp": [
"php artisan test --parallel"
],
"analyse": [
"./vendor/bin/phpstan analyse --xdebug"
],
"pint-test": [
"./vendor/bin/pint --test"
]
},
...
}
Cheers! Semoga bermanfaat 😎