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 .