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 .