name: OpenCode Automation on: pull_request: types: [opened, synchronize, reopened, ready_for_review] permissions: contents: write issues: write pull-requests: write concurrency: group: auto-${{ github.event.issue.number || github.event.pull_request.number }} cancel-in-progress: false jobs: automate: # 排除其他机器人触发,防止自我循环; # 但允许 takanashi-hoshino-agent 创建的 PR,这样 /oc 生成的测试 PR 也能被自动评审 if: | github.actor != 'github-actions[bot]' && github.actor != 'opencode-agent[bot]' runs-on: ubuntu-latest steps: - name: Fetch config from CF Worker id: cfg uses: MoeFurina/pull-oc-config@v1 with: url: https://bot-storage.interface.focalors.ltd/config - name: Generate bot token id: token uses: actions/create-github-app-token@v1 with: app-id: ${{ steps.cfg.outputs.app_id }} private-key: ${{ steps.cfg.outputs.app_private_key }} owner: ${{ github.repository_owner }} - name: Checkout uses: actions/checkout@v6 with: token: ${{ steps.token.outputs.token }} fetch-depth: 0 persist-credentials: true - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: 22 - name: Install opencode run: npm i -g opencode-ai@latest - name: Run automation env: GITHUB_TOKEN: ${{ steps.token.outputs.token }} MODEL: opencode/deepseek-v4-flash-free OPENCODE_API_KEY: ${{ steps.cfg.outputs.opencode_api_key }} ISSUE_PROMPT: ${{ steps.cfg.outputs.opencode_prompt }} PR_PROMPT: | ${{ steps.cfg.outputs.opencode_prompt }} ${{ steps.cfg.outputs.pr_review_prompt }} run: | mkdir -p scripts curl -fsSL "https://raw.githubusercontent.com/MoeFurina/pull-oc-config/v1/scripts/opencode-automation.mjs" \ -o scripts/opencode-automation.mjs node scripts/opencode-automation.mjs