GitHub Actions "No files were found with the provided path" (upload-artifact)
actions/upload-artifact globs the provided path at upload time. If the build did not produce those files, or the path is wrong, the glob matches nothing and no artifact is uploaded.
What this error means
The upload-artifact step warns "No files were found with the provided path: <path>. No artifacts will be uploaded." Downstream download steps then fail to find the artifact.
Warning: No files were found with the provided path: dist/. No artifacts will be uploaded.Diagnose it: was the cache hit, and was it the right one?
Cache bugs split into three shapes and they need different fixes: the cache never saved, it saved but the key never matches on restore, or it restored a stale entry through a restore-keys prefix and is now poisoning the build. The step output tells you which one you have.
- uses: actions/cache@v4
id: cache
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
- name: What happened
run: |
echo "exact hit: ${{ steps.cache.outputs.cache-hit }}"
echo "key used: ${{ steps.cache.outputs.cache-matched-key }}"Common causes
Build output path mismatch
The path in upload-artifact does not match where the build actually wrote files (wrong directory, wrong glob).
A prior step failed silently
The build step that should have produced the files errored or was skipped, so the output directory is empty.
How to fix it
Verify the output path and fail loudly on empty
- List the directory before uploading to confirm files exist.
- Fix the path/glob to match the real build output.
- Set if-no-files-found: error to fail instead of silently skipping.
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
if-no-files-found: errorCache limits that produce confusing failures
- Repository cache is capped at 10 GB. Past that, GitHub evicts least-recently-used entries, so a large cache can silently stop persisting.
- Caches are scoped by branch. A cache written on a feature branch is not visible to another feature branch, only to its base and its own descendants.
- An entry not read for 7 days is evicted, so a rarely-run workflow effectively never has a warm cache.
- Restoring a cache built for a different tool version is worse than a cold start, because you get a corrupted tree instead of a clean install. Always include the tool version in the key.
How to prevent it
- Match the artifact path to the verified build output location.
- Set if-no-files-found: error so an empty upload fails the job.
- Ensure the producing step succeeded before uploading.