調整 OpenCode 與 Gitea action 設定 #3

Merged
admin merged 2 commits from develop into master 2026-06-25 10:30:15 +00:00
5 changed files with 13 additions and 45 deletions
Showing only changes of commit 8315e1da2a - Show all commits
+8 -38
View File
@@ -2,34 +2,6 @@ name: 'AI Code Review'
description: 'AI Code Review' description: 'AI Code Review'
author: 'Jeffery' author: 'Jeffery'
inputs: inputs:
# Gitea context
gitea_token:
description: 'Gitea API Token'
required: true
gitea_comment_token:
description: 'Gitea API Token for posting comments only'
required: false
gitea_server_url:
description: 'Gitea Server URL'
required: false
gitea_repository:
description: 'Gitea Repository (owner/repo)'
required: false
gitea_skip_tls_verify:
description: '跳過 Gitea SSL/TLS 憑證驗證(自簽憑證時使用)'
required: false
default: 'false'
pr_number:
description: 'Pull Request Number'
required: false
pr_head_sha:
description: 'PR head commit SHA'
required: false
pr_head_branch:
description: 'PR 來源分支'
required: false
# OpenCode Server
opencode_base_url: opencode_base_url:
description: 'OpenCode server Base URL' description: 'OpenCode server Base URL'
required: false required: false
@@ -43,16 +15,14 @@ runs:
using: 'docker' using: 'docker'
image: 'Dockerfile' image: 'Dockerfile'
env: env:
# Gitea context(改為只從 inputs 取得) GITEA_SERVER_URL: ${{ gitea.server_url }}
GITEA_TOKEN: ${{ inputs.gitea_token }} GITEA_REPOSITORY: ${{ gitea.repository }}
GITEA_COMMENT_TOKEN: ${{ inputs.gitea_comment_token }} GITEA_TOKEN: ${{ gitea.token }}
GITEA_SERVER_URL: ${{ inputs.gitea_server_url || gitea.server_url }} GITEA_COMMENT_TOKEN: ${{ gitea.token }}
GITEA_REPOSITORY: ${{ inputs.gitea_repository || gitea.repository }} PR_NUMBER: ${{ gitea.event.pull_request.number }}
GITEA_SKIP_TLS_VERIFY: ${{ inputs.gitea_skip_tls_verify }} PR_HEAD_SHA: ${{ gitea.event.pull_request.head.sha }}
PR_NUMBER: ${{ inputs.pr_number || gitea.event.pull_request.number }} PR_HEAD_BRANCH: ${{ gitea.event.pull_request.head.ref }}
PR_HEAD_SHA: ${{ inputs.pr_head_sha || gitea.event.pull_request.head.sha }} PR_BASE_BRANCH: ${{ gitea.event.pull_request.base.ref }}
PR_HEAD_BRANCH: ${{ inputs.pr_head_branch || gitea.event.pull_request.head.ref }}
# LLM
OPENCODE_BASE_URL: ${{ inputs.opencode_base_url }} OPENCODE_BASE_URL: ${{ inputs.opencode_base_url }}
OPENCODE_MODEL: ${{ inputs.opencode_model }} OPENCODE_MODEL: ${{ inputs.opencode_model }}
OPENCODE_PROVIDER: ${{ inputs.opencode_provider }} OPENCODE_PROVIDER: ${{ inputs.opencode_provider }}
-1
View File
@@ -4,7 +4,6 @@ export const GITEA_TOKEN = process.env.GITEA_TOKEN || '';
export const GITEA_COMMENT_TOKEN = process.env.GITEA_COMMENT_TOKEN || ''; export const GITEA_COMMENT_TOKEN = process.env.GITEA_COMMENT_TOKEN || '';
export const GITEA_SERVER_URL = process.env.GITEA_SERVER_URL || 'https://gitea.com'; export const GITEA_SERVER_URL = process.env.GITEA_SERVER_URL || 'https://gitea.com';
export const GITEA_REPOSITORY = process.env.GITEA_REPOSITORY || ''; export const GITEA_REPOSITORY = process.env.GITEA_REPOSITORY || '';
export const GITEA_SKIP_TLS_VERIFY = process.env.GITEA_SKIP_TLS_VERIFY === 'true';
export const PR_NUMBER = process.env.PR_NUMBER || ''; export const PR_NUMBER = process.env.PR_NUMBER || '';
export const PR_HEAD_SHA = process.env.PR_HEAD_SHA || ''; export const PR_HEAD_SHA = process.env.PR_HEAD_SHA || '';
export const PR_HEAD_BRANCH = process.env.PR_HEAD_BRANCH || ''; export const PR_HEAD_BRANCH = process.env.PR_HEAD_BRANCH || '';
+2 -2
View File
@@ -1,9 +1,9 @@
import axios from 'axios'; import axios from 'axios';
import https from 'https'; import https from 'https';
import { GITEA_TOKEN, GITEA_COMMENT_TOKEN, GITEA_SERVER_URL, GITEA_REPOSITORY, GITEA_SKIP_TLS_VERIFY, PR_NUMBER, PR_HEAD_SHA, PR_HEAD_BRANCH } from './config.js'; import { GITEA_TOKEN, GITEA_COMMENT_TOKEN, GITEA_SERVER_URL, GITEA_REPOSITORY, PR_NUMBER, PR_HEAD_SHA, PR_HEAD_BRANCH } from './config.js';
import { line, warn } from './log.js'; import { line, warn } from './log.js';
const httpsAgent = GITEA_SKIP_TLS_VERIFY ? new https.Agent({ rejectUnauthorized: false }) : undefined; const httpsAgent = new https.Agent({ rejectUnauthorized: false });
const headers = (token = GITEA_TOKEN) => ({ Authorization: `token ${token}`, 'Content-Type': 'application/json' }); const headers = (token = GITEA_TOKEN) => ({ Authorization: `token ${token}`, 'Content-Type': 'application/json' });
const api = (path) => `${GITEA_SERVER_URL.replace(/\/$/, '')}/api/v1${path}`; const api = (path) => `${GITEA_SERVER_URL.replace(/\/$/, '')}/api/v1${path}`;
+2 -2
View File
@@ -37,14 +37,14 @@ describe('gitea', () => {
assert.ok(capturedOpts.headers['Authorization'].startsWith('token ')); assert.ok(capturedOpts.headers['Authorization'].startsWith('token '));
}); });
it('does not set httpsAgent by default (GITEA_SKIP_TLS_VERIFY not true)', async () => { it('sets an insecure httpsAgent by default', async () => {
let capturedOpts; let capturedOpts;
mock.method(axios, 'get', async (_url, opts) => { mock.method(axios, 'get', async (_url, opts) => {
capturedOpts = opts; capturedOpts = opts;
return { data: '' }; return { data: '' };
}); });
await getPRDiff(); await getPRDiff();
assert.equal(capturedOpts.httpsAgent, undefined); assert.equal(capturedOpts.httpsAgent.options.rejectUnauthorized, false);
}); });
it('getPRDiff propagates axios errors', async () => { it('getPRDiff propagates axios errors', async () => {
+1 -2
View File
@@ -5,7 +5,6 @@ import {
GITEA_COMMENT_TOKEN, GITEA_COMMENT_TOKEN,
GITEA_SERVER_URL, GITEA_SERVER_URL,
GITEA_REPOSITORY, GITEA_REPOSITORY,
GITEA_SKIP_TLS_VERIFY,
PR_NUMBER, PR_NUMBER,
getOpenCodeHttpsAgent, getOpenCodeHttpsAgent,
getLLMConfig, getLLMConfig,
@@ -13,7 +12,7 @@ import {
import { verifyRemoteAccess } from './git.js'; import { verifyRemoteAccess } from './git.js';
import { step, line, ok, error, result } from './log.js'; import { step, line, ok, error, result } from './log.js';
const httpsAgent = GITEA_SKIP_TLS_VERIFY ? new https.Agent({ rejectUnauthorized: false }) : undefined; const httpsAgent = new https.Agent({ rejectUnauthorized: false });
const api = (path) => `${GITEA_SERVER_URL.replace(/\/$/, '')}/api/v1${path}`; const api = (path) => `${GITEA_SERVER_URL.replace(/\/$/, '')}/api/v1${path}`;
const giteaHeaders = (token) => ({ Authorization: `token ${token}`, 'Content-Type': 'application/json' }); const giteaHeaders = (token) => ({ Authorization: `token ${token}`, 'Content-Type': 'application/json' });
const opencodeModelConfig = (model) => { const opencodeModelConfig = (model) => {