name: CI

on:
    pull_request:
    push:
        branches: [ master ]

# this fixes the input device is not a TTY .. see https://github.com/docker/compose/issues/5696
env:
    MYSQL_HOST: '127.0.0.1'
    SHELL_VERBOSITY: 1

jobs:
    php-cs-fixer:
        runs-on: ubuntu-latest
        strategy:
            matrix:
                php:
                    - '8.2'
                dependencies: ['highest']
            fail-fast: false
        steps:
            -   name: Checkout
                uses: actions/checkout@v2

            -   name: Setup PHP
                uses: shivammathur/setup-php@v2
                with:
                    php-version: ${{ matrix.php }}
                    tools: php-cs-fixer
                    coverage: none

            -   name: Run PHP-CS-Fixer fix
                run: php-cs-fixer fix --dry-run --diff --ansi

    phpunit:
        name: PHPUnit (PHP ${{ matrix.php }}) Symfony ${{ matrix.symfony }}
        runs-on: ubuntu-latest
        strategy:
            matrix:
                php:
                    - '8.2'
                dependencies: ['highest']
                symfony:
                    - 'unchanged'
                    - '6.4.*'
                    - '7.*.*'
            fail-fast: false

        services:
            # To keep in sync with fixtures/Functional/config/doctrine.yml and docker-compose.yaml
            mysql:
                image: mysql:8.0
                ports:
                    - 3307:3306
                env:
                    MYSQL_DATABASE: hautelook_alice_bundle
                    MYSQL_ROOT_USER: root
                    MYSQL_ROOT_PASSWORD: password
        steps:
            -   name: Checkout
                uses: actions/checkout@v2

            -   name: Configure Symfony version
                if: matrix.symfony != 'unchanged'
                run: echo "SYMFONY_REQUIRE=${{ matrix.symfony }}" >> $GITHUB_ENV

            -   name: Setup PHP
                uses: shivammathur/setup-php@v2
                with:
                    php-version: ${{ matrix.php }}
                    tools: composer, flex

            -   name: Install Composer dependencies (${{ matrix.dependencies }})
                uses: ramsey/composer-install@v1
                with:
                    dependency-versions: ${{ matrix.dependencies }}
                    composer-options: "--prefer-dist"

            -   name: Wait for MySQL
                run: |
                    while ! mysqladmin ping --host=$MYSQL_HOST --user=root --password=$MYSQL_ROOT_PASSWORD --port=3307; do
                        sleep 1
                    done

            -   name: Run tests
                run: vendor/bin/phpunit --verbose --stop-on-failure

    # This is a "trick", a meta task which does not change, and we can use in
    # the protected branch rules as opposed to the individual tests which
    # may change regularly.
    validate-tests:
        name: Tests status
        runs-on: ubuntu-latest
        needs:
            - php-cs-fixer
            - phpunit
        if: always()
        steps:
            - name: Successful run
              if: ${{ !(contains(needs.*.result, 'failure')) }}
              run: exit 0

            - name: Failing run
              if: ${{ contains(needs.*.result, 'failure') }}
              run: exit 1
