mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-09 13:53:03 +02:00
Skip installing Node.js entirely if v20+ is already available, otherwise install v22. Add npm dependency caching with OS-specific cache keys using the custom detect-runner-os action for proper cache isolation between runners. Dependencies normally take just under 10s, so this should more than halve the doc build time to free up runner slots.
87 lines
3.1 KiB
YAML
87 lines
3.1 KiB
YAML
name: Documentation
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
tags:
|
|
- "v*"
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: "pages-${{ github.ref }}"
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
docs:
|
|
name: Build and Deploy Documentation
|
|
runs-on: ubuntu-latest
|
|
if: secrets.CLOUDFLARE_API_TOKEN != ''
|
|
|
|
steps:
|
|
- name: Sync repository
|
|
uses: https://github.com/actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
fetch-depth: 0
|
|
|
|
- name: Setup mdBook
|
|
uses: https://github.com/peaceiris/actions-mdbook@v2
|
|
with:
|
|
mdbook-version: "latest"
|
|
|
|
- name: Build mdbook
|
|
run: mdbook build
|
|
|
|
- name: Prepare static files for deployment
|
|
run: |
|
|
mkdir -p ./public/.well-known/matrix
|
|
mkdir -p ./public/.well-known/continuwuity
|
|
mkdir -p ./public/schema
|
|
# Copy the Matrix .well-known files
|
|
cp ./docs/static/server ./public/.well-known/matrix/server
|
|
cp ./docs/static/client ./public/.well-known/matrix/client
|
|
cp ./docs/static/client ./public/.well-known/matrix/support
|
|
cp ./docs/static/announcements.json ./public/.well-known/continuwuity/announcements
|
|
cp ./docs/static/announcements.schema.json ./public/schema/announcements.schema.json
|
|
# Copy the custom headers file
|
|
cp ./docs/static/_headers ./public/_headers
|
|
echo "Copied .well-known files and _headers to ./public"
|
|
|
|
- name: Detect runner environment
|
|
id: runner-env
|
|
uses: ./.forgejo/actions/detect-runner-os
|
|
|
|
- name: Setup Node.js
|
|
if: steps.runner-env.outputs.node_major == '' || steps.runner-env.outputs.node_major < '20'
|
|
uses: https://github.com/actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
|
|
- name: Cache npm dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ~/.npm
|
|
key: ${{ steps.runner-env.outputs.slug }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ steps.runner-env.outputs.slug }}-node-
|
|
|
|
- name: Install dependencies
|
|
run: npm install --save-dev wrangler@latest
|
|
|
|
- name: Deploy to Cloudflare Pages (Production)
|
|
if: github.ref == 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
|
with:
|
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
command: pages deploy ./public --branch="main" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|
|
|
|
- name: Deploy to Cloudflare Pages (Preview)
|
|
if: github.ref != 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
|
with:
|
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
command: pages deploy ./public --branch="${{ github.head_ref || github.ref_name }}" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|