Skip to content

Production Smoke

Production Smoke #745

name: Production Smoke
on:
schedule:
- cron: "0 * * * *" # every hour at :00
workflow_dispatch:
permissions:
contents: read
# One run at a time — if a scheduled run is already in progress, the next
# trigger waits rather than cancelling the active check.
concurrency:
group: production-smoke
cancel-in-progress: false
jobs:
smoke:
name: Smoke checks
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
with:
version: "10.28.0"
- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "22.14.0"
# The smoke script uses only Node.js built-ins (fetch, AbortSignal).
# No pnpm install step is required — pnpm run delegates to node directly.
- name: Run production smoke checks
id: smoke
run: pnpm smoke:production
- name: Write job summary
if: always()
run: |
OUTCOME="${{ steps.smoke.outcome }}"
TIMESTAMP="$(date -u +'%Y-%m-%d %H:%M UTC')"
{
echo "## Production Smoke — ${TIMESTAMP}"
if [ "${OUTCOME}" = "success" ]; then
echo "**Result: PASS**"
else
echo "**Result: FAIL** — see run log for details"
fi
echo ""
echo "Checks: public pages, fixture availability, end-to-end validation"
} >> "$GITHUB_STEP_SUMMARY"