Automatic Composer Update #435
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Run tests | |
on: | |
pull_request: | |
types: [labeled, opened, synchronize] | |
jobs: | |
tests: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
checks: write | |
pull-requests: write | |
actions: read | |
statuses: write | |
steps: | |
- name: Checkout Code | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Extract PHP Version | |
id: php | |
uses: docker://ghcr.io/un-ocha/actions:extract-php-version-main | |
with: | |
docker_file: 'docker/Dockerfile' | |
docker_image: 'public.ecr.aws/unocha/php-k8s' | |
- name: Setup PHP with PECL extension | |
uses: shivammathur/setup-php@v2 | |
if: ${{ !env.ACT }} | |
with: | |
php-version: ${{ steps.php.outputs.php_version }} | |
tools: composer | |
env: | |
fail-fast: true | |
- name: Setup PHP with PECL extension locally | |
uses: shivammathur/setup-php@v2 | |
if: ${{ env.ACT }} | |
with: | |
php-version: ${{ steps.php.outputs.php_version }} | |
tools: composer | |
env: | |
fail-fast: true | |
runner: self-hosted | |
- name: Software versions | |
id: versions | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
php --version && composer --version | |
- name: Composer Validate | |
id: validate | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
composer validate | |
env: | |
fail-fast: true | |
- name: Code Lint | |
id: lint | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
test ! -d ./html/modules/custom || find -L ./html/modules/custom -iregex '.*\.\(php\|module\|inc\|install\)$' -print0 | xargs -0 -n 1 -P 4 php -l | |
test ! -d ./html/themes/custom || find -L ./html/themes/custom -iregex '.*\.\(php\|theme\)$' -print0 | xargs -0 -n 1 -P 4 php -l | |
env: | |
fail-fast: true | |
- name: Configure AWS Credentials | |
id: aws | |
if: ${{ !env.ACT }} | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.ECR_AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.ECR_AWS_SECRET_ACCESS_KEY }} | |
aws-region: us-east-1 | |
- name: Login to Public ECR | |
id: aws-login | |
if: ${{ !env.ACT }} | |
uses: docker/login-action@v3.0.0 | |
with: | |
registry: public.ecr.aws | |
username: ${{ secrets.ECR_AWS_ACCESS_KEY_ID }} | |
password: ${{ secrets.ECR_AWS_SECRET_ACCESS_KEY }} | |
env: | |
AWS_REGION: us-east-1 | |
- name: Build Image | |
id: build | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
make | |
env: | |
fail-fast: true | |
- name: Setup Environment | |
id: docker | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml up -d | |
sleep 10 | |
docker ps -a | |
docker compose -f tests/docker-compose.yml exec -w /srv/www -T drupal composer install | |
env: | |
fail-fast: true | |
- name: Install Subtheme | |
id: subtheme | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -w /srv/www -T drupal /usr/bin/composer run sub-theme | |
- name: PHPCS | |
id: phpcs | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -u appuser -w /srv/www -T drupal phpcs -p --report=full --standard=phpcs.xml ./html/modules/custom ./html/themes/custom | |
env: | |
fail-fast: true | |
- name: Install Environment | |
id: install | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -T drupal drush -y si --existing-config minimal install_configure_form.enable_update_status_emails=NULL | |
env: | |
fail-fast: true | |
- name: Run tests | |
id: tests | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -T drupal drush -y en dblog | |
docker compose -f tests/docker-compose.yml exec -T drupal chmod -R 777 /srv/www/html/sites/default/files /srv/www/html/sites/default/private | |
docker compose -f tests/docker-compose.yml exec -T drupal mkdir -p /srv/www/html/build/logs | |
docker compose -f tests/docker-compose.yml exec -T drupal chmod -R 777 /srv/www/html/build/logs | |
docker compose -f tests/docker-compose.yml exec -T drupal mkdir -p /srv/www/html/build/logs /srv/www/html/sites/default/files/browser_output | |
docker compose -f tests/docker-compose.yml exec -T drupal chmod -R 777 /srv/www/html/build/logs /srv/www/html/sites/default/files/browser_output | |
docker compose -f tests/docker-compose.yml exec -T -w /srv/www -e XDEBUG_MODE=coverage -e BROWSERTEST_OUTPUT_DIRECTORY=/srv/www/html/sites/default/files/browser_output -e DTT_BASE_URL=http://127.0.0.1 drupal ./vendor/bin/phpunit --coverage-clover /srv/www/html/build/logs/clover.xml --debug | |
env: | |
fail-fast: true | |
- name: Copy Coveralls | |
id: copy_coveralls | |
if: success() | |
run: docker cp "$(docker compose -f tests/docker-compose.yml ps -q drupal)":/srv/www/html/build/logs/clover.xml . || echo "skip=true" >> "$GITHUB_OUTPUT" | |
- name: Monitor coverage | |
id: coveralls | |
if: ${{ steps.copy_coveralls.outputs.skip != 'true' }} | |
uses: slavcodev/coverage-monitor-action@v1 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
coverage_path: "clover.xml" | |
threshold_alert: 0 | |
threshold_warning: 50 | |
threshold_metric: "lines" | |
comment_footer: false | |
- name: Install demo content | |
# Install Demo content if the PR has the label "e2e" or "performance" | |
if: contains(github.event.pull_request.labels.*.name, 'e2e') || contains(github.event.pull_request.labels.*.name, 'performance') | |
id: content | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -T drupal drush -y en unocha_demo_content | |
curl -v http://127.0.0.1:8080/demo | |
env: | |
fail-fast: true | |
- name: Set up node | |
# Run Jest e2e tests if the PR has the label "e2e" | |
if: contains(github.event.pull_request.labels.*.name, 'e2e') | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
- name: Install node dependencies | |
# Run Jest e2e tests if the PR has the label "e2e" | |
if: contains(github.event.pull_request.labels.*.name, 'e2e') | |
run: | | |
docker compose -f tests/docker-compose.yml exec -w /srv/www drupal sh | |
cd html/themes/custom/common_design_subtheme | |
npm install | |
- name: Run e2e tests | |
# Run Jest e2e tests if the PR has the label "e2e" | |
if: contains(github.event.pull_request.labels.*.name, 'e2e') | |
run: | | |
docker compose -f tests/docker-compose.yml exec -w /srv/www drupal sh | |
cd html/themes/custom/common_design_subtheme | |
npm run ci -- -t '^(?!.*Subtheme).*$' | |
env: | |
fail-fast: true | |
# - name: Debug Server | |
# uses: cafuego/command-output@main | |
# with: | |
# run: | | |
# docker ps -a | |
- name: Audit URLs using Lighthouse | |
# Run Lighthouse if the PR has the label "performance" | |
if: contains(github.event.pull_request.labels.*.name, 'performance') | |
uses: treosh/lighthouse-ci-action@10.1.0 | |
with: | |
urls: | | |
http://127.0.0.1:8080/ | |
http://127.0.0.1:8080/demo | |
runs: 3 | |
budgetPath: .github/workflows/lighthouse-budget.json # test performance budgets | |
configPath: .github/workflows/lighthouserc.js | |
uploadArtifacts: true # save results as an action artifacts | |
temporaryPublicStorage: true # upload lighthouse report to the temporary storage | |
- name: PHP Logs | |
id: phplog | |
if: failure() | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -T drupal grep -i fatal /var/log/php/error.log | |
- name: DB Logs | |
id: dblog | |
if: failure() | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml exec -T drupal drush watchdog:show | |
- name: Find Comment | |
uses: peter-evans/find-comment@v3 | |
if: ${{ !env.ACT }} | |
id: fc | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: Build output | |
- name: Create or update comment | |
uses: peter-evans/create-or-update-comment@v4 | |
if: ${{ !env.ACT }} | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
comment-id: ${{ steps.fc.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
### Build output | |
#### Composer Validate `${{ steps.validate.outcome }}` | |
#### PHP Lint `${{ steps.lint.outcome }}` | |
#### Docker Build `${{ steps.build.outcome }}` | |
#### Environment Setup `${{ steps.docker.outcome }}` | |
#### Site Install `${{ steps.install.outcome }}` | |
#### PHP Code Sniffer `${{ steps.phpcs.outcome }}` | |
<details><summary>Software Versions</summary> | |
<code>${{ steps.versions.outputs.stdout }}</code> | |
</details> | |
<details><summary>Drupal Logs</summary> | |
<code>${{ steps.dblog.outputs.stdout }}</code> | |
</details> | |
<details><summary>PHP Logs</summary> | |
<code>${{ steps.phplog.outputs.stdout }}</code> | |
</details> | |
*Pusher: @${{ github.actor }}, Action: `${{ github.event_name }}`, Workflow: `${{ github.workflow }}`* | |
edit-mode: replace | |
- name: Slack Success Notification | |
id: slack_success | |
if: ${{ !env.ACT && success() }} | |
uses: slackapi/slack-github-action@v1.25.0 | |
with: | |
channel-id: '${{ vars.SLACK_CHANNEL }}' | |
payload: | | |
{ | |
"text": "Tests passed for a pull request on ${{ github.repository }}", | |
"attachments": [ | |
{ | |
"color": "#00FF00", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "Pull request by @${{ github.triggering_actor }} to merge _${{ github.head_ref }}_ into _${{ github.base_ref }}_ on <${{ github.repositoryUrl }}|${{ github.repository }}> passed tests (<${{ github.event.pull_request.html_url }}|Review>)" | |
} | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Slack Failure Notification | |
id: slack_failure | |
if: ${{ !env.ACT && failure() }} | |
uses: slackapi/slack-github-action@v1.25.0 | |
with: | |
channel-id: '${{ vars.SLACK_CHANNEL }}' | |
payload: | | |
{ | |
"text": "Tests failed for a pull request on ${{ github.repository }}", | |
"attachments": [ | |
{ | |
"color": "#FF0000", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "Pull request by @${{ github.triggering_actor }} to merge _${{ github.head_ref }}_ into _${{ github.base_ref }}_ on <${{ github.repositoryUrl }}|${{ github.repository }}> failed tests (<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|Review>)" | |
} | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Clean up | |
id: docker-clean-up | |
if: ${{ env.ACT }} | |
uses: cafuego/command-output@main | |
with: | |
run: | | |
docker compose -f tests/docker-compose.yml down | |
env: | |
fail-fast: true |