Skip to content

Pipeline - AI

Pipeline - AI #1098

Workflow file for this run

name: Pipeline - AI
on:
workflow_run:
workflows: ["PNCP discovery"]
types: [completed]
schedule:
- cron: '15 * * * *'
workflow_dispatch:
concurrency:
group: pipeline-trigger
cancel-in-progress: false
jobs:
trigger:
runs-on: ubuntu-latest
timeout-minutes: 15
if: >
github.event_name != 'workflow_run' ||
github.event.workflow_run.conclusion == 'success'
env:
RENDER_APP_URL: ${{ secrets.RENDER_APP_URL }}
PIPELINE_SECRET: ${{ secrets.PIPELINE_SECRET }}
PIPELINE_STEP: ai
CURL_MAX_TIME_SECONDS: "600"
AI_EDITAIS_PER_DAY: "20"
AI_EDITAIS_PER_MINUTE: "3"
PACIFIC_WINDOW_START: "8"
PACIFIC_WINDOW_END: "19"
steps:
- name: Check Pacific daytime window and trigger
shell: bash
run: |
set -euo pipefail
PACIFIC_HOUR_RAW="$(TZ=America/Los_Angeles date +%H)"
PACIFIC_HOUR=$((10#$PACIFIC_HOUR_RAW))
PACIFIC_TIME="$(TZ=America/Los_Angeles date '+%H:%M %Z')"
echo "Pacific local time: ${PACIFIC_TIME}"
echo "Permitted window: ${PACIFIC_WINDOW_START}:00 – ${PACIFIC_WINDOW_END}:59 America/Los_Angeles"
echo "Mirrored backend limits: AI_EDITAIS_PER_DAY=${AI_EDITAIS_PER_DAY}, AI_EDITAIS_PER_MINUTE=${AI_EDITAIS_PER_MINUTE}"
if [ "$PACIFIC_HOUR" -lt "$PACIFIC_WINDOW_START" ] || [ "$PACIFIC_HOUR" -gt "$PACIFIC_WINDOW_END" ]; then
echo "Outside daytime Pacific processing window — skipping Render trigger."
exit 0
fi
echo "Inside daytime Pacific window — proceeding to trigger Render."
URL="${RENDER_APP_URL}/api/pipeline/${PIPELINE_STEP}"
MAX_ATTEMPTS=4
SLEEP_SECONDS=120
echo "Initiating AI trigger at Pacific time: ${PACIFIC_TIME}"
echo "Endpoint: POST ${URL}"
for attempt in $(seq 1 "$MAX_ATTEMPTS"); do
echo "Attempt ${attempt}/${MAX_ATTEMPTS}: POST ${URL}"
http_code=$(curl -sS -o response.json -w "%{http_code}" \
-X POST \
-H "Authorization: Bearer ${PIPELINE_SECRET}" \
--connect-timeout 30 \
--max-time "${CURL_MAX_TIME_SECONDS}" \
"$URL" || echo "000")
echo "HTTP ${http_code}"
cat response.json || true
echo
if [ "$http_code" = "200" ] || [ "$http_code" = "202" ]; then
echo "Outcome: operational success (HTTP ${http_code})"
exit 0
fi
if [ "$http_code" = "401" ] || [ "$http_code" = "403" ] || [ "$http_code" = "404" ]; then
echo "Non-retryable status ${http_code}"
exit 1
fi
if [ "$attempt" = "$MAX_ATTEMPTS" ]; then
echo "Exhausted retries after ${MAX_ATTEMPTS} attempts"
exit 1
fi
echo "Retrying in ${SLEEP_SECONDS}s…"
sleep "$SLEEP_SECONDS"
done