mirror of
https://github.com/larksuite/cli.git
synced 2026-07-06 16:18:05 +08:00
* ci: consolidate 6 workflows into layered CI pyramid with results gate Merge tests.yml, lint.yml, coverage.yml, cli-e2e.yml, gitleaks.yml, and license-header.yml into a single ci.yml with fail-fast layering: - L1 fast-gate: build, vet, gofmt, go mod tidy - L2 quality: unit-test, lint, coverage (40% threshold + Codecov), deadcode (incremental) - L3 e2e: dry-run (no secrets) + live (with secrets, fork-skip) - L4 security: gitleaks, govulncheck, go-licenses, license-header Results gate aggregates all jobs as the single required check for branch protection. Also adds: - arch-audit.yml: weekly cron for dead code, complexity, deps, E2E gaps - .golangci.yml: depguard shortcuts-no-raw-http, forbidigo fmt.Print/log.Fatal - AGENTS.md: E2E testing conventions, updated pre-PR checks Change-Id: I2e21067a9e9e12d366d1b1a092227e9f7d60fe41
96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
||
// SPDX-License-Identifier: MIT
|
||
|
||
package config
|
||
|
||
import (
|
||
"github.com/charmbracelet/huh"
|
||
|
||
"github.com/larksuite/cli/internal/cmdutil"
|
||
)
|
||
|
||
type initMsg struct {
|
||
SelectAction string
|
||
CreateNewApp string
|
||
ConfigExistingApp string
|
||
Platform string
|
||
SelectPlatform string
|
||
Feishu string
|
||
// TTY (interactive) variants
|
||
ScanQRCode string // header shown above QR code
|
||
ScanOrOpenLink string // post-QR alt link prompt ("or open...")
|
||
WaitingForScan string // active polling indicator
|
||
// Non-TTY (AI / non-interactive) variants — preserve original copy
|
||
OpenLinkNonTTY string // primary link prompt
|
||
WaitingForScanNonTTY string // passive waiting indicator
|
||
DetectedLarkTenant string
|
||
AppCreated string
|
||
ConfigSaved string
|
||
}
|
||
|
||
var initMsgZh = &initMsg{
|
||
SelectAction: "选择操作",
|
||
CreateNewApp: "一键配置应用 (推荐) ",
|
||
ConfigExistingApp: "手动输入应用凭证",
|
||
Platform: "平台",
|
||
SelectPlatform: "选择平台",
|
||
Feishu: "飞书",
|
||
ScanQRCode: "\n使用飞书 / Lark 扫码配置应用:\n\n",
|
||
ScanOrOpenLink: "\n或打开以下链接完成配置:\n",
|
||
WaitingForScan: "正在获取你的应用配置结果...",
|
||
OpenLinkNonTTY: "\n打开以下链接配置应用:\n\n",
|
||
WaitingForScanNonTTY: "等待配置应用...",
|
||
DetectedLarkTenant: "[lark-cli] 检测到 Lark 租户,切换端点重试...",
|
||
AppCreated: "应用配置成功! App ID: %s",
|
||
ConfigSaved: "应用配置成功! App ID: %s",
|
||
}
|
||
|
||
var initMsgEn = &initMsg{
|
||
SelectAction: "Select action",
|
||
CreateNewApp: "Set up your app with one click (Recommended)",
|
||
ConfigExistingApp: "Enter app credentials yourself",
|
||
Platform: "Platform",
|
||
SelectPlatform: "Select platform",
|
||
Feishu: "Feishu",
|
||
ScanQRCode: "\nScan the QR code with Feishu/Lark:\n\n",
|
||
ScanOrOpenLink: "\nOr open the link below in your browser:\n",
|
||
WaitingForScan: "Fetching configuration results...",
|
||
OpenLinkNonTTY: "\nOpen the link below to configure app:\n\n",
|
||
WaitingForScanNonTTY: "Waiting for app configuration...",
|
||
DetectedLarkTenant: "[lark-cli] Detected Lark tenant, switching endpoint...",
|
||
AppCreated: "App configured! App ID: %s",
|
||
ConfigSaved: "App configured! App ID: %s",
|
||
}
|
||
|
||
func getInitMsg(lang string) *initMsg {
|
||
if lang == "en" {
|
||
return initMsgEn
|
||
}
|
||
return initMsgZh
|
||
}
|
||
|
||
// promptLangSelection shows an interactive language picker and returns the chosen lang code.
|
||
// savedLang is used as the pre-selected default (from existing config).
|
||
func promptLangSelection(savedLang string) (string, error) {
|
||
lang := savedLang
|
||
if lang != "en" {
|
||
lang = "zh"
|
||
}
|
||
form := huh.NewForm(
|
||
huh.NewGroup(
|
||
huh.NewSelect[string]().
|
||
Title("Language / 语言").
|
||
Options(
|
||
huh.NewOption("中文", "zh"),
|
||
huh.NewOption("English", "en"),
|
||
).
|
||
Value(&lang),
|
||
),
|
||
).WithTheme(cmdutil.ThemeFeishu())
|
||
|
||
if err := form.Run(); err != nil {
|
||
return "", err
|
||
}
|
||
return lang, nil
|
||
}
|