name: CI

on:
  pull_request:
    branches:
      - production
  push:
    branches:
      - production
  workflow_dispatch:

env:
  php_version: '7.4'

jobs:
  install:
    runs-on: ubuntu-latest
    name: Test Drupal site installation
    steps:
      - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675

      - name: Cache dependencies
        uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
        with:
          path: |
            ~/.composer/cache/files
            web/core
            web/modules/contrib
            web/themes/contrib
            vendor
          key: dependencies-composer-${{ hashFiles('composer.lock') }}

      - name: Setup PHP
        uses: shivammathur/setup-php@5d27b8f90ea9479ac7af4fcaad6b411eb19d7170
        with:
          php-version: ${{ env.php_version }}
          extensions: mbstring
          coverage: none

      - run: |
          composer validate
          composer install --prefer-dist --no-interaction --no-suggest

      - name: Install Drupal
        run: >
          bin/drush --root=$(pwd)/web
          site:install -y
          --existing-config
          --db-url=sqlite://sites/default/files/.ht.sqlite

      - run: php -S localhost:8000 -t web 2>&1 &

      - name: Test loading the home page
        run: curl http://localhost:8000

      - name: Verify the home page has the site name in it
        run: curl -s http://localhost:8000 | grep "Oliver Davies"

  theme:
    name: Build the theme assets
    runs-on: ubuntu-latest
    strategy:
      matrix:
        theme-path:
          - web/themes/custom/opdavies
    steps:
      - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675

      - name: Setup node and npm
        uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
        with:
          node-version: 12

      - name: Cache npm dependencies
        uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
        with:
          path: node_modules
          key: dependencies-npm-${{ hashFiles('package-lock.json') }}

      - name: Build the production theme assets
        run: |
          cd ${{ matrix.theme-path }}
          npm clean-install
          npm run production

  phpunit:
    runs-on: ubuntu-latest
    name: "Run ${{ matrix.test-types }} tests"
    strategy:
      matrix:
        test-types:
          - functional
          - kernel
          - unit
    steps:
      - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675

      - name: Cache dependencies
        uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
        with:
          path: |
            ~/.composer/cache/files
            web/core
            web/modules/constrib
            web/themes/contrib
            vendor
          key: dependencies-composer-${{ hashFiles('composer.lock') }}

      - name: Setup PHP
        uses: shivammathur/setup-php@5d27b8f90ea9479ac7af4fcaad6b411eb19d7170
        with:
          php-version: ${{ env.php_version }}
          extensions: mbstring
          coverage: none

      - run: composer install --prefer-dist --no-interaction --no-suggest

      - run: php -S localhost:8000 -t web 2>&1 &
        if: matrix.test-types == 'functional'

      - run: bin/phpunit --testdox --colors=always --testsuite=${{ matrix.test-types }}
        env:
          SIMPLETEST_BASE_URL: http://localhost:8000

  phpcs:
    runs-on: ubuntu-latest
    name: "Run coding standards checks"
    steps:
      - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675

      - name: Cache dependencies
        uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
        with:
          path: |
            ~/.composer/cache/files
            web/core
            web/modules/constrib
            web/themes/contrib
            vendor
          key: dependencies-composer-${{ hashFiles('composer.lock') }}

      - name: Setup PHP
        uses: shivammathur/setup-php@5d27b8f90ea9479ac7af4fcaad6b411eb19d7170
        with:
          php-version: ${{ env.php_version }}

      - run: composer install --prefer-dist --no-interaction --no-suggest

      - run: bin/phpcs -s --warning-severity=6

  phpstan:
    runs-on: ubuntu-latest
    name: Static analysis with PHPStan
    steps:
      - uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675

      - name: Cache dependencies
        uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
        with:
          path: |
            ~/.composer/cache/files
            web/core
            web/modules/constrib
            web/themes/contrib
            vendor
          key: dependencies-composer-${{ hashFiles('composer.lock') }}

      - name: Setup PHP
        uses: shivammathur/setup-php@5d27b8f90ea9479ac7af4fcaad6b411eb19d7170
        with:
          php-version: ${{ env.php_version }}

      - run: composer install --prefer-dist --no-interaction --no-suggest

      - run: bin/phpstan analyze

  # deploy:
  #   name: Deploy via Ansible
  #   runs-on: ubuntu-latest
  #   needs:
  #     - install
  #     - phpcs
  #     - phpstan
  #     - phpunit
  #     - theme
  #   if: github.event_name == 'push'
  #   env:
  #     ANSIBLE_FORCE_COLOR: 1
  #     ANSIBLE_HOST_KEY_CHECKING: no
  #   steps:
  #     - name: Checkout the code
  #       uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675
  #
  #     - name: Add the deployment SSH key
  #       uses: shimataro/ssh-key-action@6f350ca8484d8d55c2e361e74d17e638dabe713a # 2.1.0
  #       with:
  #         key: ${{ secrets.SSH_PRIVATE_KEY }}
  #         name: id_rsa
  #         known_hosts: ${{ secrets.SSH_KNOWN_HOSTS }}
  #
  #     - name: Cache dependencies
  #       uses: actions/cache@d9747005de0f7240e5d35a68dca96b3f41b8b340
  #       with:
  #         path: tools/deployment/.roles
  #         key: dependencies-composer-${{ hashFiles('tools/deployment/requirements.yml') }}
  #
  #     - name: Export the Ansible Vault password
  #       run: echo $ANSIBLE_VAULT_PASS > tools/deployment/.vault-pass.txt
  #       env:
  #         ANSIBLE_VAULT_PASS: ${{ secrets.ANSIBLE_VAULT_PASS }}
  #
  #     - name: Deploy the code
  #       run: ./run ci:deploy
  #
  #     - name: Remove the Ansible Vault password file
  #       run: rm tools/deployment/.vault-pass.txt