Changeset 0.12.0 (#63)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# .gitea/workflows/ci.yaml
|
||||
# ============================================
|
||||
# Chat Switchboard - CI/CD Pipeline (v0.9.4)
|
||||
# Chat Switchboard - CI/CD Pipeline (v0.12.0)
|
||||
# ============================================
|
||||
# Cluster deployments use SEPARATE FE + BE images.
|
||||
# Unified image is for Docker Hub only (docker-compose use).
|
||||
@@ -31,6 +31,9 @@
|
||||
# Required Gitea Variables:
|
||||
# REGISTRY, NAMESPACE, DOMAIN, POSTGRES_HOST
|
||||
# SEED_USERS (optional) — CSV: "user:pass:role,..." for dev/test seed accounts
|
||||
# STORAGE_CLASS — StorageClass for PVC (e.g. "cephfs", required for file storage)
|
||||
# STORAGE_SIZE — PVC capacity (e.g. "10Gi", default: "10Gi")
|
||||
# STORAGE_BACKEND — "pvc" or "s3" (default: "pvc")
|
||||
#
|
||||
# Required Gitea Secrets:
|
||||
# POSTGRES_USER, POSTGRES_PASSWORD
|
||||
@@ -39,6 +42,7 @@
|
||||
# ENCRYPTION_KEY — AES-256 key for API key encryption (openssl rand -base64 32)
|
||||
# VENICE_API_KEY (live provider integration tests — optional, tests skip if missing)
|
||||
# DOCKERHUB_USERNAME, DOCKERHUB_TOKEN (optional)
|
||||
# S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY (only when STORAGE_BACKEND=s3)
|
||||
#
|
||||
# Global Variables (Gitea org-level):
|
||||
# CERT_ISSUER_PROD
|
||||
@@ -450,6 +454,26 @@ jobs:
|
||||
--from-literal=ENCRYPTION_KEY="${ENCRYPTION_KEY}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
- name: Sync S3 secrets
|
||||
if: vars.STORAGE_BACKEND == 's3'
|
||||
env:
|
||||
S3_ENDPOINT: ${{ vars.S3_ENDPOINT }}
|
||||
S3_BUCKET: ${{ vars.S3_BUCKET }}
|
||||
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
|
||||
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
|
||||
S3_REGION: ${{ vars.S3_REGION || 'us-east-1' }}
|
||||
S3_PREFIX: ${{ vars.S3_PREFIX }}
|
||||
run: |
|
||||
kubectl create secret generic switchboard-s3 \
|
||||
--namespace=${NAMESPACE} \
|
||||
--from-literal=S3_ENDPOINT="${S3_ENDPOINT}" \
|
||||
--from-literal=S3_BUCKET="${S3_BUCKET}" \
|
||||
--from-literal=S3_ACCESS_KEY="${S3_ACCESS_KEY}" \
|
||||
--from-literal=S3_SECRET_KEY="${S3_SECRET_KEY}" \
|
||||
--from-literal=S3_REGION="${S3_REGION}" \
|
||||
--from-literal=S3_PREFIX="${S3_PREFIX}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
- name: Render and apply manifests
|
||||
env:
|
||||
ENVIRONMENT: ${{ steps.env.outputs.ENVIRONMENT }}
|
||||
@@ -468,12 +492,31 @@ jobs:
|
||||
BE_MEMORY_LIMIT: ${{ steps.env.outputs.BE_MEMORY_LIMIT }}
|
||||
BE_CPU_REQUEST: ${{ steps.env.outputs.BE_CPU_REQUEST }}
|
||||
BE_CPU_LIMIT: ${{ steps.env.outputs.BE_CPU_LIMIT }}
|
||||
# Storage (v0.12.0+)
|
||||
STORAGE_CLASS: ${{ vars.STORAGE_CLASS }}
|
||||
STORAGE_SIZE: ${{ vars.STORAGE_SIZE || '10Gi' }}
|
||||
STORAGE_BACKEND: ${{ vars.STORAGE_BACKEND || 'pvc' }}
|
||||
EXTRACTION_CONCURRENCY: ${{ vars.EXTRACTION_CONCURRENCY || '3' }}
|
||||
run: |
|
||||
# Render PVC first (must exist before backend references it)
|
||||
if [[ -n "${STORAGE_CLASS}" ]]; then
|
||||
envsubst < k8s/storage-pvc.yaml > /tmp/storage-pvc.yaml
|
||||
fi
|
||||
|
||||
envsubst < k8s/backend.yaml > /tmp/backend.yaml
|
||||
envsubst < k8s/frontend.yaml > /tmp/frontend.yaml
|
||||
envsubst < k8s/ingress.yaml > /tmp/ingress.yaml
|
||||
|
||||
echo "━━━ Applying manifests for ${DEPLOY_HOST} ━━━"
|
||||
|
||||
# Apply PVC (idempotent — won't recreate if exists)
|
||||
if [[ -n "${STORAGE_CLASS}" ]]; then
|
||||
kubectl apply -f /tmp/storage-pvc.yaml
|
||||
echo " ✓ Storage PVC (class: ${STORAGE_CLASS}, size: ${STORAGE_SIZE})"
|
||||
else
|
||||
echo " ⚠ STORAGE_CLASS not set — file storage disabled"
|
||||
fi
|
||||
|
||||
kubectl apply -f /tmp/backend.yaml
|
||||
kubectl apply -f /tmp/frontend.yaml
|
||||
kubectl apply -f /tmp/ingress.yaml
|
||||
@@ -536,6 +579,15 @@ jobs:
|
||||
echo "| **Frontend** | \`${FE_IMAGE}:${{ steps.env.outputs.IMAGE_TAG }}\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| **Database** | \`${{ steps.env.outputs.DB_NAME }}\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| **DB Wipe** | ${{ steps.env.outputs.DB_WIPE }} |" >> $GITHUB_STEP_SUMMARY
|
||||
if [[ -n "${{ vars.STORAGE_CLASS }}" ]]; then
|
||||
if [[ "${{ vars.STORAGE_BACKEND }}" == "s3" ]]; then
|
||||
echo "| **Storage** | S3 (bucket: ${{ vars.S3_BUCKET }}, PVC scratch: ${{ vars.STORAGE_CLASS }}) |" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "| **Storage** | PVC (class: ${{ vars.STORAGE_CLASS }}, size: ${{ vars.STORAGE_SIZE || '10Gi' }}) |" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
else
|
||||
echo "| **Storage** | Disabled (STORAGE_CLASS not set) |" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
if [[ "${{ steps.env.outputs.is_release }}" == "true" ]]; then
|
||||
echo "| **Docker Hub** | \`${DOCKERHUB_IMAGE}:${{ steps.env.outputs.EXTRA_TAG }}\` (unified) |" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user