Skip to content

Add web health check route for Render #11

Add web health check route for Render

Add web health check route for Render #11

name: Deploy to Cloudflare Workers
on:
workflow_dispatch:
push:
branches:
- main
permissions:
contents: read
concurrency:
group: cloudflare-production
cancel-in-progress: true
jobs:
deploy:
runs-on: ubuntu-latest
env:
NODE_OPTIONS: --max-old-space-size=6144
DISABLE_WEBPACK_CACHE: "1"
AUTH_SECRET: ${{ secrets.AUTH_SECRET }}
AUTH_URL: ${{ secrets.AUTH_URL }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
LEMON_SQUEEZY_API_KEY: ${{ secrets.LEMON_SQUEEZY_API_KEY }}
LEMON_SQUEEZY_PLUS_VARIANT_ID: ${{ secrets.LEMON_SQUEEZY_PLUS_VARIANT_ID }}
LEMON_SQUEEZY_PRO_VARIANT_ID: ${{ secrets.LEMON_SQUEEZY_PRO_VARIANT_ID }}
LEMON_SQUEEZY_WEBHOOK_SECRET: ${{ secrets.LEMON_SQUEEZY_WEBHOOK_SECRET }}
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
NEXT_PUBLIC_APP_URL: ${{ secrets.NEXT_PUBLIC_APP_URL }}
NEXT_PUBLIC_LEMON_STORE_ID: ${{ secrets.NEXT_PUBLIC_LEMON_STORE_ID }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
NEXTAUTH_URL: ${{ secrets.NEXTAUTH_URL }}
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
RESEND_FROM_EMAIL: ${{ secrets.RESEND_FROM_EMAIL }}
RESEND_REPLY_TO_EMAIL: ${{ secrets.RESEND_REPLY_TO_EMAIL }}
SEARXNG_BASE_URL: ${{ secrets.SEARXNG_BASE_URL }}
SERPER_API_KEY: ${{ secrets.SERPER_API_KEY }}
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
SUPABASE_JWT_SECRET: ${{ secrets.SUPABASE_JWT_SECRET }}
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
WEB_URL: ${{ secrets.WEB_URL }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 11.0.9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build OpenNext worker
run: pnpm exec opennextjs-cloudflare build
- name: Write Cloudflare runtime secrets file
shell: bash
run: |
cat > .cloudflare.secrets.env <<EOF
AUTH_SECRET=${AUTH_SECRET}
AUTH_URL=${AUTH_URL}
GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
LEMON_SQUEEZY_API_KEY=${LEMON_SQUEEZY_API_KEY}
LEMON_SQUEEZY_PLUS_VARIANT_ID=${LEMON_SQUEEZY_PLUS_VARIANT_ID}
LEMON_SQUEEZY_PRO_VARIANT_ID=${LEMON_SQUEEZY_PRO_VARIANT_ID}
LEMON_SQUEEZY_WEBHOOK_SECRET=${LEMON_SQUEEZY_WEBHOOK_SECRET}
MISTRAL_API_KEY=${MISTRAL_API_KEY}
NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL}
NEXT_PUBLIC_LEMON_STORE_ID=${NEXT_PUBLIC_LEMON_STORE_ID}
NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY}
NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
NEXTAUTH_URL=${NEXTAUTH_URL}
RESEND_API_KEY=${RESEND_API_KEY}
RESEND_FROM_EMAIL=${RESEND_FROM_EMAIL}
RESEND_REPLY_TO_EMAIL=${RESEND_REPLY_TO_EMAIL}
SEARXNG_BASE_URL=${SEARXNG_BASE_URL}
SERPER_API_KEY=${SERPER_API_KEY}
SUPABASE_ANON_KEY=${SUPABASE_ANON_KEY}
SUPABASE_JWT_SECRET=${SUPABASE_JWT_SECRET}
SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY}
SUPABASE_URL=${SUPABASE_URL}
WEB_URL=${WEB_URL}
NODE_ENV=production
EOF
- name: Deploy Frontend (tera-web) to Cloudflare Workers
run: pnpm exec wrangler deploy --config wrangler.jsonc --secrets-file .cloudflare.secrets.env
- name: Deploy Backend API (tera-api) to Cloudflare Workers
run: pnpm exec wrangler deploy --config backend-server/wrangler.toml --secrets-file .cloudflare.secrets.env