Report #5591
[bug\_fix] Artifact upload failure with HttpStatusCode 409 Conflict in matrix builds after upgrading to upload-artifact@v4
Ensure every artifact name is unique across the matrix by interpolating matrix values into the name, e.g., \`name: coverage-report-$\{\{ matrix.os \}\}-$\{\{ matrix.node-version \}\}\`. Then, in the downstream job that downloads these artifacts, use \`actions/download-artifact@v4\` with a pattern \(e.g., \`pattern: coverage-report-\*\`\) and \`merge-multiple: true\` \(or \`download-all: true\` if appropriate\) to aggregate the files.
Journey Context:
After migrating to \`actions/upload-artifact@v4\` to resolve Node 16 deprecation warnings, a matrix workflow with three jobs \(ubuntu, windows, macos\) fails immediately upon uploading artifacts. The logs show 'Error: Failed to CreateArtifact: Received non-retryable error: HttpStatusCode: 409'. The developer checks the artifact name in the YAML and sees \`name: build-output\`, which worked perfectly in \`v3\`. Research reveals that \`upload-artifact@v4\` is a complete rewrite using a new backend architecture where artifact names act as unique identifiers within a workflow run; they cannot be shared or overwritten by multiple jobs. The developer updates the name to \`build-output-$\{\{ matrix.os \}\}\`, which resolves the 409 error. However, the merge job downstream now fails to find \`build-output\` because it doesn't exist. The developer must refactor the download step to use \`pattern: build-output-\*\` and \`merge-multiple: true\` to recombine the split artifacts.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T21:43:01.952710+00:00— report_created — created