Files
KantSites/.github/workflows/ci.yml
T
kantarciandClaude Opus 5 05ea703655
CMS quality / php (8.2) (push) Canceled after 0s
CMS quality / php (8.4) (push) Canceled after 0s
CMS quality / browser (push) Canceled after 0s
CMS quality / mysql (push) Canceled after 0s
Fassung 1.6.0: der Aufgabenplan wird veroeffentlicht
Wiederkehrende Aufgaben ohne Cronjob (ADR 073): Sicherung, Statistik kuerzen,
geplante Veroeffentlichung, Updatepruefung und Aufraeumen laufen als Plan in
der Tabelle scheduled_task - eine Zeile je Aufgabe mit Faelligkeit, Sperre und
letztem Ergebnis. Auf geteiltem Hosting gibt es oft keinen Cronjob; der Plan
haengt stattdessen an Anfragen und an einem Takt aus dem geoeffneten Backend.

Diese Arbeit entstand in einer parallel laufenden Sitzung und lag bis hierher
unveroeffentlicht im Arbeitsverzeichnis: die Releases 1.5.0 bis 1.5.5 wurden
bewusst aus dem jeweiligen Tag gebaut und enthielten sie deshalb nicht.

Vor der Veroeffentlichung geprueft, nicht bloss eingepackt:

- phpunit 452/452, npm test 28/28, npm run test:editor vollstaendig.
- Die Migration 20260914000100 legt nur die Tabelle scheduled_task an und nimmt
  sie beim Zurueckrollen wieder weg. Sie fasst keine bestehenden Daten an.
- Seit einer Stunde keine Schreibzugriffe der anderen Sitzung mehr.

Dabei zwei Fehler behoben:

- config/services.yaml verwendet !tagged_iterator. Das ist gueltiges Symfony,
  aber "lint:yaml config" kennt eigene Tags nur mit --parse-tags und gab 1
  zurueck - der CI-Lauf waere daran gescheitert. Flag ergaenzt.
- AdminHeadersSubscriber.php (aus 1.5.3) entsprach nicht dem Stil von
  php-cs-fixer; composer lint gab 8 zurueck. Behoben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 08:30:13 +02:00

86 lines
3.0 KiB
YAML

name: CMS quality
on: [push, pull_request]
permissions:
contents: read
jobs:
php:
runs-on: ubuntu-latest
strategy:
matrix:
php: ['8.2', '8.4']
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '${{ matrix.php }}'
extensions: pdo_sqlite, pdo_mysql, mbstring, xml, gd, exif
coverage: none
- run: composer install --no-interaction --prefer-dist
- run: php bin/setup.php
- run: composer validate --strict
- run: composer lint
- run: composer test
- run: composer audit
- run: php vendor/bin/doctrine-migrations migrate --no-interaction
- run: php bin/console cms:seed-demo
- run: php bin/console cms:seed-demo
- run: php bin/console lint:twig templates && php bin/console lint:yaml config --parse-tags && php bin/console lint:container
- run: composer build
browser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: pdo_sqlite, gd, exif
coverage: none
- uses: actions/setup-node@v4
with:
node-version: '24'
cache: npm
- run: composer install --no-interaction --prefer-dist
- run: php bin/setup.php
- run: php vendor/bin/doctrine-migrations migrate --no-interaction && php bin/console cms:seed-demo
- run: composer build
- run: npm ci && npx playwright install --with-deps chromium
- run: npm test
- run: npm run test:editor -- --audit
- name: Start production-mode preview
run: APP_ENV=prod APP_DEBUG=0 php -S 127.0.0.1:8080 -t public bin/dev-router.php > var/server.log 2>&1 &
- name: Wait for preview
run: node -e "for(let i=0;i<30;i++){try{if((await fetch('http://127.0.0.1:8080')).ok)process.exit(0)}catch{}await new Promise(r=>setTimeout(r,500))}process.exit(1)"
- run: npm run test:browser
- run: npm run audit
- uses: actions/upload-artifact@v4
if: always()
with:
name: browser-and-lighthouse
path: reports/
mysql:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_DATABASE: kant_ci
MYSQL_USER: kant_ci
MYSQL_PASSWORD: ci_only
MYSQL_ROOT_PASSWORD: ci_only_root
ports: ['3306:3306']
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=10
env:
DATABASE_URL: mysql://kant_ci:ci_only@127.0.0.1:3306/kant_ci?charset=utf8mb4
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: pdo_mysql, gd, exif
coverage: none
- run: composer install --no-interaction --prefer-dist
- run: php bin/setup.php
- run: php vendor/bin/doctrine-migrations migrate --no-interaction
- run: php bin/console cms:seed-demo
- run: php bin/console cms:seed-demo