Skip to content

~200 arts -> PDF

~200 arts -> PDF #1608

Workflow file for this run

name: Build and Deploy
on:
workflow_dispatch:
push:
branches:
- main
jobs:
Build:
runs-on: ubuntu-latest
env:
BUILD_DIR: /home/runner/work/buddhist-uni.github.io/jekyll_build
steps:
- name: Checkout the Code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check Filenames and Headers
run: bash scripts/check-files.bash
- name: Download prod build
uses: dawidd6/action-download-artifact@master
with:
workflow: build.yaml
branch: main
name: github-pages
path: prod
- name: Prepare olid cover images
run: |
cd $GITHUB_WORKSPACE/prod
tar -xf artifact.tar
cd assets/imgs
mkdir -p covers
mv covers/ "$GITHUB_WORKSPACE/assets/imgs/"
cd $GITHUB_WORKSPACE
rm -rf prod
if git show | grep -q "olid: "; then
cd scripts
pip install titlecase pyyaml python-frontmatter
python dl-book-covers.py
else
echo "The previous commit didn't touch any olid's, so short-circuiting the download script"
fi
- name: Install node
uses: actions/setup-node@v4
with:
node-version: 18.16
cache: 'npm'
cache-dependency-path: 'package-lock.json'
- run: npm ci
- run: bash ./scripts/install-deps.bash
- name: Install build requirements
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3
bundler-cache: true
- name: Build the site
run: |
mkdir $BUILD_DIR
export RUBYOPT="--enable=yjit"
ruby --version
JEKYLL_ENV=production bundle exec jekyll build -d $BUILD_DIR --trace
- name: Minify CSS, HTML, and JS
run: bash scripts/minify.bash
- name: Upload Build as Artifact
uses: actions/upload-pages-artifact@v3
with:
path: ${{ env.BUILD_DIR }}
retention-days: 62
Deploy:
runs-on: ubuntu-latest
needs: Build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy the Artifact to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
- name: Invalidate the CloudFlare Cache
shell: bash
run: |
echo "Hitting the CloudFlare API..."
HTTP_RESPONSE=$(curl -sSX POST "https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache" -H "Authorization: Bearer ${{ secrets.CF_API_TOKEN }}" -H "Content-Type:application/json" -w "HTTP_STATUS:%{http_code}" --data '{"purge_everything":true}')
HTTP_BODY=$(echo "${HTTP_RESPONSE}" | sed -E 's/HTTP_STATUS\:[0-9]{3}$//')
HTTP_STATUS=$(echo "${HTTP_RESPONSE}" | tr -d '\n' | sed -E 's/.*HTTP_STATUS:([0-9]{3})$/\1/')
if [ "${HTTP_STATUS}" -eq "200" ]; then
SUCCESS=$(echo ${HTTP_BODY} | python3 -c "import sys, json;print(json.load(sys.stdin)['success'])")
if [ "${SUCCESS}" = "True" ]; then
echo "Successfully purged!"
echo "::group::Raw response"
echo "${HTTP_BODY}"
echo "::endgroup::"
exit 0
else
echo "Unsuccessful purge!"
echo "API response was:"
echo "${HTTP_BODY}"
exit 1
fi
else
echo "Request failed. API response was ($HTTP_STATUS): "
echo "${HTTP_BODY}"
exit 1
fi