Skip to content

Modernize 2025 (#540) #65

Modernize 2025 (#540)

Modernize 2025 (#540) #65

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: Upload build artifacts
uses: actions/upload-artifact@v4
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/ .
# Alternative: Use find and cp for better reliability
# find _site -mindepth 1 -maxdepth 1 -exec cp -r {} . \;
echo "Copy completed. Removing _site directory..."
rm -rf _site
else
echo "Error: _site directory is empty or does not exist"
exit 1
fi
# Debug: Show final directory structure
echo "=== Final directory structure ==="
ls -la
echo "=== assets directory ==="
ls -la assets/ || echo "No assets directory found"
echo "=== assets/styles directory ==="
ls -la assets/styles/ || echo "No assets/styles directory found"
echo "=== Checking for main.css ==="
find . -name "main.css" -type f || echo "main.css not found"
# 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