146 lines
5.3 KiB
YAML
146 lines
5.3 KiB
YAML
name: Jan Astro Docs
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- dev
|
|
paths:
|
|
- 'website/**'
|
|
- '.github/workflows/jan-astro-docs.yml'
|
|
pull_request:
|
|
paths:
|
|
- 'website/**'
|
|
- '.github/workflows/jan-astro-docs.yml'
|
|
# Review gh actions docs if you want to further define triggers, paths, etc
|
|
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
|
|
workflow_dispatch:
|
|
inputs:
|
|
update_cloud_spec:
|
|
description: 'Update Jan Server API specification'
|
|
required: false
|
|
default: 'false'
|
|
type: choice
|
|
options:
|
|
- 'true'
|
|
- 'false'
|
|
schedule:
|
|
# Run daily at 2 AM UTC to sync with Jan Server updates
|
|
- cron: '0 2 * * *'
|
|
|
|
jobs:
|
|
deploy:
|
|
name: Deploy to CloudFlare Pages
|
|
env:
|
|
CLOUDFLARE_PROJECT_NAME: astro-docs # docs.jan.ai
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
deployments: write
|
|
pull-requests: write
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 20
|
|
|
|
- uses: oven-sh/setup-bun@v2
|
|
|
|
- name: Install jq
|
|
uses: dcarbone/install-jq-action@v2.0.1
|
|
|
|
- name: Fill env vars
|
|
continue-on-error: true
|
|
working-directory: website
|
|
run: |
|
|
env_example_file=".env.example"
|
|
touch .env
|
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
if [[ "$line" == *"="* ]]; then
|
|
var_name=$(echo $line | cut -d '=' -f 1)
|
|
echo $var_name
|
|
var_value="$(jq -r --arg key "$var_name" '.[$key]' <<< "$SECRETS")"
|
|
echo "$var_name=$var_value" >> .env
|
|
fi
|
|
done < "$env_example_file"
|
|
env:
|
|
SECRETS: '${{ toJson(secrets) }}'
|
|
|
|
- name: Install dependencies
|
|
working-directory: website
|
|
run: bun install
|
|
|
|
- name: Update Jan Server API Spec (Scheduled/Manual)
|
|
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.update_cloud_spec == 'true')
|
|
working-directory: website
|
|
continue-on-error: true
|
|
run: |
|
|
echo "📡 Updating Jan Server API specification..."
|
|
bun run generate:cloud-spec
|
|
|
|
# Check if the spec file was updated
|
|
if git diff --quiet public/openapi/cloud-openapi.json; then
|
|
echo "✅ No changes to API specification"
|
|
else
|
|
echo "📝 API specification updated"
|
|
# Commit the changes if this is a scheduled run on main branch
|
|
if [ "${{ github.event_name }}" = "schedule" ] && [ "${{ github.ref }}" = "refs/heads/dev" ]; then
|
|
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
git config --local user.name "github-actions[bot]"
|
|
git add public/openapi/cloud-openapi.json
|
|
git commit -m "chore: update Jan Server API specification [skip ci]"
|
|
git push
|
|
fi
|
|
fi
|
|
env:
|
|
JAN_SERVER_SPEC_URL: ${{ secrets.JAN_SERVER_SPEC_URL || 'https://api.jan.ai/api/swagger/doc.json' }}
|
|
JAN_SERVER_PROD_URL: ${{ secrets.JAN_SERVER_PROD_URL || 'https://api.jan.ai/v1' }}
|
|
- name: Build website
|
|
working-directory: website
|
|
run: |
|
|
# For PR and regular pushes, skip cloud spec generation in prebuild
|
|
# It will use the existing committed spec or fallback
|
|
if [ "${{ github.event_name }}" = "pull_request" ] || [ "${{ github.event_name }}" = "push" ]; then
|
|
echo "Using existing cloud spec for build"
|
|
export SKIP_CLOUD_SPEC_UPDATE=true
|
|
fi
|
|
bun run build
|
|
env:
|
|
SKIP_CLOUD_SPEC_UPDATE: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
|
|
|
|
- name: copy redirects and headers
|
|
continue-on-error: true
|
|
working-directory: website
|
|
run: |
|
|
cp _redirects dist/_redirects
|
|
cp _headers dist/_headers
|
|
|
|
- name: Publish to Cloudflare Pages PR Preview and Staging
|
|
if: github.event_name == 'pull_request'
|
|
uses: cloudflare/pages-action@v1
|
|
with:
|
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
projectName: ${{ env.CLOUDFLARE_PROJECT_NAME }}
|
|
directory: ./website/dist
|
|
# Optional: Enable this if you want to have GitHub Deployments triggered
|
|
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
|
|
id: deployCloudflarePages
|
|
|
|
- uses: mshick/add-pr-comment@v2
|
|
if: github.event_name == 'pull_request'
|
|
with:
|
|
message: |
|
|
Preview URL Astro Docs: ${{ steps.deployCloudflarePages.outputs.url }}
|
|
|
|
- name: Publish to Cloudflare Pages Production
|
|
if: (github.event_name == 'push' && github.ref == 'refs/heads/dev') || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/dev')
|
|
uses: cloudflare/pages-action@v1
|
|
with:
|
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
projectName: ${{ env.CLOUDFLARE_PROJECT_NAME }}
|
|
directory: ./website/dist
|
|
branch: main
|
|
# Optional: Enable this if you want to have GitHub Deployments triggered
|
|
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
|