Por Anónimo (no verificado) , 29 Abril 2026

El checkout en CI

Los entornos CI hacen checkout de tu código de cero en cada job. Las decisiones que tomas sobre cómo determinan los hits de cache, velocidad de build y seguridad.

Clone shallow para velocidad

git clone --depth=1 https://example.com/repo.git
- uses: actions/checkout@v4
  with:
    fetch-depth: 1
git fetch --unshallow

Sparse checkout para monorepos

git sparse-checkout init --cone
git sparse-checkout set apps/web shared/ui

Cachear .git entre jobs

cache:
  key: git-$CI_COMMIT_REF_SLUG
  paths:
    - .git/

Clonado autenticado

git clone https://oauth2:${TOKEN}@gitlab.com/group/repo.git

Builds reproducibles

npm ci
cargo build --locked

Detectar archivos cambiados

BASE=$(git merge-base origin/main HEAD)
CHANGED=$(git diff --name-only $BASE)
if echo "$CHANGED" | grep -q '^apps/web/'; then
  ./scripts/test-web.sh
fi

Workflows dirigidos por tags

Separa "build en cada push" de "publicar en tag".

Secretos fuera de Git

- uses: gitleaks/gitleaks-action@v2

Tagear el build

SHA=$(git rev-parse --short HEAD)
docker build -t myapp:$SHA -t myapp:latest .