Guía9 min

upload-artifact en GitHub Actions: v4, retention corto, cero secretos

Resumen

actions/upload-artifact@v4 sube logs o dist. v3 está deprecado. retention-days corto (1–7 en PRs). Nunca subas .env ni tokens. No es cache. Un agente que sube el repo entero quema storage. Docs upload-artifact README + GitHub storing artifacts.

GitHub
Un artifact pequeño de logs, no el home del runner

Qué resuelve

Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.

CI falló y el agente no tiene el log. actions/upload-artifact sube archivos del job para descargarlos después. No es actions/cache (otra guía): el cache acelera el siguiente run; el artifact es evidencia.

v1/v2/v3 están deprecados. Usa v4. El README lo dice al frente.

El curso instalar un agente no cubre artifacts. gh pr no sustituye un log subido.

Receta mínima

- uses: actions/upload-artifact@v4
  if: always()
  with:
    name: playwright-report
    path: playwright-report/
    retention-days: 3
    if-no-files-found: warn

if: always() sube aunque el test falle (justo cuando lo necesitas).

No subas:

  • .env, *.pem, dumps de DB con PII
  • node_modules ni el repo entero
  • El store de pnpm (eso es cache)

Paths concretos, no $HOME

Retention

Default del repo puede ser 90 días. En PRs de agentes: 1–7. El README documenta retention-days. Cada artifact cuenta contra storage.

Nombres únicos por job/matrix (name: report-${{ matrix.os }}). v4 no mergea el mismo nombre como v3.

overwrite: true solo si el ticket lo pide. Por defecto no pises el artifact de otro job.

Receta AGENTS.md

upload-artifact@v4 only. Never v3.
retention-days 1-7 for PR debug artifacts.
Never upload secrets, .env, or the whole workspace.
if: always() when the artifact is a failure report.

Retention corto vs 90 días

FAQ

¿download-artifact? Otro action, mismo major v4. No mezcles v3 download con v4 upload.

¿Forks? Artifacts de PRs de fork tienen reglas de acceso. No asumas que el bot puede bajarlos todos.

¿Límites? El README lista número de artifacts por run. Un glob **/* te los come.

Un agente que sube path: . para “tener todo” es un leak. Lista paths.

Verificado 2026-09-03 contra actions/upload-artifact README (v3 deprecation, retention-days, v4).