Basic Github Actions for Laravel

Ariel Mejia

April 5th, 2023 - 2 min read

This action files require a .env.ci file that is just a copy from .env.example, feel free to adjust this files for your project requirements

Select the action that fits better for your project

Github Action to run PHPUnit test

name: CI
on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main
jobs:
  tests:
    runs-on: ubuntu-latest
 
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: test
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
 
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1
        
    - name: Cache composer dependencies
      uses: actions/cache@v2
      with:
        path: vendor
        key: composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          composer-
          
    - name: Install PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: 8.1
 
    - name: Install composer dependencies
      run: |
        composer install --no-scripts
 
    - name: Prepare Laravel Application
      run: |
        cp .env.ci .env
        php artisan key:generate
 
    - name: Run Test suite
      run: php artisan test

Github Action to run PHPUnit tests & NPM workflow

name: CI
on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main
jobs:
  tests:
    runs-on: ubuntu-latest
 
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: test
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
 
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1
        
    - name: Cache composer dependencies
      uses: actions/cache@v2
      with:
        path: vendor
        key: composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          composer-
          
    - name: Install PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: 8.1
 
    - name: Install composer dependencies
      run: |
        composer install --no-scripts
 
    - name: Prepare Laravel Application
      run: |
        cp .env.ci .env
        php artisan key:generate
 
    - name: Run Test suite
      run: php artisan test
    - name: Install NPM dependencies
      run: npm install
      
    - name: Compile assets
      run: npm run build

Thanks for reading!


Ariel Mejia Illustration

Ariel Mejia

Laravel Senior Developer

Engineer with 7+ years of experience working in backend & frontend technologies
Open Source Maintainer of packages for Laravel community.

Stay up with Laravel

Sign up & get tips and tricks

You'll get monthly updates regarding my most recent articles and products.