name: Setup PHP & Composer Deps description: | Sets up PHP 8.4 and installs Composer dependencies with two layers of cache: the global Composer cache directory and the resolved `vendor/` directory itself. On a `vendor/` cache hit we skip `composer install` entirely. inputs: php-version: description: PHP version to install required: false default: '8.4' tools: description: Tools to install via shivammathur/setup-php required: false default: 'composer:v2' coverage: description: Coverage driver (xdebug, pcov, none) required: false default: 'none' composer-args: description: Extra args for `composer install` when running required: false default: '--no-interaction --prefer-dist --optimize-autoloader' runs: using: composite steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ inputs.php-version }} tools: ${{ inputs.tools }} coverage: ${{ inputs.coverage }} - name: Get composer cache directory id: composer-cache shell: bash run: echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT" - name: Cache composer global cache uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: composer-${{ runner.os }}-php${{ inputs.php-version }}-${{ hashFiles('composer.lock') }} restore-keys: composer-${{ runner.os }}-php${{ inputs.php-version }}- - name: Cache vendor/ id: vendor-cache uses: actions/cache@v4 with: path: vendor key: vendor-${{ runner.os }}-php${{ inputs.php-version }}-${{ hashFiles('composer.lock') }} - name: Install PHP Dependencies if: steps.vendor-cache.outputs.cache-hit != 'true' shell: bash run: composer install ${{ inputs.composer-args }}