From afb9685d1a013316156a75894c8215d5e02a7634 Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Thu, 20 Nov 2025 15:11:26 +0200 Subject: [PATCH] fix: improve cache key quality across actions Address cache key quality issues identified during code review. php-composer: - Remove unused cache-directories input and handling code - Simplify cache paths to vendor + ~/.composer/cache only - Eliminate empty path issue when cache-directories was default empty npm-publish: - Remove redundant -npm- segment from cache key - Change: runner.os-npm-publish-{manager}-npm-{hash} - To: runner.os-npm-publish-{manager}-{hash} go-lint: - Add ~/.cache/go-build to cached paths - Now caches both golangci-lint and Go build artifacts - Improves Go build performance Result: Cleaner cache keys and better caching coverage --- go-lint/action.yml | 4 +++- npm-publish/action.yml | 3 +-- php-composer/README.md | 27 ++++++++++----------------- php-composer/action.yml | 25 ------------------------- php-composer/rules.yml | 12 +++++------- 5 files changed, 19 insertions(+), 52 deletions(-) diff --git a/go-lint/action.yml b/go-lint/action.yml index 4437866..84bf3d4 100644 --- a/go-lint/action.yml +++ b/go-lint/action.yml @@ -220,7 +220,9 @@ runs: if: inputs.cache == 'true' uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: - path: ~/.cache/golangci-lint + path: | + ~/.cache/golangci-lint + ~/.cache/go-build key: ${{ runner.os }}-golangci-${{ inputs.golangci-lint-version }}-${{ hashFiles('go.sum', inputs.config-file) }} restore-keys: | ${{ runner.os }}-golangci-${{ inputs.golangci-lint-version }}- diff --git a/npm-publish/action.yml b/npm-publish/action.yml index 70dcf24..f2e88a1 100644 --- a/npm-publish/action.yml +++ b/npm-publish/action.yml @@ -109,9 +109,8 @@ runs: uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: node_modules - key: ${{ runner.os }}-npm-publish-${{ steps.node-setup.outputs.package-manager }}-npm-${{ hashFiles('package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb') }} + key: ${{ runner.os }}-npm-publish-${{ steps.node-setup.outputs.package-manager }}-${{ hashFiles('package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb') }} restore-keys: | - ${{ runner.os }}-npm-publish-${{ steps.node-setup.outputs.package-manager }}-npm- ${{ runner.os }}-npm-publish-${{ steps.node-setup.outputs.package-manager }}- - name: Install Dependencies diff --git a/php-composer/README.md b/php-composer/README.md index e579bcc..6e84646 100644 --- a/php-composer/README.md +++ b/php-composer/README.md @@ -8,17 +8,16 @@ Runs Composer install on a repository with advanced caching and configuration. ### Inputs -| name | description | required | default | -|---------------------|---------------------------------------------------------------|----------|-----------------------------------------------------| -| `php` |

PHP Version to use.

| `true` | `8.4` | -| `extensions` |

Comma-separated list of PHP extensions to install

| `false` | `mbstring, xml, zip, curl, json` | -| `tools` |

Comma-separated list of Composer tools to install

| `false` | `composer:v2` | -| `args` |

Arguments to pass to Composer.

| `false` | `--no-progress --prefer-dist --optimize-autoloader` | -| `composer-version` |

Composer version to use (1 or 2)

| `false` | `2` | -| `stability` |

Minimum stability (stable, RC, beta, alpha, dev)

| `false` | `stable` | -| `cache-directories` |

Additional directories to cache (comma-separated)

| `false` | `""` | -| `token` |

GitHub token for private repository access

| `false` | `""` | -| `max-retries` |

Maximum number of retry attempts for Composer commands

| `false` | `3` | +| name | description | required | default | +|--------------------|---------------------------------------------------------------|----------|-----------------------------------------------------| +| `php` |

PHP Version to use.

| `true` | `8.4` | +| `extensions` |

Comma-separated list of PHP extensions to install

| `false` | `mbstring, xml, zip, curl, json` | +| `tools` |

Comma-separated list of Composer tools to install

| `false` | `composer:v2` | +| `args` |

Arguments to pass to Composer.

