Laravel 10: GitHub Action

GitHub Action membantu kita menjaga agar kualitas source code di repo selalu inline dengan standart sudah ditentukan.

Laravel 10: GitHub Action
Sveltekit Blogger

Qisthi Ramadhani / 19 Februari 2023

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.

Bacaan sebelumnya Laravel 10: Memaksimalkan Developer Experience (DX)

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 😎

Bagikan artikel ini ke