Skip to content

Workflow file for this run

name: PHPUnit and Acceptance Tests
on: [push]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
phpunit:
name: PHPUnit Coverage Tests
runs-on: ubuntu-latest
container:
image: pookmish/drupal8ci:latest
services:
mysql:
image: mysql:5.7
env:
MYSQL_DATABASE: drupal
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_ROOT_PASSWORD: drupal
ports:
- 33306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v4
- name: Restore Cache
uses: actions/cache@v4
with:
path: |
vendor
docroot/core
docroot/libraries
docroot/modules/contrib
key: 2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
restore-keys: |
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-
2.1-${{ hashFiles('blt/blt.yml') }}-
- name: Run Unit Tests
env:
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
run: |
git config --system --add safe.directory '*'
composer install -n
blt blt:telemetry:disable --no-interaction
blt tests:phpunit:coverage --no-interaction
- name: Save Test Results
uses: actions/upload-artifact@v4
if: failure()
with:
name: unit-tests-results
path: $GITHUB_WORKSPACE/artifacts
sites_to_test:
runs-on: ubuntu-latest
container:
image: pookmish/drupal8ci:latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- name: Restore Cache
uses: actions/cache@v4
with:
path: |
vendor
docroot/core
docroot/libraries
docroot/modules/contrib
key: 2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
restore-keys: |
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-
2.1-${{ hashFiles('blt/blt.yml') }}-
- name: Get Sites
id: set-matrix
run: |
composer install -n &&
SITES=$(echo -n "$(blt blt:config:get multisites | grep -v default)" | jq -R -s -c 'split("\n") | sort') &&
echo "matrix=$SITES" >> $GITHUB_OUTPUT
codeception:
name: Codeception Test Suites
needs: sites_to_test
strategy:
fail-fast: false
matrix:
suite: [acceptance, functional]
site: ${{fromJSON(needs.sites_to_test.outputs.matrix)}}
runs-on: ubuntu-latest
container:
image: pookmish/drupal8ci:latest
options: '--network-alias drupal8ci'
services:
selenium:
image: selenium/standalone-chrome:latest
options: '--shm-size="2g"'
mysql:
image: mysql:5.7
env:
MYSQL_DATABASE: drupal
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_ROOT_PASSWORD: drupal
ports:
- 33306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v4
- name: Restore Cache
uses: actions/cache@v4
with:
path: |
vendor
docroot/core
docroot/libraries
docroot/modules/contrib
key: 2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
restore-keys: |
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-
2.1-${{ hashFiles('blt/blt.yml') }}-
- name: Install Site
run: |
git config --system --add safe.directory '*' &&
mysql -h mysql -P 3306 -u root -pdrupal -e 'SET GLOBAL max_allowed_packet=67108864;' &&
rm -rf /var/www/html &&
ln -snf $GITHUB_WORKSPACE /var/www/html &&
mkdir -p docroot/sites/default/files &&
chmod -R 777 docroot/sites/default/files/ &&
rm -rf docroot/sites/${{ matrix.site }}/files &&
ln -sL ../default/files/ docroot/sites/${{ matrix.site }}/files &&
apachectl stop &&
apachectl start &&
composer install -n &&
blt drupal:install --site=${{ matrix.site }} -n &&
drush image:derive thumbnail $(drush sql:query 'select uri from file_managed where uri like "%//media/%" limit 1') &&
drush xmlsitemap:rebuild &&
drush cr &&
mkdir -p artifacts/_data/
- name: Run tests
run: blt codeception --test=${{ matrix.site }} --suite=${{ matrix.suite }}
- name: Save Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: ${{ matrix.site }}-${{ matrix.suite }}-tests-results
path: artifacts
db_updates:
name: Verify Database Updates & Config Imports
needs: sites_to_test
strategy:
fail-fast: false
matrix:
site: ${{fromJSON(needs.sites_to_test.outputs.matrix)}}
runs-on: ubuntu-latest
container:
image: pookmish/drupal8ci:latest
options: '--network-alias drupal8ci'
env:
STANFORD_ENCRYPT: ${{secrets.STANFORD_ENCRYPT}}
services:
mysql:
image: mysql:5.7
env:
MYSQL_DATABASE: drupal
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_ROOT_PASSWORD: drupal
ports:
- 33306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: fail
- uses: actions/checkout@v4
- name: Restore Cache
uses: actions/cache@v4
with:
path: |
vendor
docroot/core
docroot/libraries
docroot/modules/contrib
key: 2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
restore-keys: |
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-
2.1-${{ hashFiles('blt/blt.yml') }}-
- name: Sync and Update Site
run: |
git config --system --add safe.directory '*' &&
mysql -h mysql -P 3306 -u root -pdrupal -e 'SET GLOBAL max_allowed_packet=67108864;' &&
rm -rf /var/www/html &&
ln -snf $GITHUB_WORKSPACE /var/www/html &&
mkdir -p docroot/sites/default/files &&
chmod -R 777 docroot/sites/default/files/ &&
rm -rf docroot/sites/${{ matrix.site }}/files &&
ln -sL ../default/files/ docroot/sites/${{ matrix.site }}/files &&
apachectl stop &&
apachectl start &&
composer install -n &&
blt drupal:sync --site=${{ matrix.site }} -n &&
curl -I http://localhost --fail
deploy:
name: Deploy Artifact
needs: [phpunit, codeception, db_updates]
runs-on: ubuntu-latest
container:
image: pookmish/drupal8ci:latest
steps:
- uses: actions/checkout@v4
- name: Restore Cache
uses: actions/cache@v4
with:
path: |
vendor
docroot/core
docroot/libraries
docroot/modules/contrib
key: 2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
restore-keys: |
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-${{ hashFiles('composer.lock') }}
2.1-${{ hashFiles('blt/blt.yml') }}-${{ hashFiles('composer.json') }}-
2.1-${{ hashFiles('blt/blt.yml') }}-
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: fail
- name: Deploy Artifact
run: |
git config --system --add safe.directory '*' &&
git config --global user.email "[email protected]" &&
git config --global user.name "Github Actions" &&
ssh-keyscan -t rsa svn-23450.prod.hosting.acquia.com >> /root/.ssh/known_hosts &&
composer install -n &&
blt deploy -v -n