Jan Astro Docs #47
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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/[email protected] | |
| - 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 }} |