oliverdavies.uk-drupal-old/.github/workflows/ci.yml
2021-04-09 22:25:08 +01:00

224 lines
6.3 KiB
YAML

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/ansible/.roles
key: dependencies-composer-${{ hashFiles('tools/ansible/requirements.yml') }}
- name: Download Ansible roles
run: ansible-galaxy install -r tools/ansible/requirements.yml
- name: Export the Ansible Vault password
run: echo $ANSIBLE_VAULT_PASS > tools/ansible/.vault-pass.txt
env:
ANSIBLE_VAULT_PASS: ${{ secrets.ANSIBLE_VAULT_PASS }}
- name: Deploy the code
run: >
ansible-playbook tools/ansible/deploy.yml
-i tools/ansible/hosts.yml
-e "ansistrano_deploy_branch=$GITHUB_SHA"
--vault-password-file=tools/ansible/.vault-pass.txt
- name: Remove the Ansible Vault password file
run: rm tools/ansible/.vault-pass.txt