diff --git a/.gitea/workflows/agent.yml b/.gitea/workflows/agent.yml index 7ce220e..a329ede 100644 --- a/.gitea/workflows/agent.yml +++ b/.gitea/workflows/agent.yml @@ -4,6 +4,31 @@ name: agent # The gate + steps run in the caller's event context (github.event.* / github.repository are the caller's). on: workflow_call: + # Explicit secret contract so callers can map secrets by name (more reliable than + # secrets: inherit alone on some Gitea versions / cross-owner reusable workflows). + secrets: + GITEA_TOKEN: + required: true + OLLAMA_URL: + required: false + OLLAMA_CLOUD_API_KEY: + required: false + XAI_API_KEY: + required: false + TOKEN_PM: + required: false + TOKEN_SENIOR: + required: false + TOKEN_JUNIOR: + required: false + TOKEN_LEAD: + required: false + TOKEN_QA: + required: false + TOKEN_OPS: + required: false + TOKEN_INTERN: + required: false # Pinned opencode version — used to install it and to key the CI cache below. env: @@ -150,7 +175,9 @@ jobs: SCRIPTS: ${{ runner.temp }}/agents-scripts OLLAMA_URL: ${{ secrets.OLLAMA_URL }} OLLAMA_CLOUD_API_KEY: ${{ secrets.OLLAMA_CLOUD_API_KEY }} - XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + # Accept common alternate names — empty XAI_API_KEY has bitten us when the + # secret was stored under a slightly different key on the caller repo. + XAI_API_KEY: ${{ secrets.XAI_API_KEY || secrets.XAI_KEY || secrets.GROK_API_KEY || secrets.XAI_TOKEN }} NAME: ${{ steps.prep.outputs.name }} SKILLS: ${{ steps.prep.outputs.skills }} # JSON array of skills this agent may load run: bash "$SCRIPTS/install-opencode.sh" @@ -213,7 +240,7 @@ jobs: id: run env: SCRIPTS: ${{ runner.temp }}/agents-scripts - XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + XAI_API_KEY: ${{ secrets.XAI_API_KEY || secrets.XAI_KEY || secrets.GROK_API_KEY || secrets.XAI_TOKEN }} # SELF_TOKEN = the RUNNING agent's OWN token (TOKEN_PM for @pm, TOKEN_OPS for @ops, …). # Only this agent's token is placed in its process env, so no agent can act as another. # Powers the gitea-api / gitea-admin skills — each agent calls Gitea as itself. Every diff --git a/.gitea/workflows/ai-agent.yml b/.gitea/workflows/ai-agent.yml index 25879fc..803ca3b 100644 --- a/.gitea/workflows/ai-agent.yml +++ b/.gitea/workflows/ai-agent.yml @@ -12,4 +12,17 @@ on: jobs: agent: uses: gitea/agents/.gitea/workflows/agent.yml@main - secrets: inherit + # Explicit secret map (plus inherit) so XAI_API_KEY / OLLAMA_* always reach the reusable + # workflow. secrets: inherit alone has left XAI_API_KEY empty on some Gitea cross-owner calls. + secrets: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + OLLAMA_URL: ${{ secrets.OLLAMA_URL }} + OLLAMA_CLOUD_API_KEY: ${{ secrets.OLLAMA_CLOUD_API_KEY }} + XAI_API_KEY: ${{ secrets.XAI_API_KEY }} + TOKEN_PM: ${{ secrets.TOKEN_PM }} + TOKEN_SENIOR: ${{ secrets.TOKEN_SENIOR }} + TOKEN_JUNIOR: ${{ secrets.TOKEN_JUNIOR }} + TOKEN_LEAD: ${{ secrets.TOKEN_LEAD }} + TOKEN_QA: ${{ secrets.TOKEN_QA }} + TOKEN_OPS: ${{ secrets.TOKEN_OPS }} + TOKEN_INTERN: ${{ secrets.TOKEN_INTERN }} diff --git a/.gitea/workflows/scripts/install-opencode.sh b/.gitea/workflows/scripts/install-opencode.sh index b6189cc..f5c4cfd 100755 --- a/.gitea/workflows/scripts/install-opencode.sh +++ b/.gitea/workflows/scripts/install-opencode.sh @@ -5,6 +5,14 @@ # NAME SKILLS GITHUB_PATH HOME set -eu +# Non-secret diagnostics — prove which provider keys reached the runner (length only). +echo "provider key lengths: OLLAMA_URL=${#OLLAMA_URL} OLLAMA_CLOUD_API_KEY=${#OLLAMA_CLOUD_API_KEY} XAI_API_KEY=${#XAI_API_KEY}" +if [ -z "${XAI_API_KEY:-}" ]; then + echo "WARNING: XAI_API_KEY is empty in this job. xai-oc fallback will fail." + echo "Fix: set Actions secret XAI_API_KEY on the CALLER repo (e.g. ffaerber/homelab)," + echo "not only on gitea/agents. Name must be exact: XAI_API_KEY" +fi + # PIN the opencode version: an unpinned `latest` means a breaking release (CLI flags, or the # --format json event schema that build-activity-log.sh parses) breaks every agent in every repo # at once. Bump deliberately by changing this default (or set OPENCODE_VERSION in the step env).