Debug sync-and-simulate cron job: surface curl output and log auth failures
All checks were successful
🚀 Deploy / 🧪 Test (pull_request) Successful in 2m57s
🚀 Deploy / ʦ🔍 Typecheck & Lint (pull_request) Successful in 1m29s
🚀 Deploy / 🧪 Test (push) Successful in 2m52s
🚀 Deploy / ʦ🔍 Typecheck & Lint (push) Successful in 1m28s
🚀 Deploy / 🐳 Build (pull_request) Has been skipped
🚀 Deploy / 🚀 Deploy (pull_request) Has been skipped
🚀 Deploy / 🐳 Build (push) Successful in 1m16s
🚀 Deploy / 🚀 Deploy (push) Successful in 11s

Remove -s (silent) from curl so CI logs show the HTTP response on failure.
Add logger.error in requireCronSecret so 401s from bad/missing secrets appear in Sentry.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Chris Parsons 2026-06-10 09:45:06 -07:00 committed by chrisp
parent ea85a21c83
commit 97a92aba7d
2 changed files with 4 additions and 1 deletions

View file

@ -9,6 +9,6 @@ jobs:
steps: steps:
- name: Sync standings and run simulations where changed - name: Sync standings and run simulations where changed
run: | run: |
curl -sf -X POST https://brackt.com/admin/jobs/sync-and-simulate \ curl -f -X POST https://brackt.com/admin/jobs/sync-and-simulate \
-H "X-Cron-Secret: ${{ secrets.CRON_SECRET }}" \ -H "X-Cron-Secret: ${{ secrets.CRON_SECRET }}" \
-H "Content-Type: application/json" -H "Content-Type: application/json"

View file

@ -1,7 +1,10 @@
import { logger } from "~/lib/logger";
export function requireCronSecret(request: Request): void { export function requireCronSecret(request: Request): void {
const secret = process.env.CRON_SECRET; const secret = process.env.CRON_SECRET;
if (!secret) throw new Response("CRON_SECRET not configured", { status: 500 }); if (!secret) throw new Response("CRON_SECRET not configured", { status: 500 });
if (request.headers.get("x-cron-secret") !== secret) { if (request.headers.get("x-cron-secret") !== secret) {
logger.error("[cron-auth] Invalid or missing X-Cron-Secret header");
throw new Response("Unauthorized", { status: 401 }); throw new Response("Unauthorized", { status: 401 });
} }
} }