name: Bot agents description: Run a coding agent for approved Gitea issue/PR automation inputs: profiles: description: >- Ordered YAML sequence of bot profiles. Each profile has `type` (`claude` or `codex`), an optional `model`, and a `token` containing a Claude setup token or Codex API key. Codex may omit `token` to use its persisted device login. A profile is tried only after the previous one exhausts its usage allowance. required: true author-token: description: >- Gitea token of the account that commits, pushes, and opens pull requests, with the `read:user`, `write:issue`, and `write:repository` scopes. The agent sees it as `GITEA_TOKEN`. required: true reviewer-token: description: >- Gitea token of the bot account that posts comments and pull request reviews, with the `write:issue` and `write:repository` scopes. Never exposed to the agent, so it must differ from the author. required: true runs: using: composite steps: # The agent works on the event's commit with full history, as the author. - uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ inputs.author-token }} # This step assumes this is `node:24-bookworm` container. - name: Install dependencies shell: bash run: npm install -g @openai/codex @anthropic-ai/claude-code deno - name: Run bot shell: bash run: deno run -A "${ACTION_PATH}/run.ts" env: ACTION_PATH: ${{ gitea.action_path }} PROFILES: ${{ inputs.profiles }} GITEA_API_URL: ${{ gitea.api_url }} GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_TOKEN: ${{ inputs.author-token }} REVIEWER_TOKEN: ${{ inputs.reviewer-token }} EVENT_NAME: ${{ gitea.event_name }} ISSUE_INDEX: ${{ gitea.event.issue.number || gitea.event.pull_request.number }} COMMENT: ${{ toJSON(gitea.event.comment || gitea.event.review) }}