Skip to content
Latchkey

GitHub Actions actions/upload-artifact "No files were found" (v4)

actions/upload-artifact@v4 resolves the path input as a glob relative to the workspace. When the glob matches no files - wrong directory, a build that did not run, or a typo - v4 errors (or warns) that nothing was found.

What this error means

An upload-artifact step reports that no files were found at the provided path, and downstream jobs have no artifact to download.

github-actions
Error: 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.

.github/workflows/ci.yml
- 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 missing or in another directory

The producing step failed, ran in a different working-directory, or wrote output to a path the glob does not cover.

Glob does not match

A trailing-slash, case, or relative-path mistake makes the pattern match nothing.

How to fix it

Point the path at the real output and fail loudly

  1. Confirm the build step produced files and where.
  2. Set path to the correct glob (relative to the workspace).
  3. Set if-no-files-found: error to fail fast instead of silently skipping.
.github/workflows/ci.yml
- uses: actions/upload-artifact@v4
  with:
    name: dist
    path: dist/
    if-no-files-found: error

Cache 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

  • Set if-no-files-found: error so missing output fails the job.
  • Verify the producing step ran in the expected working-directory.

Frequently asked questions

What causes GitHub Actions actions/upload-artifact "No files were found" (v4)?
There are 2 common causes: build output missing or in another directory and glob does not match. The producing step failed, ran in a different working-directory, or wrote output to a path the glob does not cover.
How do I fix GitHub Actions actions/upload-artifact "No files were found" (v4)?
Point the path at the real output and fail loudly. Confirm the build step produced files and where.
What does GitHub Actions actions/upload-artifact "No files were found" (v4) actually mean?
An upload-artifact step reports that no files were found at the provided path, and downstream jobs have no artifact to download.
How do I stop GitHub Actions actions/upload-artifact "No files were found" (v4) happening again?
Set if-no-files-found: error so missing output fails the job. The prevention section lists 2 changes that keep it from recurring.

Related guides

References

Not every red build is your code. Latchkey repairs the ones that are not, on the runner. Start free → 30-day trial · No credit card