internal/workflow:xref 解析與 stalled 掃描核心邏輯(#7) #12

Merged
queena merged 3 commits from feat/issue7-stalled-xrefs into main 2026-09-10 10:35:35 +08:00
Showing only changes of commit 67cafcff59 - Show all commits
+27 -6
View File
@@ -96,6 +96,26 @@ func (s *apiSource) listAll(path string, params map[string]string, out any) erro
return json.Unmarshal([]byte(b.String()), out)
}
// CurrentUser 以 token 呼叫 /user 取實際帳號,與 gitea.py 的
// get_current_username() 同源(token 決定帳號,不接受環境變數覆寫,
// 失敗即報錯退出,不靜默退回預設值)。
func (s *apiSource) CurrentUser() (string, error) {
var user struct {
Username string `json:"username"`
Login string `json:"login"`
}
if err := s.getJSON("user", nil, &user); err != nil {
return "", err
}
if user.Username != "" {
return user.Username, nil
}
if user.Login != "" {
return user.Login, nil
}
return "", fmt.Errorf("無法從 Gitea API /user 取得目前帳號")
}
func (s *apiSource) MyOrganizations() ([]string, error) {
var orgs []struct {
Username string `json:"username"`
@@ -202,14 +222,15 @@ func main() {
token: token,
hc: &http.Client{Timeout: 30 * time.Second},
}
username := os.Getenv("USERNAME")
if username == "" {
username = "ceo"
username, err := src.CurrentUser()
if err != nil {
fmt.Fprintln(os.Stderr, "CurrentUser:", err)
os.Exit(1)
}
hours := 4.0
items, err := workflow.ScanStalled(src, username, hours, time.Now())
if err != nil {
fmt.Fprintln(os.Stderr, "ScanStalled:", err)
items, scanErr := workflow.ScanStalled(src, username, hours, time.Now())
if scanErr != nil {
fmt.Fprintln(os.Stderr, "ScanStalled:", scanErr)
os.Exit(1)
}
// json.Marshal* 會把 <、>、& 轉義成 \u003c 等(含自訂 MarshalJSON 的輸出),