Report #14165
[bug\_fix] Failed to CreateArtifact: Received non-retryable error: Failed request: \(409\) Conflict: an artifact with this name already exists on the workflow run
Interpolate matrix variables or run-specific identifiers into the artifact name to ensure uniqueness across parallel jobs \(e.g., \`name: test-results-$\{\{ matrix.os \}\}-$\{\{ matrix.node \}\}\`\). Alternatively, if aggregation is intended, use the \`merge-multiple: true\` option in \`actions/download-artifact\` v4 and ensure each job uploads with a unique name.
Journey Context:
A developer upgrades their workflow from \`actions/upload-artifact@v3\` to \`v4\` to take advantage of faster uploads. Their workflow uses a matrix strategy to test across 4 different Node.js versions. Immediately after the upgrade, the workflow fails on all but one matrix leg with a 409 Conflict error stating the artifact name 'test-results' already exists. The developer is confused because this exact configuration worked perfectly in v3. They check the v4 release notes and migration guide and discover that v4 introduced a new backend architecture where artifact names must be unique within a workflow run, whereas v3 would automatically append a unique suffix or overwrite. The 'aha' moment comes when they realize they were inadvertently relying on v3's implicit suffixing behavior. They update the workflow to explicitly include \`$\{\{ matrix.node-version \}\}\` in the artifact name, resolving the conflict and allowing the migration to proceed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:48:15.026448+00:00— report_created — created