127 lines
4.0 KiB
YAML
127 lines
4.0 KiB
YAML
# -----------------------------------------
|
||
# USBcheck.it – GitLab CI/CD Pipeline
|
||
# Build: pnpm (z.B. Astro)
|
||
# Deploy: FTPS (lftp) → all-inkl
|
||
# -----------------------------------------
|
||
|
||
stages:
|
||
- install
|
||
- build
|
||
- deploy
|
||
|
||
variables:
|
||
NODE_ENV: production
|
||
# Wenn dein Build woanders hin schreibt (z.B. "build" oder ".output/public"):
|
||
# HIER anpassen!
|
||
BUILD_DIR: dist
|
||
|
||
# -----------------------------------------
|
||
# Gemeinsames Setup für Node + pnpm
|
||
# -----------------------------------------
|
||
.node_pnpm: &node_pnpm
|
||
image: node:20-bullseye
|
||
before_script:
|
||
- echo "🧩 Corepack/Pnpm aktivieren..."
|
||
- corepack enable
|
||
- corepack prepare pnpm@9.12.0 --activate
|
||
- pnpm -v
|
||
|
||
# -----------------------------------------
|
||
# Cache für node_modules
|
||
# -----------------------------------------
|
||
cache:
|
||
key: ${CI_COMMIT_REF_SLUG}
|
||
paths:
|
||
- node_modules/
|
||
|
||
# -----------------------------------------
|
||
# 1. Dependencies installieren
|
||
# -----------------------------------------
|
||
install:
|
||
stage: install
|
||
<<: *node_pnpm
|
||
script:
|
||
- echo "📦 Installing deps..."
|
||
- if [ -f pnpm-lock.yaml ]; then pnpm install --frozen-lockfile --reporter=append-only; else pnpm install --reporter=append-only; fi
|
||
artifacts:
|
||
paths:
|
||
- node_modules/
|
||
expire_in: 1h
|
||
|
||
# -----------------------------------------
|
||
# 2. Projekt bauen
|
||
# -----------------------------------------
|
||
build:
|
||
stage: build
|
||
<<: *node_pnpm
|
||
dependencies:
|
||
- install
|
||
script:
|
||
- echo "🏗️ Building..."
|
||
- pnpm build
|
||
- echo "📂 Build-Output (Top-Level):"
|
||
- ls -la
|
||
- echo "📂 Inhalt von ${BUILD_DIR} (falls vorhanden):"
|
||
- if [ -d "${BUILD_DIR}" ]; then ls -la "${BUILD_DIR}"; else echo "⚠️ Verzeichnis ${BUILD_DIR} existiert NICHT!"; fi
|
||
- echo "✅ Build complete."
|
||
artifacts:
|
||
paths:
|
||
- ${BUILD_DIR}/
|
||
expire_in: 1 week
|
||
|
||
# -----------------------------------------
|
||
# 3a. Staging Deployment via FTPS
|
||
# -----------------------------------------
|
||
deploy:staging:
|
||
stage: deploy
|
||
image: alpine:3.20
|
||
dependencies:
|
||
- build
|
||
before_script:
|
||
- echo "📡 Installing lftp..."
|
||
- apk add --no-cache lftp
|
||
- echo "📂 Dateien im CI-Workspace vor Deploy:"
|
||
- pwd
|
||
- ls -la
|
||
- echo "📂 Inhalt von ${BUILD_DIR} (Deploy-Job):"
|
||
- if [ -d "${BUILD_DIR}" ]; then ls -la "${BUILD_DIR}"; else echo "❌ ${BUILD_DIR} existiert HIER nicht!"; fi
|
||
script:
|
||
- if [ ! -d "${BUILD_DIR}" ]; then echo "❌ Abbruch: Build-Verzeichnis ${BUILD_DIR} fehlt im Deploy-Job."; exit 1; fi
|
||
- echo "🚀 Deploy via FTPS to $FTP_HOST:$FTP_PATH_STAGING ..."
|
||
- lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; mirror -R --delete --parallel=4 ${BUILD_DIR}/ $FTP_PATH_STAGING; bye"
|
||
- echo "✅ Deploy finished (staging)."
|
||
environment:
|
||
name: staging
|
||
url: https://staging.usbcheck.it
|
||
only:
|
||
- develop
|
||
- merge_requests
|
||
|
||
# -----------------------------------------
|
||
# 3b. Production Deployment via FTPS
|
||
# -----------------------------------------
|
||
deploy:production:
|
||
stage: deploy
|
||
image: alpine:3.20
|
||
dependencies:
|
||
- build
|
||
before_script:
|
||
- echo "📡 Installing lftp..."
|
||
- apk add --no-cache lftp
|
||
- echo "📂 Dateien im CI-Workspace vor Deploy:"
|
||
- pwd
|
||
- ls -la
|
||
- echo "📂 Inhalt von ${BUILD_DIR} (Deploy-Job):"
|
||
- if [ -d "${BUILD_DIR}" ]; then ls -la "${BUILD_DIR}"; else echo "❌ ${BUILD_DIR} existiert HIER nicht!"; fi
|
||
script:
|
||
- if [ ! -d "${BUILD_DIR}" ]; then echo "❌ Abbruch: Build-Verzeichnis ${BUILD_DIR} fehlt im Deploy-Job."; exit 1; fi
|
||
- echo "🚀 Deploy via FTPS to $FTP_HOST:$FTP_PATH_PROD ..."
|
||
- lftp -e "set ftp:ssl-force true; set ftp:passive-mode true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; mirror -R --delete --parallel=4 ${BUILD_DIR}/ $FTP_PATH_PROD; bye"
|
||
- echo "✅ Deploy finished (production)."
|
||
environment:
|
||
name: production
|
||
url: https://www.usbcheck.it
|
||
only:
|
||
- main
|
||
when: manual
|