Github Actions for Symfony 5 PHPUnit and more
Tags: actionshackathon21, github, opensource, symfony
Published: 2021-11-10 16:01:03

---
title: Github Actions for Symfony 5 PHPUnit and more
published: true
description: Discover how to use Github Actions to check your code quality and run all your tests in Symfony 5 project !
tags: actionshackathon21, github, opensource, symfony
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgweyw1h1ey8h0e0u52j.jpg
---

### My Workflow
This Github Actions will help you to guarantee an optimal quality and the good functioning of the code thanks to the launching of automatic tests.
But also warn you about the known vulnerabilities of your dependencies.

#### PHP Setup
First, this action setup PHP, composer and install all composer dependencies.

#### Security / Quality
After that, it check vulnerabilities in your dependencies and check your quality code according to PSR12 coding style using [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) and [PHPStan](https://github.com/phpstan/phpstan)

#### Webpack Encore
For the Webpack Encore part, it install all npm dependencies and build all your assets.

#### Tests
Finally, it run your PHPUnit tests. (and Behat, if you have).

### Submission Category: 

Maintainer Must-Haves


### Yaml File
```yaml
name: Symfony 5 Tests
on:
  push:
    branches:
      - main
      - dev
  pull_request:

jobs:
  symfony:
    name: Symfony 5.0 (PHP ${{ matrix.php-versions }})
    # https://hub.docker.com/_/ubuntu/
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        php-versions: ['7.4']
    steps:
      # https://github.com/actions/checkout (official)
      - name: Checkout
        uses: actions/checkout@v2

      # https://github.com/shivammathur/setup-php (community)
      - name: Setup PHP, extensions and composer with shivammathur/setup-php
        uses: shivammathur/setup-php@verbose
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, dom, filter, gd, iconv, json, mbstring, pdo

      # Composer
      - name: Get composer cache directory
        id: composer-cache
        run: echo "::set-output name=dir::$(composer config cache-files-dir)"

        # https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows
      - name: Cache composer dependencies
        uses: actions/cache@v1
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Install Composer dependencies
        run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader

      # https://github.com/sensiolabs/security-checker
      - name: Security check installed dependencies
        uses: symfonycorp/security-checker-action@v2

      # https://github.com/chekalsky/phpcs-action (community)
      - name: Check PSR12 code style (PHP_CodeSniffer)
        uses: chekalsky/phpcs-action@v1.2.0
        with:
          enable_warnings: true
          installed_paths: '${{ github.workspace }}/vendor/squizlabs/php_codesniffer'
          phpcs_bin_path: './vendor/bin/phpcs src --ignore="Migrations/"'

      # https://github.com/phpmd/phpmd
      # - name: Analyses PHP Code (PHP Mess Detector)
      #  run: vendor/bin/phpmd src,tests text .phpmd-ruleset.xml

      # https://github.com/phpstan/phpstan
      - name: Analyse PHP Code (PHPStan)
        run: vendor/bin/phpstan analyse src
    
      - name: Cache node_modules
        uses: actions/cache@v1
        id: yarn-cache-node-modules
        with:
          path: node_modules
          key: ${{ runner.os }}-yarn-cache-node-modules-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-cache-node-modules-
            
      - name: Yarn install
        if: steps.yarn-cache-node-modules.outputs.cache-hit != 'true'
        run: yarn install
        
      - name: Yarn build
        run: yarn run encore production
        
      - name: Archive production artifacts
        uses: actions/upload-artifact@v1
        with:
          name: build
          path: public/build

      # Symfony
      - name: Check the Symfony console
        run: |
          php bin/console -V
          php bin/console about
      # Tests
      - name: Run unit and functional tests
        run: |
          php bin/phpunit --stop-on-failure

      # - name: Run Behat/Mink tests
      #  run: |
      #    php vendor/bin/behat
```

### Additional Resources / Info

You can remove all yarn related parts if you don't use **Webpack Encore**