Artifact upload step ran but no files were found

An artifact upload step was executed but reported that no files matched the configured path.

artifact-missing high confidence silent_failure github-actions

Matched signals

  • no files found with the provided path
  • Artifact not found
  • Skipping upload
  • No matching files were found
  • Path does not exist
  • 0 files uploaded
  • no artifacts

Artifact upload step ran but no files were found

What this failure means

An artifact upload step was executed but reported that no files matched the configured path. The CI job continued and marked itself as passing even though no artifact was produced.

Symptoms

Faultline looks for one or more of these log fragments:

no files found with the provided path
Artifact not found
Skipping upload
No matching files were found
Path does not exist
0 files uploaded
no artifacts

Diagnosis

CI artifact upload steps (GitHub Actions actions/upload-artifact, GitLab CI artifacts.paths, CircleCI store_artifacts, etc.) skip the upload when no files match the provided path pattern. By default these steps exit zero and allow the job to continue, creating a misleading green status while no artifact is available for downstream consumers.

Common causes:

  • The build step that was supposed to produce the artifact failed silently (possibly also due to || true or continue-on-error).
  • The artifact path glob is incorrect: a relative vs absolute path mismatch, a missing intermediate directory, or a wrong file extension.
  • The build was run in a Docker container but the upload step runs on the host and the output path is not shared.
  • A conditional if: expression skipped the build step but the upload step still ran.

Fix steps

  1. Confirm the build step that produces the artifact actually ran and exited zero.
  2. Print the working directory and check the expected output path:
    ls -la <expected artifact path>
    
  3. Adjust the artifact path glob to match the actual output location.
  4. For GitHub Actions: resolve paths from the repository root or use absolute paths. Use a if: always() guard only when intentionally capturing artifacts from failing jobs.
  5. Add a pre-upload assertion that the artifact exists:
    - run: test -f dist/app.tar.gz
    

Validation

Re-run the job and confirm the upload step reports “Uploading N files” with a positive file count.

Try it locally

Run the build step locally and verify the artifact path exists
ls -la <artifact path>

How Faultline detects it

Use faultline explain artifact-missing to see the full playbook.

faultline analyze build.log
faultline explain artifact-missing

Generated from playbooks/bundled/log/silent/artifact-missing.yaml. Do not edit directly.

Try it on your own failed log

$ faultline analyze failed.log
Want this across every CI run? Faultline Teams tracks recurring failures across all your repos and surfaces patterns in a shared dashboard.