From f5bfc14f22123df37989f8fe10de86a585af1eef Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 21 Sep 2026 12:50:12 +0200 Subject: [PATCH] Switch AI failure-debugging to LiteLLM gateway (ai.starflinger.eu) The org-level OPENROUTER_API_KEY secret returns '401 API key expired' in the 'Debug failure with Claude Code' step, so every AI analysis in recent scheduled runs fails with no output. Point Claude Code at our self-hosted LiteLLM gateway instead: - ANTHROPIC_BASE_URL -> https://ai.starflinger.eu (serves /v1/messages) - model -> starflinger-anthropic (required; Claude Code would otherwise request its default claude-* model ids, which the gateway does not serve) - new org secret LITELLM_API_KEY, scoped key with $5/30d budget buildoor keeps OPENROUTER_API_KEY - it calls OpenRouter directly for release notes and must not inherit this change. --- .github/workflows/_shared-run-test.yaml | 21 +++++++++++---------- .github/workflows/_shared-run.yaml | 6 +++--- .github/workflows/run-manual.yml | 2 +- .github/workflows/run-scheduled.yml | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/_shared-run-test.yaml b/.github/workflows/_shared-run-test.yaml index c6503e0..9f11007 100644 --- a/.github/workflows/_shared-run-test.yaml +++ b/.github/workflows/_shared-run-test.yaml @@ -93,8 +93,8 @@ on: CHATGPT_KEY: description: 'ChatGPT Key' required: false - OPENROUTER_API_KEY: - description: 'OpenRouter API Key' + LITELLM_API_KEY: + description: 'LiteLLM API key (ai.starflinger.eu)' required: false S3_ACCESS_KEY: description: 'S3 Access Key' @@ -437,15 +437,15 @@ jobs: if: ${{ (failure() || steps.test_result.outputs.result == 'failure') && inputs.use_chatgpt != 'false' }} shell: bash run: | - if [ -z "$OPENROUTER_API_KEY" ]; then - echo "OpenRouter API key not available, skipping Claude Code setup" + if [ -z "$LITELLM_API_KEY" ]; then + echo "LiteLLM API key not available, skipping Claude Code setup" exit 0 fi curl -fsSL https://claude.ai/install.sh | bash export PATH="$HOME/.local/bin:$PATH" claude --version env: - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }} - name: Debug failure with Claude Code if: ${{ (failure() || steps.test_result.outputs.result == 'failure') && inputs.use_chatgpt != 'false' }} @@ -454,8 +454,8 @@ jobs: shell: bash run: | export PATH="$HOME/.local/bin:$PATH" - if [ -z "$OPENROUTER_API_KEY" ]; then - echo "OpenRouter API key not available, skipping Claude Code analysis" + if [ -z "$LITELLM_API_KEY" ]; then + echo "LiteLLM API key not available, skipping Claude Code analysis" exit 0 fi @@ -563,10 +563,11 @@ jobs: echo "EOF" >> $GITHUB_OUTPUT env: - ANTHROPIC_BASE_URL: "https://openrouter.ai/api" - ANTHROPIC_AUTH_TOKEN: ${{ secrets.OPENROUTER_API_KEY }} + ANTHROPIC_BASE_URL: "https://ai.starflinger.eu" + ANTHROPIC_MODEL: "starflinger-anthropic" + ANTHROPIC_SMALL_FAST_MODEL: "starflinger-anthropic" + ANTHROPIC_AUTH_TOKEN: ${{ secrets.LITELLM_API_KEY }} ANTHROPIC_API_KEY: "" - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} - name: Upload dump artifact if: ${{ steps.enclave_dump.outputs.dump_dir != '' }} diff --git a/.github/workflows/_shared-run.yaml b/.github/workflows/_shared-run.yaml index 28c0a1a..2bb1879 100644 --- a/.github/workflows/_shared-run.yaml +++ b/.github/workflows/_shared-run.yaml @@ -49,8 +49,8 @@ on: CHATGPT_KEY: description: 'ChatGPT Key' required: false - OPENROUTER_API_KEY: - description: 'OpenRouter API Key' + LITELLM_API_KEY: + description: 'LiteLLM API key (ai.starflinger.eu)' required: false S3_ACCESS_KEY: description: 'S3 Access Key' @@ -207,7 +207,7 @@ jobs: KUBECONFIG: ${{ needs.get_test.outputs.kubeconfig }} DISCORD_HOOK: ${{ secrets.DISCORD_HOOK }} CHATGPT_KEY: ${{ secrets.CHATGPT_KEY }} - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }} S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }} S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }} diff --git a/.github/workflows/run-manual.yml b/.github/workflows/run-manual.yml index 9478128..7501c41 100644 --- a/.github/workflows/run-manual.yml +++ b/.github/workflows/run-manual.yml @@ -153,6 +153,6 @@ jobs: RANCHER_TOKEN: ${{ secrets.RANCHER_TOKEN }} DISCORD_HOOK: ${{ secrets.DISCORD_WEBHOOK }} CHATGPT_KEY: ${{ secrets.CHATGPT_KEY }} - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }} S3_ACCESS_KEY: ${{ secrets.S3CACHE_ACCESS_KEY }} S3_SECRET_KEY: ${{ secrets.S3CACHE_ACCESS_SECRET }} diff --git a/.github/workflows/run-scheduled.yml b/.github/workflows/run-scheduled.yml index 0aaa385..bdf68b4 100644 --- a/.github/workflows/run-scheduled.yml +++ b/.github/workflows/run-scheduled.yml @@ -104,6 +104,6 @@ jobs: RANCHER_TOKEN: ${{ secrets.RANCHER_TOKEN }} DISCORD_HOOK: ${{ secrets.DISCORD_WEBHOOK }} CHATGPT_KEY: ${{ secrets.CHATGPT_KEY }} - OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} + LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }} S3_ACCESS_KEY: ${{ secrets.S3CACHE_ACCESS_KEY }} S3_SECRET_KEY: ${{ secrets.S3CACHE_ACCESS_SECRET }}