--- # This GitHub Actions workflow uses the same development tools that are also installed locally # via Composer or PHIVE and calls them using the Composer scripts. name: CI with Composer scripts on: push: branches: - main pull_request: schedule: - cron: '15 3 * * 1' permissions: contents: read jobs: php-lint: name: "PHP linter" runs-on: ubuntu-24.04 steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Install PHP" uses: shivammathur/setup-php@v2 with: php-version: "${{ matrix.php-version }}" ini-file: development coverage: none tools: composer:v2 - name: "Cache dependencies installed with composer" uses: actions/cache@v4 with: key: "php${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.json') }}" path: ~/.cache/composer restore-keys: "php${{ matrix.php-version }}-composer-\n" - name: "Install Composer dependencies" run: "composer update --no-progress" - name: "Show the Composer configuration" run: "composer config --global --list" - name: "Run PHP lint" run: "composer ci:php:lint" strategy: fail-fast: false matrix: php-version: - "7.4" - "8.0" - "8.1" - "8.2" - "8.3" code-quality: name: "Code quality checks" runs-on: ubuntu-24.04 steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Install PHP" uses: shivammathur/setup-php@v2 with: php-version: "${{ matrix.php-version }}" ini-file: development coverage: none tools: composer:v2 - name: "Show Composer version" run: "composer --version" - name: "Show the Composer configuration" run: "composer config --global --list" - name: "Cache dependencies installed with composer" uses: actions/cache@v4 with: key: "php${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.json') }}" path: ~/.cache/composer restore-keys: "php${{ matrix.php-version }}-composer-\n" - name: "Install Composer dependencies" run: "composer update --no-progress" - name: "Run command" run: "composer ci:${{ matrix.command }}" strategy: fail-fast: false matrix: command: - "composer:normalize" - "composer:psr-verify" - "composer:unused" - "json:lint" - "php:cs-fixer" - "php:mess" - "php:sniff" - "php:stan" - "typoscript:lint" - "yaml:lint" - "xliff:lint" php-version: - "8.3" code-quality-frontend: name: "Code quality frontend checks" runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: command: - "css" - "js" steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Set up Node.js" uses: actions/setup-node@v4 with: node-version: "22.5.1" - name: "Install modules" run: | npm ci - name: "Run command" run: | npm run ci:lint:${{ matrix.command }} unit-tests: name: "Unit tests" runs-on: ubuntu-24.04 needs: php-lint steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Install PHP" uses: shivammathur/setup-php@v2 with: php-version: "${{ matrix.php-version }}" ini-file: development coverage: none tools: composer:v2 - name: "Show Composer version" run: "composer --version" - name: "Show the Composer configuration" run: "composer config --global --list" - name: "Cache dependencies installed with composer" uses: actions/cache@v4 with: key: "php${{ matrix.php-version }}-typo3${{ matrix.typo3-version }}-${{ matrix.composer-dependencies }}-composer-${{ hashFiles('**/composer.json') }}" path: ~/.cache/composer restore-keys: "php${{ matrix.php-version }}-typo3${{ matrix.typo3-version }}-${{ matrix.composer-dependencies }}-composer-\n" - name: "Install TYPO3 Core" env: TYPO3: "${{ matrix.typo3-version }}" run: | composer require --no-ansi --no-interaction --no-progress --no-install typo3/cms-core:"$TYPO3" composer show - name: "Install lowest dependencies with composer" if: "matrix.composer-dependencies == 'lowest'" run: | composer update --no-ansi --no-interaction --no-progress --with-dependencies --prefer-lowest composer show - name: "Install highest dependencies with composer" if: "matrix.composer-dependencies == 'highest'" run: | composer update --no-ansi --no-interaction --no-progress --with-dependencies composer show - name: "Run unit tests" run: "composer ci:tests:unit" strategy: fail-fast: false matrix: include: - typo3-version: "^11.5" php-version: "7.4" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "7.4" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.0" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.0" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.1" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.1" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.2" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.2" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.3" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.3" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.1" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.1" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.2" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.2" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.3" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.3" composer-dependencies: highest functional-tests: name: "Functional tests" runs-on: ubuntu-24.04 needs: php-lint env: DB_DATABASE: typo3 DB_USER: root DB_PASSWORD: root DB_HOST: localhost steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Install PHP" uses: shivammathur/setup-php@v2 with: php-version: "${{ matrix.php-version }}" ini-file: development tools: composer:v2 extensions: mysqli coverage: none - name: "Show Composer version" run: "composer --version" - name: "Show the Composer configuration" run: "composer config --global --list" - name: "Cache dependencies installed with composer" uses: actions/cache@v4 with: key: "php${{ matrix.php-version }}-typo3${{ matrix.typo3-version }}-${{ matrix.composer-dependencies }}-composer-${{ hashFiles('**/composer.json') }}" path: ~/.cache/composer restore-keys: "php${{ matrix.php-version }}-typo3${{ matrix.typo3-version }}-${{ matrix.composer-dependencies }}-composer-\n" - name: "Install TYPO3 Core" env: TYPO3: "${{ matrix.typo3-version }}" run: | composer require --no-ansi --no-interaction --no-progress --no-install typo3/cms-core:"$TYPO3" composer show - name: "Install lowest dependencies with composer" if: "matrix.composer-dependencies == 'lowest'" run: | composer update --no-ansi --no-interaction --no-progress --with-dependencies --prefer-lowest composer show - name: "Install highest dependencies with composer" if: "matrix.composer-dependencies == 'highest'" run: | composer update --no-ansi --no-interaction --no-progress --with-dependencies composer show - name: "Start MySQL" run: "sudo /etc/init.d/mysql start" - name: "Run functional tests" run: | export typo3DatabaseName="$DB_DATABASE"; export typo3DatabaseHost="$DB_HOST"; export typo3DatabaseUsername="$DB_USER"; export typo3DatabasePassword="$DB_PASSWORD"; composer ci:tests:functional strategy: fail-fast: false matrix: include: - typo3-version: "^11.5" php-version: "7.4" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "7.4" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.0" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.0" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.1" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.1" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.2" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.2" composer-dependencies: highest - typo3-version: "^11.5" php-version: "8.3" composer-dependencies: lowest - typo3-version: "^11.5" php-version: "8.3" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.1" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.1" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.2" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.2" composer-dependencies: highest - typo3-version: "^12.4" php-version: "8.3" composer-dependencies: lowest - typo3-version: "^12.4" php-version: "8.3" composer-dependencies: highest shellcheck: name: Check shell scripts runs-on: ubuntu-24.04 timeout-minutes: 2 steps: - name: Checkout uses: actions/checkout@v4 - name: Check scripts run: | Build/Scripts/runTests.sh -s shellcheck documentation: name: Documentation runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v4 - name: Test if the documentation will render without warnings run: | docker run --rm --pull always -v $(pwd):/project \ ghcr.io/typo3-documentation/render-guides:latest --config=Documentation --no-progress --fail-on-log