domain-watchdog/.github/workflows/lint-and-tests.yml
2025-10-30 11:36:43 +01:00

201 lines
6.0 KiB
YAML

name: Lint and Tests
on:
push:
branches: [ "master", "develop" ]
pull_request:
branches: [ "master", "develop" ]
permissions:
contents: read
checks: write
pull-requests: write
jobs:
php-setup:
name: PHP Setup
runs-on: ubuntu-latest
outputs:
vendor-path: ${{ steps.upload.outputs.artifact-path }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: mbstring, xml, intl, curl, iconv, pdo_pgsql, sodium, zip, http
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest --optimize-autoloader
- name: Upload vendor folder
uses: actions/upload-artifact@v4
with:
name: php-vendor
path: vendor
id: upload
phpstan:
name: PHPStan
runs-on: ubuntu-latest
needs: php-setup
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download PHP vendor
uses: actions/download-artifact@v4
with:
name: php-vendor
path: vendor
- name: Set executable permissions
run: chmod +x vendor/bin/*
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
- name: Run PHPStan
run: vendor/bin/phpstan analyse
cs-fixer:
name: PHP-CS-Fixer
runs-on: ubuntu-latest
needs: [ php-setup, phpstan ]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download PHP vendor
uses: actions/download-artifact@v4
with:
name: php-vendor
path: vendor
- name: Set executable permissions
run: chmod +x vendor/bin/*
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
- name: Run PHP-CS-Fixer
run: vendor/bin/php-cs-fixer fix --dry-run --diff
tests:
name: Tests
runs-on: ubuntu-latest
needs: [ php-setup, cs-fixer, phpstan ]
env:
GANDI_PAT_TOKEN: ${{ secrets.GANDI_PAT_TOKEN }}
NAMECOM_USERNAME: ${{ secrets.NAMECOM_USERNAME }}
NAMECOM_PASSWORD: ${{ secrets.NAMECOM_PASSWORD }}
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
valkey:
image: valkey/valkey:latest
options: >-
--health-cmd "valkey-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download PHP vendor
uses: actions/download-artifact@v4
with:
name: php-vendor
path: vendor
- name: Set executable permissions
run: chmod +x vendor/bin/*
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: mbstring, xml, intl, curl, iconv, pdo_pgsql, sodium, zip, http
- name: Prepare database
run: bin/console --env=test doctrine:database:create && bin/console --env=test doctrine:migrations:migrate
- name: Create JWT keys
run: bin/console lexik:jwt:generate-keypair
- name: Add extra RDAP servers
run: ln -s custom_rdap_servers.example.yaml config/app/custom_rdap_servers.yaml
- name: Run PHPUnit
run: vendor/bin/phpunit --coverage-text --log-junit test-results.xml
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: |
test-results.xml
eslint:
name: ESLint
runs-on: ubuntu-latest
needs: php-setup
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download PHP vendor
uses: actions/download-artifact@v4
with:
name: php-vendor
path: vendor
- name: Set executable permissions
run: chmod +x vendor/bin/*
- name: Cache Node modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install frontend dependencies
run: npm install --global yarn && yarn install
- name: Run ESLint
run: yarn run eslint