| `false` | `--no-progress --prefer-dist --optimize-autoloader` | +| `composer-version` |

Composer version to use (1 or 2)

| `false` | `2` | +| `stability` |

Minimum stability (stable, RC, beta, alpha, dev)

| `false` | `stable` | +| `token` |

GitHub token for private repository access

| `false` | `""` | +| `max-retries` |

Maximum number of retry attempts for Composer commands

| `false` | `3` | ### Outputs @@ -74,12 +73,6 @@ This action is a `composite` action. # Required: false # Default: stable - cache-directories: - # Additional directories to cache (comma-separated) - # - # Required: false - # Default: "" - token: # GitHub token for private repository access # diff --git a/php-composer/action.yml b/php-composer/action.yml index ad6c023..a28b445 100644 --- a/php-composer/action.yml +++ b/php-composer/action.yml @@ -35,10 +35,6 @@ inputs: description: 'Minimum stability (stable, RC, beta, alpha, dev)' required: false default: 'stable' - cache-directories: - description: 'Additional directories to cache (comma-separated)' - required: false - default: '' token: description: 'GitHub token for private repository access' required: false @@ -98,20 +94,11 @@ runs: id: hash shell: bash env: - CACHE_DIRECTORIES: ${{ inputs.cache-directories }} COMPOSER_LOCK_HASH: ${{ hashFiles('**/composer.lock') }} COMPOSER_JSON_HASH: ${{ hashFiles('**/composer.json') }} run: | set -euo pipefail - # Function to calculate directory hash - calculate_dir_hash() { - local dir=$1 - if [ -d "$dir" ]; then - find "$dir" -type f -exec sha256sum {} \; | sort | sha256sum | cut -d' ' -f1 - fi - } - # Get composer.lock hash or composer.json hash if [ -f composer.lock ]; then echo "lock=$COMPOSER_LOCK_HASH" >> $GITHUB_OUTPUT @@ -119,17 +106,6 @@ runs: echo "lock=$COMPOSER_JSON_HASH" >> $GITHUB_OUTPUT fi - # Calculate additional directory hashes - if [ -n "$CACHE_DIRECTORIES" ]; then - IFS=',' read -ra DIRS <<< "$CACHE_DIRECTORIES" - for dir in "${DIRS[@]}"; do - dir_hash=$(calculate_dir_hash "$dir") - if [ -n "$dir_hash" ]; then - echo "${dir}_hash=$dir_hash" >> $GITHUB_OUTPUT - fi - done - fi - - name: Configure Composer id: composer shell: bash @@ -181,7 +157,6 @@ runs: path: | vendor ~/.composer/cache - ${{ inputs.cache-directories }} key: ${{ runner.os }}-php-${{ inputs.php }}-composer-${{ inputs.composer-version }}-composer-${{ hashFiles('composer.lock', 'composer.json') }} restore-keys: | ${{ runner.os }}-php-${{ inputs.php }}-composer-${{ inputs.composer-version }}-composer- diff --git a/php-composer/rules.yml b/php-composer/rules.yml index c04f2cc..15aef62 100644 --- a/php-composer/rules.yml +++ b/php-composer/rules.yml @@ -2,7 +2,7 @@ # Validation rules for php-composer action # Generated by update-validators.py v1.0.0 - DO NOT EDIT MANUALLY # Schema version: 1.0 -# Coverage: 56% (5/9 inputs) +# Coverage: 50% (4/8 inputs) # # This file defines validation rules for the php-composer GitHub Action. # Rules are automatically applied by validate-inputs action when this @@ -17,7 +17,6 @@ required_inputs: - php optional_inputs: - args - - cache-directories - composer-version - extensions - max-retries @@ -25,18 +24,17 @@ optional_inputs: - token - tools conventions: - cache-directories: boolean composer-version: semantic_version max-retries: numeric_range_1_10 php: semantic_version token: github_token overrides: {} statistics: - total_inputs: 9 - validated_inputs: 5 + total_inputs: 8 + validated_inputs: 4 skipped_inputs: 0 - coverage_percentage: 56 -validation_coverage: 56 + coverage_percentage: 50 +validation_coverage: 50 auto_detected: true manual_review_required: true quality_indicators: