feat: 階段一 - 基本流程串接骨架
- 重寫 action.yaml:支援所有 LLM providers 的 inputs - 重寫 Dockerfile:python:3.11-slim + git - 重寫 entrypoint.sh:啟動 app/main.py - app/config.py:環境變數與 LLM 自動偵測 - app/llm.py:OpenAI-compatible 統一介面 - app/gitea.py:PR diff 取得與 comment 發布 - app/roles.py:從 prompts/roles/*.yaml 載入角色 - app/main.py:pipeline 骨架,log 每個主要階段 - app/prompts/roles/:五個角色定義(Aria/Rex/Zara/Leo/Maya)
This commit is contained in:
+152
-14
@@ -1,20 +1,158 @@
|
||||
name: 'Docker Action Template'
|
||||
description: 'Docker Action 範本'
|
||||
name: 'AI Code Review'
|
||||
description: 'AI 多角色 Code Review Action,自動分析 PR 並發布問題 Comment'
|
||||
author: 'Jeffery'
|
||||
inputs:
|
||||
runner_token:
|
||||
description: 'Gitea Runner Token'
|
||||
required: true
|
||||
text:
|
||||
description: '輸入的文字'
|
||||
default: "Hello, World!"
|
||||
outputs:
|
||||
text:
|
||||
description: '輸出的文字'
|
||||
# Gitea 相關(可從 gitea context 自動取得)
|
||||
GITEA_TOKEN:
|
||||
description: 'Gitea API Token'
|
||||
required: false
|
||||
GITEA_SERVER_URL:
|
||||
description: 'Gitea Server URL'
|
||||
required: false
|
||||
GITEA_REPOSITORY:
|
||||
description: 'Gitea Repository (owner/repo)'
|
||||
required: false
|
||||
PR_NUMBER:
|
||||
description: 'Pull Request Number'
|
||||
required: false
|
||||
PR_HEAD_BRANCH:
|
||||
description: 'PR 來源分支'
|
||||
required: false
|
||||
PR_BASE_BRANCH:
|
||||
description: 'PR 目標分支'
|
||||
required: false
|
||||
|
||||
# OpenAI-compatible
|
||||
OPENAI_API_KEY:
|
||||
description: 'OpenAI / OpenRouter API Key'
|
||||
required: false
|
||||
OPENAI_BASE_URL:
|
||||
description: 'OpenAI-compatible Base URL'
|
||||
required: false
|
||||
OPENAI_MODEL:
|
||||
description: 'OpenAI-compatible Model Name'
|
||||
required: false
|
||||
|
||||
# Anthropic Claude
|
||||
CLAUDE_API_KEY:
|
||||
description: 'Anthropic Claude API Key'
|
||||
required: false
|
||||
CLAUDE_BASE_URL:
|
||||
description: 'Claude Base URL'
|
||||
required: false
|
||||
CLAUDE_MODEL:
|
||||
description: 'Claude Model Name'
|
||||
required: false
|
||||
|
||||
# Google Gemini
|
||||
GEMINI_API_KEY:
|
||||
description: 'Google Gemini API Key'
|
||||
required: false
|
||||
GEMINI_BASE_URL:
|
||||
description: 'Gemini Base URL'
|
||||
required: false
|
||||
GEMINI_MODEL:
|
||||
description: 'Gemini Model Name'
|
||||
required: false
|
||||
|
||||
# Ollama
|
||||
OLLAMA_BASE_URL:
|
||||
description: 'Ollama Base URL'
|
||||
required: false
|
||||
OLLAMA_MODEL:
|
||||
description: 'Ollama Model Name'
|
||||
required: false
|
||||
|
||||
# Amazon Q
|
||||
AMAZONQ_API_KEY:
|
||||
description: 'Amazon Q API Key'
|
||||
required: false
|
||||
AMAZONQ_BASE_URL:
|
||||
description: 'Amazon Q Base URL'
|
||||
required: false
|
||||
|
||||
# SonarQube
|
||||
SONARQUBE_TOKEN:
|
||||
description: 'SonarQube Token'
|
||||
required: false
|
||||
SONARQUBE_URL:
|
||||
description: 'SonarQube URL'
|
||||
required: false
|
||||
|
||||
# Kilo Code
|
||||
KILO_API_KEY:
|
||||
description: 'Kilo Code API Key'
|
||||
required: false
|
||||
KILO_BASE_URL:
|
||||
description: 'Kilo Code Base URL'
|
||||
required: false
|
||||
|
||||
# Roo Code
|
||||
ROO_API_KEY:
|
||||
description: 'Roo Code API Key'
|
||||
required: false
|
||||
ROO_BASE_URL:
|
||||
description: 'Roo Code Base URL'
|
||||
required: false
|
||||
|
||||
# Cline
|
||||
CLINE_API_KEY:
|
||||
description: 'Cline API Key'
|
||||
required: false
|
||||
CLINE_BASE_URL:
|
||||
description: 'Cline Base URL'
|
||||
required: false
|
||||
|
||||
# Continue
|
||||
CONTINUE_API_KEY:
|
||||
description: 'Continue API Key'
|
||||
required: false
|
||||
CONTINUE_BASE_URL:
|
||||
description: 'Continue Base URL'
|
||||
required: false
|
||||
|
||||
# Kade
|
||||
KADE_API_KEY:
|
||||
description: 'Kade API Key'
|
||||
required: false
|
||||
KADE_BASE_URL:
|
||||
description: 'Kade Base URL'
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
env:
|
||||
GITEA_SERVER_URL: ${{ gitea.server_url }}
|
||||
GITEA_REPOSITORY: ${{ gitea.repository }}
|
||||
RUNNER_TOKEN: ${{ inputs.runner_token || secrets.GITEA_TOKEN || secrets.RUNNER_TOKEN }}
|
||||
# Gitea context(優先用 inputs,否則從 gitea context 取)
|
||||
GITEA_TOKEN: ${{ inputs.GITEA_TOKEN || secrets.GITEA_TOKEN }}
|
||||
GITEA_SERVER_URL: ${{ inputs.GITEA_SERVER_URL || gitea.server_url }}
|
||||
GITEA_REPOSITORY: ${{ inputs.GITEA_REPOSITORY || gitea.repository }}
|
||||
PR_NUMBER: ${{ inputs.PR_NUMBER || gitea.event.pull_request.number }}
|
||||
PR_HEAD_BRANCH: ${{ inputs.PR_HEAD_BRANCH || gitea.event.pull_request.head.ref }}
|
||||
PR_BASE_BRANCH: ${{ inputs.PR_BASE_BRANCH || gitea.event.pull_request.base.ref }}
|
||||
# LLM
|
||||
OPENAI_API_KEY: ${{ inputs.OPENAI_API_KEY }}
|
||||
OPENAI_BASE_URL: ${{ inputs.OPENAI_BASE_URL }}
|
||||
OPENAI_MODEL: ${{ inputs.OPENAI_MODEL }}
|
||||
CLAUDE_API_KEY: ${{ inputs.CLAUDE_API_KEY }}
|
||||
CLAUDE_BASE_URL: ${{ inputs.CLAUDE_BASE_URL }}
|
||||
CLAUDE_MODEL: ${{ inputs.CLAUDE_MODEL }}
|
||||
GEMINI_API_KEY: ${{ inputs.GEMINI_API_KEY }}
|
||||
GEMINI_BASE_URL: ${{ inputs.GEMINI_BASE_URL }}
|
||||
GEMINI_MODEL: ${{ inputs.GEMINI_MODEL }}
|
||||
OLLAMA_BASE_URL: ${{ inputs.OLLAMA_BASE_URL }}
|
||||
OLLAMA_MODEL: ${{ inputs.OLLAMA_MODEL }}
|
||||
AMAZONQ_API_KEY: ${{ inputs.AMAZONQ_API_KEY }}
|
||||
AMAZONQ_BASE_URL: ${{ inputs.AMAZONQ_BASE_URL }}
|
||||
SONARQUBE_TOKEN: ${{ inputs.SONARQUBE_TOKEN }}
|
||||
SONARQUBE_URL: ${{ inputs.SONARQUBE_URL }}
|
||||
KILO_API_KEY: ${{ inputs.KILO_API_KEY }}
|
||||
KILO_BASE_URL: ${{ inputs.KILO_BASE_URL }}
|
||||
ROO_API_KEY: ${{ inputs.ROO_API_KEY }}
|
||||
ROO_BASE_URL: ${{ inputs.ROO_BASE_URL }}
|
||||
CLINE_API_KEY: ${{ inputs.CLINE_API_KEY }}
|
||||
CLINE_BASE_URL: ${{ inputs.CLINE_BASE_URL }}
|
||||
CONTINUE_API_KEY: ${{ inputs.CONTINUE_API_KEY }}
|
||||
CONTINUE_BASE_URL: ${{ inputs.CONTINUE_BASE_URL }}
|
||||
KADE_API_KEY: ${{ inputs.KADE_API_KEY }}
|
||||
KADE_BASE_URL: ${{ inputs.KADE_BASE_URL }}
|
||||
|
||||
Reference in New Issue
Block a user