diff --git a/.github/workflows/php-quality-checks.yml b/.github/workflows/php-quality-checks.yml index be7826c..3316510 100644 --- a/.github/workflows/php-quality-checks.yml +++ b/.github/workflows/php-quality-checks.yml @@ -117,9 +117,9 @@ on: default: "2" jobs: - # Validate configuration and detect available tools - prepare: - name: ๐Ÿ” Prepare PHP Analysis + # Install Composer dependencies with caching and detect available tools + install: + name: ๐Ÿ“ฆ Install Dependencies runs-on: ubuntu-latest outputs: has-composer: ${{ steps.check-files.outputs.has-composer }} @@ -129,8 +129,10 @@ jobs: has-integration-tests: ${{ steps.check-tests.outputs.has-integration-tests }} has-rest-api-tests: ${{ steps.check-tests.outputs.has-rest-api-tests }} has-graphql-tests: ${{ steps.check-tests.outputs.has-graphql-tests }} + env: + COMPOSER_AUTH: ${{ secrets.composer-auth }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check for required files id: check-files @@ -203,19 +205,8 @@ jobs: echo "has-graphql-tests=false" >> $GITHUB_OUTPUT fi - - # Install Composer dependencies with caching - install: - name: ๐Ÿ“ฆ Install Dependencies - needs: prepare - if: needs.prepare.outputs.has-composer == 'true' - runs-on: ubuntu-latest - env: - COMPOSER_AUTH: ${{ secrets.composer-auth }} - steps: - - uses: actions/checkout@v4 - - name: Setup PHP + if: steps.check-files.outputs.has-composer == 'true' uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 with: php-version: ${{ inputs.php-version }} @@ -224,11 +215,13 @@ jobs: tools: composer:v2 - name: Get composer cache directory + if: steps.check-files.outputs.has-composer == 'true' id: composer-cache run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache Composer dependencies - uses: actions/cache@v3 + if: steps.check-files.outputs.has-composer == 'true' + uses: actions/cache@v5 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} @@ -236,10 +229,11 @@ jobs: ${{ runner.os }}-composer- - name: Validate composer.json and composer.lock - if: ${{ inputs.skip-composer-validate != true }} + if: steps.check-files.outputs.has-composer == 'true' && inputs.skip-composer-validate != true run: composer validate ${{ inputs.debug && '--verbose' || '' }} - name: Install Composer Dependencies + if: steps.check-files.outputs.has-composer == 'true' run: | composer install \ --dev \ @@ -249,6 +243,7 @@ jobs: ${{ inputs.debug && '--verbose' || '' }} - name: Run Magento setup if needed + if: steps.check-files.outputs.has-composer == 'true' run: | # Apply patches if ece-patches is available if [ -f "vendor/bin/ece-patches" ]; then @@ -264,6 +259,7 @@ jobs: # Archive directories for other jobs (matching Bitbucket artifacts) - name: Archive dependencies and generated files + if: steps.check-files.outputs.has-composer == 'true' run: | echo "๐Ÿ“ฆ Preparing archive of dependencies and generated files..." @@ -296,7 +292,8 @@ jobs: tar -czf dependencies.tar.gz --files-from /dev/null fi - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 + if: steps.check-files.outputs.has-composer == 'true' with: name: vendor-php${{ inputs.php-version }} path: dependencies.tar.gz @@ -305,13 +302,13 @@ jobs: # PHPStan static analysis phpstan: name: ๐Ÿ” PHPStan Analysis - needs: [prepare, install] + needs: install if: | inputs.skip-phpstan == false && - needs.prepare.outputs.has-composer == 'true' + needs.install.outputs.has-composer == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -321,7 +318,7 @@ jobs: coverage: none tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -351,7 +348,7 @@ jobs: fi - name: Cache PHPStan results - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: /tmp/phpstan key: phpstan-php${{ inputs.php-version }}-${{ inputs.phpstan-level }}-${{ hashFiles('**/*.php') }} @@ -379,7 +376,7 @@ jobs: cmd="php -d memory_limit=${{ inputs.memory-limit }} $phpstan_cmd analyse" # Use existing config or set defaults - if [ "${{ needs.prepare.outputs.has-phpstan-config }}" = "true" ]; then + if [ "${{ needs.install.outputs.has-phpstan-config }}" = "true" ]; then echo "โœ… Using existing PHPStan configuration" else echo "โ„น๏ธ Using default PHPStan configuration" @@ -414,13 +411,13 @@ jobs: # PHP CodeSniffer style checks phpcs: name: ๐ŸŽจ Code Style Check - needs: [prepare, install] + needs: install if: | inputs.skip-phpcs == false && - needs.prepare.outputs.has-composer == 'true' + needs.install.outputs.has-composer == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -430,7 +427,7 @@ jobs: coverage: none tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -467,7 +464,7 @@ jobs: if composer run-script --list | grep -q "check-style"; then echo "โœ… Using composer check-style script" composer run-script check-style - elif [ "${{ needs.prepare.outputs.has-phpcs-config }}" = "true" ]; then + elif [ "${{ needs.install.outputs.has-phpcs-config }}" = "true" ]; then echo "โœ… Using existing PHPCS configuration" if [ -f "vendor/bin/phpcs" ]; then phpcs_cmd="vendor/bin/phpcs" @@ -521,14 +518,14 @@ jobs: # PHPUnit testing with coverage test: name: ๐Ÿงช Unit Tests - needs: [prepare, install] + needs: install if: | inputs.skip-tests == false && - needs.prepare.outputs.has-composer == 'true' && - needs.prepare.outputs.has-unit-tests == 'true' + needs.install.outputs.has-composer == 'true' && + needs.install.outputs.has-unit-tests == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP with Xdebug uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -538,7 +535,7 @@ jobs: coverage: xdebug tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -625,7 +622,7 @@ jobs: fi - name: Upload coverage reports - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: always() with: name: coverage-php${{ inputs.php-version }} @@ -633,7 +630,7 @@ jobs: retention-days: 7 - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: always() with: name: integration-test-results-php${{ inputs.php-version }} @@ -643,11 +640,11 @@ jobs: # Integration Tests integration-tests: name: ๐Ÿ”— Integration Tests - needs: [prepare, install] + needs: install if: | inputs.skip-integration-tests == false && - needs.prepare.outputs.has-composer == 'true' && - needs.prepare.outputs.has-integration-tests == 'true' + needs.install.outputs.has-composer == 'true' && + needs.install.outputs.has-integration-tests == 'true' runs-on: ubuntu-latest services: mariadb: @@ -682,7 +679,7 @@ jobs: options: --health-cmd="rabbitmq-diagnostics -q ping" --health-interval=10s --health-timeout=5s --health-retries=5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -692,7 +689,7 @@ jobs: coverage: none tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -743,7 +740,7 @@ jobs: fi - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: always() with: name: integration-test-results-php${{ inputs.php-version }} @@ -753,11 +750,11 @@ jobs: # REST API Functional Tests rest-api-tests: name: ๐Ÿ”Œ REST API Tests - needs: [prepare, install] + needs: install if: | inputs.skip-rest-api-tests == false && - needs.prepare.outputs.has-composer == 'true' && - needs.prepare.outputs.has-rest-api-tests == 'true' + needs.install.outputs.has-composer == 'true' && + needs.install.outputs.has-rest-api-tests == 'true' runs-on: ubuntu-latest services: mariadb: @@ -792,7 +789,7 @@ jobs: options: --health-cmd="rabbitmq-diagnostics -q ping" --health-interval=10s --health-timeout=5s --health-retries=5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -802,7 +799,7 @@ jobs: coverage: none tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -874,7 +871,7 @@ jobs: fi - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: always() with: name: rest-api-test-results-php${{ inputs.php-version }} @@ -884,11 +881,11 @@ jobs: # GraphQL API Functional Tests graphql-tests: name: ๐Ÿ“Š GraphQL API Tests - needs: [prepare, install] + needs: install if: | inputs.skip-graphql-tests == false && - needs.prepare.outputs.has-composer == 'true' && - needs.prepare.outputs.has-graphql-tests == 'true' + needs.install.outputs.has-composer == 'true' && + needs.install.outputs.has-graphql-tests == 'true' runs-on: ubuntu-latest services: mariadb: @@ -923,7 +920,7 @@ jobs: options: --health-cmd="rabbitmq-diagnostics -q ping" --health-interval=10s --health-timeout=5s --health-retries=5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup PHP uses: shivammathur/setup-php@4cba65b8c5a7681c52ce219a59833167d4550fe0 @@ -933,7 +930,7 @@ jobs: coverage: none tools: composer:v2 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: vendor-php${{ inputs.php-version }} @@ -1005,40 +1002,9 @@ jobs: fi - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: always() with: name: graphql-test-results-php${{ inputs.php-version }} path: test-results/ retention-days: 7 - - - # Cleanup artifacts - cleanup: - name: ๐Ÿงน Cleanup - runs-on: ubuntu-latest - needs: [install, phpstan, phpcs, test, integration-tests, rest-api-tests, graphql-tests] - if: always() - permissions: - actions: write - steps: - - name: Delete temporary artifacts - uses: actions/github-script@v7 - with: - script: | - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: process.env.GITHUB_RUN_ID, - }); - - for (const artifact of artifacts.data.artifacts) { - if (artifact.name.startsWith('vendor-php')) { - await github.rest.actions.deleteArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: artifact.id - }); - core.info(`๐Ÿ—‘๏ธ Deleted artifact '${artifact.name}'`); - } - }