From 30c6811519e080650be768c448fa74c0fb7cb4c8 Mon Sep 17 00:00:00 2001 From: Jordan Ritter Date: Tue, 21 Apr 2026 13:01:38 -0700 Subject: [PATCH] chore(ci): add interim keep-alive cron for showcase starters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a GitHub Actions workflow that curls /api/health on each of the 17 showcase starter services every 5 minutes to keep the agent's in-memory state warm (JIT, module cache, connection pools). Railway Pro tier doesn't sleep containers, but warm-state decays over idle. Intentionally minimal: no Slack, no metrics, no state. Observability is already covered by showcase_smoke-monitor.yml — this is strictly keep-alive. INTERIM — will be superseded by showcase-ops smoke probe cadence once that service lands (see Notion proposal §2a). --- .github/workflows/showcase_keep-alive.yml | 51 +++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/showcase_keep-alive.yml diff --git a/.github/workflows/showcase_keep-alive.yml b/.github/workflows/showcase_keep-alive.yml new file mode 100644 index 0000000000..3a41a2e54f --- /dev/null +++ b/.github/workflows/showcase_keep-alive.yml @@ -0,0 +1,51 @@ +# INTERIM — superseded by showcase-ops smoke cadence (see Notion). +# +# Goal: curl /api/health on each showcase starter every 5 min so the agent's +# in-memory state (JIT, module cache, connection pools) stays warm. Railway Pro +# tier doesn't sleep containers, but warm-state decays over idle. +# +# This workflow is intentionally minimal — no Slack, no metrics, no state. +# Observability / alerting is already handled by showcase_smoke-monitor.yml. +# This is strictly keep-alive. + +name: "Showcase: Keep-Alive" + +on: + schedule: + - cron: "*/5 * * * *" + workflow_dispatch: {} + +jobs: + ping: + name: Ping ${{ matrix.slug }} + if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + timeout-minutes: 2 + continue-on-error: true + strategy: + fail-fast: false + matrix: + slug: + - ag2 + - agno + - claude-sdk-python + - claude-sdk-typescript + - crewai-crews + - google-adk + - langgraph-fastapi + - langgraph-python + - langgraph-typescript + - langroid + - llamaindex + - mastra + - ms-agent-dotnet + - ms-agent-python + - pydantic-ai + - spring-ai + - strands + steps: + - name: Ping /api/health + run: | + curl -fsS --max-time 15 \ + "https://showcase-${{ matrix.slug }}-production.up.railway.app/api/health" \ + > /dev/null