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 }}