Skip to content

ci(deps): bump actions/upload-artifact from 4 to 6 #86

ci(deps): bump actions/upload-artifact from 4 to 6

ci(deps): bump actions/upload-artifact from 4 to 6 #86

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ master, publish ]
pull_request:
branches: [ master, publish ]
permissions:
contents: write
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3.5'
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: Install Node.js dependencies
run: npm ci
- name: Lint JavaScript
run: npm run lint
- name: Build site
run: npm run build
env:
JEKYLL_ENV: production
- name: Verify site assets
run: |
echo "=== Verifying critical site assets ==="
# Check for CSS files
if [ ! -f "_site/assets/styles/main.css" ]; then
echo "❌ CRITICAL: main.css not found"
exit 1
else
echo "✅ main.css found ($(wc -c < _site/assets/styles/main.css) bytes)"
fi
# Check for JavaScript files
if [ ! -f "_site/assets/scripts/main.min.js" ]; then
echo "❌ CRITICAL: main.min.js not found"
exit 1
else
echo "✅ main.min.js found ($(wc -c < _site/assets/scripts/main.min.js) bytes)"
fi
# Check for essential fonts
FONT_COUNT=$(find _site/assets/fonts -name "*.woff2" 2>/dev/null | wc -l)
if [ "$FONT_COUNT" -lt 3 ]; then
echo "❌ CRITICAL: Missing fonts (found $FONT_COUNT, expected at least 3)"
exit 1
else
echo "✅ Fonts found ($FONT_COUNT .woff2 files)"
fi
# Check for favicon
if [ ! -f "_site/assets/graphics/favicon/favicon.ico" ]; then
echo "❌ WARNING: favicon.ico not found"
else
echo "✅ favicon.ico found"
fi
# Check for critical pages
CRITICAL_PAGES=("index.html" "about/index.html" "beginner/index.html" "host/index.html" "blog/index.html")
for page in "${CRITICAL_PAGES[@]}"; do
if [ ! -f "_site/$page" ]; then
echo "❌ CRITICAL: Page $page not found"
exit 1
else
echo "✅ Page $page found"
fi
done
# Check for language versions
LANGUAGES=("en" "es" "fr" "cs")
for lang in "${LANGUAGES[@]}"; do
if [ "$lang" = "en" ]; then
# English is at root
if [ ! -f "_site/index.html" ]; then
echo "❌ CRITICAL: English homepage not found"
exit 1
fi
else
if [ ! -f "_site/$lang/index.html" ]; then
echo "❌ CRITICAL: $lang homepage not found"
exit 1
else
echo "✅ $lang homepage found"
fi
fi
done
# Summary statistics
TOTAL_FILES=$(find _site -type f | wc -l)
TOTAL_SIZE=$(du -sh _site | cut -f1)
echo ""
echo "=== Build Summary ==="
echo "Total files: $TOTAL_FILES"
echo "Total size: $TOTAL_SIZE"
echo "✅ All critical assets verified successfully"
- name: Upload build artifacts
uses: actions/upload-artifact@v6
with:
name: site-build
path: _site/
retention-days: 1
# Deployment job - push built files to master branch
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/publish' && github.event_name == 'push'
steps:
- name: Checkout master branch
uses: actions/checkout@v4
with:
ref: master
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: site-build
path: _site/
- name: Verify build artifacts
run: |
echo "Checking _site directory contents:"
ls -la _site/ || echo "No _site directory found"
if [ ! -d "_site" ] || [ -z "$(ls -A _site)" ]; then
echo "Error: _site directory is empty or missing"
exit 1
fi
- name: Deploy to master branch
run: |
# Configure git
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# Debug: Show current directory contents
echo "=== Before cleanup ==="
ls -la
# Remove all files except .git and _site (more targeted approach)
shopt -s dotglob
for item in *; do
if [[ "$item" != ".git" && "$item" != "_site" ]]; then
echo "Removing: $item"
rm -rf "$item"
fi
done
shopt -u dotglob
# Debug: Show directory after cleanup
echo "=== After cleanup ==="
ls -la
# Debug: Show _site contents
echo "=== _site directory contents ==="
ls -la _site/
# Copy built site files to root with verification
if [ -d "_site" ] && [ "$(ls -A _site)" ]; then
echo "Copying _site contents to root..."
# Use rsync for more reliable copying
rsync -av --exclude='.git' _site/ .
echo "Copy completed. Removing _site directory..."
rm -rf _site
else
echo "Error: _site directory is empty or does not exist"
exit 1
fi
- name: Verify rsync deployment
run: |
echo "=== Verifying rsync deployment was successful ==="
# Check critical assets were copied correctly
CRITICAL_ASSETS=(
"assets/styles/main.css"
"assets/scripts/main.min.js"
"assets/graphics/favicon/favicon.ico"
"index.html"
"about/index.html"
"beginner/index.html"
"host/index.html"
"blog/index.html"
)
MISSING_ASSETS=()
for asset in "${CRITICAL_ASSETS[@]}"; do
if [ -f "$asset" ]; then
SIZE=$(wc -c < "$asset")
echo "✅ $asset found ($SIZE bytes)"
else
echo "❌ CRITICAL: $asset missing after rsync"
MISSING_ASSETS+=("$asset")
fi
done
# Check language versions
LANGUAGES=("es" "fr" "cs")
for lang in "${LANGUAGES[@]}"; do
if [ -f "$lang/index.html" ]; then
echo "✅ $lang/index.html found"
else
echo "❌ CRITICAL: $lang/index.html missing after rsync"
MISSING_ASSETS+=("$lang/index.html")
fi
done
# Check font files
FONT_COUNT=$(find assets/fonts -name "*.woff2" 2>/dev/null | wc -l)
if [ "$FONT_COUNT" -ge 3 ]; then
echo "✅ Font files found ($FONT_COUNT .woff2 files)"
else
echo "❌ CRITICAL: Insufficient font files after rsync (found $FONT_COUNT, expected ≥3)"
MISSING_ASSETS+=("fonts")
fi
# Summary
if [ ${#MISSING_ASSETS[@]} -eq 0 ]; then
TOTAL_FILES=$(find . -type f -not -path './.git/*' | wc -l)
TOTAL_SIZE=$(du -sh . --exclude=.git | cut -f1)
echo ""
echo "✅ rsync deployment verification PASSED"
echo "📊 Deployed $TOTAL_FILES files ($TOTAL_SIZE total)"
echo "🚀 Ready for commit and push"
else
echo ""
echo "❌ rsync deployment verification FAILED"
echo "Missing assets:"
for asset in "${MISSING_ASSETS[@]}"; do
echo " - $asset"
done
echo ""
echo "=== Debug: Current directory structure ==="
ls -la
echo "=== Debug: assets directory ==="
ls -la assets/ 2>/dev/null || echo "assets directory not found"
echo "=== Debug: Searching for any CSS files ==="
find . -name "*.css" -type f -not -path './.git/*' || echo "No CSS files found"
exit 1
fi
- name: Commit and push changes
run: |
# Debug: Show final directory structure
# Debug: Show final directory structure
echo "=== Final directory structure ==="
ls -la
# Add and commit changes
git add -A
if git diff --staged --quiet; then
echo "No changes to deploy"
else
echo "Committing and pushing changes..."
git commit -m "CI deploy to gh-pages from publish@${{ github.sha }}"
git push origin master
fi