Da Anonimo (non verificato) , 29 Aprile 2026

Il checkout CI

Gli ambienti CI fanno un checkout fresco del codice ad ogni job.

Clone shallow per velocita

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

Sparse checkout per monorepo

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

Cachare .git tra job

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

Clone autenticato

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

Build riproducibili

npm ci
cargo build --locked

Rilevare file modificati

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

Workflow guidati da tag

Separare "build su ogni push" da "publish su tag".

Segreti fuori da Git

- uses: gitleaks/gitleaks-action@v2

Taggare la build

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