Fix GitLab CI script arrays - ensure proper YAML formatting

- Convert all script sections to proper YAML arrays
- Remove complex multi-line shell constructs
- Simplify conditional logic for YAML compatibility
- Fixed script nesting issues
This commit is contained in:
Jane Alesi
2025-06-24 05:31:57 +02:00
committed by mw
parent a7da50cbe9
commit 2f4ad02830
+46 -130
View File
@@ -7,15 +7,12 @@ stages:
- cleanup - cleanup
variables: variables:
# Python and dependency versions (matching GitHub Actions exactly)
PYTHON_VERSION: "3.13" PYTHON_VERSION: "3.13"
MKDOCS_MATERIAL_VERSION: "9.6.14" MKDOCS_MATERIAL_VERSION: "9.6.14"
# Site configuration
PRODUCTION_URL: "https://satware.ai" PRODUCTION_URL: "https://satware.ai"
PREVIEW_BASE_URL: "https://satware.ai" PREVIEW_BASE_URL: "https://satware.ai"
# 🔧 Build Job Template (shared between production and preview) # Build Job Template
.build_template: .build_template:
image: python:${PYTHON_VERSION}-slim image: python:${PYTHON_VERSION}-slim
cache: cache:
@@ -24,42 +21,13 @@ variables:
- .cache/ - .cache/
- venv/ - venv/
before_script: before_script:
# Install system dependencies for MkDocs Material - apt-get update && apt-get install -y build-essential git libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev
- apt-get update && apt-get install -y
build-essential
git
libcairo2-dev
libfreetype6-dev
libffi-dev
libjpeg-dev
libpng-dev
libz-dev
# Setup Python virtual environment
- python -m venv venv - python -m venv venv
- source venv/bin/activate - source venv/bin/activate
- pip install --upgrade pip - pip install --upgrade pip
- pip install cairosvg libsass mkdocs-exclude mkdocs-git-revision-date-localized-plugin mkdocs-glightbox mkdocs-include-markdown-plugin mkdocs-literate-nav mkdocs-macros-plugin mkdocs-material==${MKDOCS_MATERIAL_VERSION} "mkdocs-material[imaging]" mkdocs-minify-plugin mkdocs-redirects mkdocs-rss-plugin mkdocs-snippets mkdocs-video watchdog
# Install exact same dependencies as GitHub Actions # Production Deployment
- pip install
cairosvg
libsass
mkdocs-exclude
mkdocs-git-revision-date-localized-plugin
mkdocs-glightbox
mkdocs-include-markdown-plugin
mkdocs-literate-nav
mkdocs-macros-plugin
mkdocs-material==${MKDOCS_MATERIAL_VERSION}
"mkdocs-material[imaging]"
mkdocs-minify-plugin
mkdocs-redirects
mkdocs-rss-plugin
mkdocs-snippets
mkdocs-video
watchdog
# 🌐 Production Deployment (main branch -> https://satware.ai)
pages: pages:
extends: .build_template extends: .build_template
stage: deploy stage: deploy
@@ -68,36 +36,23 @@ pages:
- if: $CI_COMMIT_REF_NAME == "main" - if: $CI_COMMIT_REF_NAME == "main"
script: script:
- source venv/bin/activate - source venv/bin/activate
# Build custom CSS from SCSS (exactly like GitHub Actions)
- mkdir -p docs/assets/css - mkdir -p docs/assets/css
- pysassc overrides/assets/css/custom.scss docs/assets/css/custom.css - pysassc overrides/assets/css/custom.scss docs/assets/css/custom.css
# Production deployment - keep original site_url
- echo "📍 Production deployment to ${PRODUCTION_URL}" - echo "📍 Production deployment to ${PRODUCTION_URL}"
- echo "Site URL:" $(grep '^site_url:' mkdocs.yml) - grep '^site_url:' mkdocs.yml || echo "No site_url found"
# Build the static site
- echo "🏗️ Building MkDocs site..." - echo "🏗️ Building MkDocs site..."
- mkdocs build --verbose - mkdocs build --verbose
# Prepare for GitLab Pages (requires 'public' directory)
- echo "📦 Preparing production deployment..." - echo "📦 Preparing production deployment..."
- mv site public - mv site public
# Generate deployment info
- echo "DEPLOYMENT_URL=${PRODUCTION_URL}" > deploy.env - echo "DEPLOYMENT_URL=${PRODUCTION_URL}" > deploy.env
- echo "DEPLOYMENT_TYPE=production" >> deploy.env - echo "DEPLOYMENT_TYPE=production" >> deploy.env
- echo "BRANCH=${CI_COMMIT_REF_NAME}" >> deploy.env - echo "BRANCH=${CI_COMMIT_REF_NAME}" >> deploy.env
- echo "COMMIT=${CI_COMMIT_SHA}" >> deploy.env - echo "COMMIT=${CI_COMMIT_SHA}" >> deploy.env
- echo "🚀 Production deployment ready"
# Deployment summary - echo " 📍 URL ${PRODUCTION_URL}"
- echo "🚀 Production deployment ready:" - echo " 🌿 Branch ${CI_COMMIT_REF_NAME}"
- echo " 📍 URL:" ${PRODUCTION_URL} - find public -type f | wc -l | xargs echo " 📦 Files"
- echo " 🌿 Branch:" ${CI_COMMIT_REF_NAME} - du -sh public | cut -f1 | xargs echo " 💾 Size"
- echo " 📦 Files:" $(find public -type f | wc -l)
- echo " 💾 Size:" $(du -sh public | cut -f1)
artifacts: artifacts:
paths: paths:
- public - public
@@ -107,7 +62,7 @@ pages:
name: production name: production
url: ${PRODUCTION_URL} url: ${PRODUCTION_URL}
# 🔍 Preview Deployment (feature branches -> https://satware.ai/feature/xyz) # Preview Deployment
preview: preview:
extends: .build_template extends: .build_template
stage: deploy stage: deploy
@@ -117,81 +72,44 @@ preview:
- if: $CI_COMMIT_REF_NAME =~ /^(develop|staging)$/ - if: $CI_COMMIT_REF_NAME =~ /^(develop|staging)$/
script: script:
- source venv/bin/activate - source venv/bin/activate
# Build custom CSS from SCSS
- mkdir -p docs/assets/css - mkdir -p docs/assets/css
- pysassc overrides/assets/css/custom.scss docs/assets/css/custom.css - pysassc overrides/assets/css/custom.scss docs/assets/css/custom.css
- echo "🔍 Preview deployment for branch ${CI_COMMIT_REF_NAME}"
# Configure site_url for preview deployment
- echo "🔍 Preview deployment for branch:" ${CI_COMMIT_REF_NAME}
# Extract clean branch name for URL path
- BRANCH_PATH=$(echo "${CI_COMMIT_REF_NAME}" | sed 's|feature/||g' | sed 's|fix/||g' | sed 's|blog/||g' | sed 's|[^a-zA-Z0-9-]|-|g' | tr '[:upper:]' '[:lower:]') - BRANCH_PATH=$(echo "${CI_COMMIT_REF_NAME}" | sed 's|feature/||g' | sed 's|fix/||g' | sed 's|blog/||g' | sed 's|[^a-zA-Z0-9-]|-|g' | tr '[:upper:]' '[:lower:]')
- PREVIEW_URL="${PREVIEW_BASE_URL}/${BRANCH_PATH}/" - PREVIEW_URL="${PREVIEW_BASE_URL}/${BRANCH_PATH}/"
- echo "📝 Updating site_url to ${PREVIEW_URL}"
- echo "📝 Updating site_url to:" ${PREVIEW_URL} - cp mkdocs.yml mkdocs.yml.backup
# Update site_url for preview deployment - sed -i "s|^site_url:.*|site_url: ${PREVIEW_URL}|" mkdocs.yml
- | - sed -i "s|^use_directory_urls:.*|use_directory_urls: true|" mkdocs.yml
if grep -q "^site_url:" mkdocs.yml; then - echo "✅ Updated mkdocs.yml for preview"
sed -i "s|^site_url:.*|site_url: ${PREVIEW_URL}|" mkdocs.yml - grep -E "^(site_url|use_directory_urls):" mkdocs.yml || echo "Config updated"
else
echo "site_url: ${PREVIEW_URL}" >> mkdocs.yml
fi
# Also update use_directory_urls for better preview navigation
- |
if grep -q "^use_directory_urls:" mkdocs.yml; then
sed -i "s|^use_directory_urls:.*|use_directory_urls: true|" mkdocs.yml
fi
- echo "✅ Updated mkdocs.yml for preview:"
- grep -E "^(site_url|use_directory_urls):" mkdocs.yml
# Build the static site
- echo "🏗️ Building MkDocs site..." - echo "🏗️ Building MkDocs site..."
- mkdocs build --verbose - mkdocs build --verbose
# For preview, create a deployable artifact
- mkdir -p preview-deploy/${BRANCH_PATH} - mkdir -p preview-deploy/${BRANCH_PATH}
- cp -r site/* preview-deploy/${BRANCH_PATH}/ - cp -r site/* preview-deploy/${BRANCH_PATH}/
# Generate deployment info
- echo "DEPLOYMENT_URL=${PREVIEW_URL}" > deploy.env - echo "DEPLOYMENT_URL=${PREVIEW_URL}" > deploy.env
- echo "DEPLOYMENT_TYPE=preview" >> deploy.env - echo "DEPLOYMENT_TYPE=preview" >> deploy.env
- echo "BRANCH=${CI_COMMIT_REF_NAME}" >> deploy.env - echo "BRANCH=${CI_COMMIT_REF_NAME}" >> deploy.env
- echo "BRANCH_PATH=${BRANCH_PATH}" >> deploy.env - echo "BRANCH_PATH=${BRANCH_PATH}" >> deploy.env
- echo "COMMIT=${CI_COMMIT_SHA}" >> deploy.env - echo "COMMIT=${CI_COMMIT_SHA}" >> deploy.env
- echo "# Preview Deployment Instructions" > DEPLOY_INSTRUCTIONS.md
# Create deployment instructions - echo "" >> DEPLOY_INSTRUCTIONS.md
- | - echo "**Branch:** \`${CI_COMMIT_REF_NAME}\`" >> DEPLOY_INSTRUCTIONS.md
cat > DEPLOY_INSTRUCTIONS.md << EOF - echo "**Preview URL:** ${PREVIEW_URL}" >> DEPLOY_INSTRUCTIONS.md
# 🔍 Preview Deployment Instructions - echo "**Commit:** \`${CI_COMMIT_SHA}\`" >> DEPLOY_INSTRUCTIONS.md
- echo "" >> DEPLOY_INSTRUCTIONS.md
**Branch:** \`${CI_COMMIT_REF_NAME}\` - echo "## Manual Deployment Steps:" >> DEPLOY_INSTRUCTIONS.md
**Preview URL:** ${PREVIEW_URL} - echo "" >> DEPLOY_INSTRUCTIONS.md
**Commit:** \`${CI_COMMIT_SHA}\` - echo "1. Download the \`preview-deploy\` artifact from this pipeline" >> DEPLOY_INSTRUCTIONS.md
- echo "2. Extract to your satware.ai server under path: \`/${BRANCH_PATH}/\`" >> DEPLOY_INSTRUCTIONS.md
## Manual Deployment Steps: - echo "3. Ensure web server serves files from this location" >> DEPLOY_INSTRUCTIONS.md
- echo "4. Access preview at: ${PREVIEW_URL}" >> DEPLOY_INSTRUCTIONS.md
1. Download the \`preview-deploy\` artifact from this pipeline - echo "🔍 Preview deployment ready"
2. Extract to your satware.ai server under path: \`/${BRANCH_PATH}/\` - echo " 📍 URL ${PREVIEW_URL}"
3. Ensure web server serves files from this location - echo " 🌿 Branch ${CI_COMMIT_REF_NAME}"
4. Access preview at: ${PREVIEW_URL} - echo " 📁 Path /${BRANCH_PATH}/"
- find preview-deploy -type f | wc -l | xargs echo " 📦 Files"
## Automated Deployment (Future): - du -sh preview-deploy | cut -f1 | xargs echo " 💾 Size"
Configure rsync/ssh to automatically deploy to your server:
\`\`\`bash
rsync -avz --delete preview-deploy/${BRANCH_PATH}/ user@satware.ai:/var/www/satware.ai/${BRANCH_PATH}/
\`\`\`
EOF
# Preview summary
- echo "🔍 Preview deployment ready:"
- echo " 📍 URL:" ${PREVIEW_URL}
- echo " 🌿 Branch:" ${CI_COMMIT_REF_NAME}
- echo " 📁 Path: /${BRANCH_PATH}/"
- echo " 📦 Files:" $(find preview-deploy -type f | wc -l)
- echo " 💾 Size:" $(du -sh preview-deploy | cut -f1)
artifacts: artifacts:
paths: paths:
- preview-deploy/ - preview-deploy/
@@ -204,7 +122,7 @@ preview:
url: ${PREVIEW_BASE_URL}/${BRANCH_PATH}/ url: ${PREVIEW_BASE_URL}/${BRANCH_PATH}/
on_stop: cleanup_preview on_stop: cleanup_preview
# 🧹 Cleanup Preview Environments (when branch is deleted) # Cleanup Preview
cleanup_preview: cleanup_preview:
stage: cleanup stage: cleanup
image: alpine:latest image: alpine:latest
@@ -215,14 +133,12 @@ cleanup_preview:
script: script:
- BRANCH_PATH=$(echo "${CI_COMMIT_REF_NAME}" | sed 's|feature/||g' | sed 's|fix/||g' | sed 's|blog/||g' | sed 's|[^a-zA-Z0-9-]|-|g' | tr '[:upper:]' '[:lower:]') - BRANCH_PATH=$(echo "${CI_COMMIT_REF_NAME}" | sed 's|feature/||g' | sed 's|fix/||g' | sed 's|blog/||g' | sed 's|[^a-zA-Z0-9-]|-|g' | tr '[:upper:]' '[:lower:]')
- echo "🧹 Cleanup preview environment for ${CI_COMMIT_REF_NAME}" - echo "🧹 Cleanup preview environment for ${CI_COMMIT_REF_NAME}"
- echo "Manual cleanup required - remove files from server path: /${BRANCH_PATH}/" - echo "Manual cleanup required - remove files from server path /${BRANCH_PATH}/"
# Add your cleanup commands here, e.g.:
# - ssh user@satware.ai "rm -rf /var/www/satware.ai/${BRANCH_PATH}/"
environment: environment:
name: preview/${CI_COMMIT_REF_SLUG} name: preview/${CI_COMMIT_REF_SLUG}
action: stop action: stop
# 📊 Build Information Job (runs on all branches for debugging) # Build Information
build_info: build_info:
stage: build stage: build
image: alpine:latest image: alpine:latest
@@ -230,13 +146,13 @@ build_info:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_REF_NAME =~ /.*/ - if: $CI_COMMIT_REF_NAME =~ /.*/
script: script:
- echo "🔍 Build Information:" - echo "🔍 Build Information"
- echo " 📁 Repository:" ${CI_PROJECT_PATH} - echo " 📁 Repository ${CI_PROJECT_PATH}"
- echo " 🌿 Branch:" ${CI_COMMIT_REF_NAME} - echo " 🌿 Branch ${CI_COMMIT_REF_NAME}"
- echo " 📝 Commit:" ${CI_COMMIT_SHA:0:8} - echo " 📝 Commit ${CI_COMMIT_SHA:0:8}"
- echo " 👤 Author:" ${GITLAB_USER_NAME} - echo " 👤 Author ${GITLAB_USER_NAME}"
- echo " 📅 Pipeline:" ${CI_PIPELINE_ID} - echo " 📅 Pipeline ${CI_PIPELINE_ID}"
- echo " 🔗 URL:" ${CI_PIPELINE_URL} - echo " 🔗 URL ${CI_PIPELINE_URL}"
- | - |
if [ "$CI_COMMIT_REF_NAME" = "main" ] || [ "$CI_COMMIT_REF_NAME" = "main-mkdocs" ]; then if [ "$CI_COMMIT_REF_NAME" = "main" ] || [ "$CI_COMMIT_REF_NAME" = "main-mkdocs" ]; then
echo " 🚀 Deployment: Production (${PRODUCTION_URL})" echo " 🚀 Deployment: Production (${PRODUCTION_URL})"