Build/Test Tools: Prevent the NPM/Composer caches in GitHub Actions from snowballing.
The actions/cache
GitHub action uses a key
input to find the desired cache in storage. Currently, this is defined as a combination of the operating system being used, the software being cached (NPM or Composer), PHP version (Composer only), and a hash of the relevant lock file.
The cache
action also supports a restore-keys
input, which is an ordered list of keys to use for restoring a cache if no cache hit occurred for the specified key.
However, this means that every time a lock file is updated, the cache is being recreated by first restoring a previous one (when available), and then installing new versions of dependencies on top of that. This results in old, unused versions of dependencies never being removed from the cache.
In this change, the restore-keys
are removed. This will force a new, fresh cache to be generated when the desired key
is not matched. In testing, this results in a ~40% reduction in cache size when compared to the latest successful workflow runs. Since there is no way to manually flush the cache in GHA, the benefits of this change will not be seen until the package-lock.json
and composer.lock
files are updated, or the cache at the desired key is evicted.
Props johbillion.
See #52660.