mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-20 08:58:03 +00:00
refactor(toolchain)!: 工具链 plugindev 更名为 hmapdev,module path 改回 gitcode
- 目录 tools/plugindev → tools/hmapdev,可执行文件名/平台产物名同步
(hmapdev_linux_amd64 等;包格式仍叫 .hmap)
- module path github.com/JianFeeeee/homeagent-sdk/tools/... → gitcode.com/...
(与仓库实际托管一致;核心仓不依赖该 path,改动无外部影响)
- SDK 存储目录 ~/.homeagent/plugindev/sdk → ~/.homeagent/hmapdev/sdk
新目录不存在而旧目录存在时沿用旧目录 → 已装 SDK 版本不会丢失
- 命令表/usage/--help/生成项目 README/示例 README/NSIS 安装器/
package/build.sh/build-examples.sh 全部同步;PLUGINDEV 环境变量保留兼容
- sdk/ 目录零改动(公开接口不变)
验证:
- go build ./... ok;go test ./tools/hmapdev/ ok(含模板接线守卫 TestProcTemplate_CoversAllCoreMethods)
- bash -n package/{build,build-examples}.sh ok
- 端到端:hmapdev init demo && hmapdev build → dist/demo_bundle.hmap(linux+darwin)
- 本机安装 /usr/local/bin/hmapdev,旧名以软链保留;sdk list/current 正常
This commit is contained in:
@ -441,8 +441,8 @@ func ensureSDKResolvable(plg *PlgConfig, sdkModule, sdkPath string) {
|
||||
fmt.Printf(" %s\n", strings.TrimSpace(string(out)))
|
||||
}
|
||||
fmt.Printf(" 提示:%s 不在公共 proxy 上。用以下任一方式指向本机 SDK:\n", sdkModule)
|
||||
fmt.Printf(" plugindev sdk install latest # 装一份到 ~/.homeagent/plugindev/sdk\n")
|
||||
fmt.Printf(" plugindev build --sdk-path <路径> # 或直接指定源码目录\n")
|
||||
fmt.Printf(" hmapdev sdk install latest # 装一份到 ~/.homeagent/hmapdev/sdk\n")
|
||||
fmt.Printf(" hmapdev build --sdk-path <路径> # 或直接指定源码目录\n")
|
||||
}
|
||||
}
|
||||
|
||||
@ -457,17 +457,12 @@ func findLocalSDK(sdkPath string) string {
|
||||
candidates = append(candidates, abs)
|
||||
}
|
||||
}
|
||||
// plugindev 自身所在位置往上三级(tools/plugindev/plugindev → SDK 根)
|
||||
// hmapdev 自身所在位置往上三级(tools/hmapdev/hmapdev → SDK 根)
|
||||
if self, err := os.Executable(); err == nil {
|
||||
candidates = append(candidates, filepath.Dir(filepath.Dir(filepath.Dir(self))))
|
||||
}
|
||||
// plugindev sdk use 选定的版本
|
||||
store := os.Getenv("HOMEAGENT_SDK_DIR")
|
||||
if store == "" {
|
||||
if home, err := os.UserHomeDir(); err == nil {
|
||||
store = filepath.Join(home, ".homeagent", "plugindev", "sdk")
|
||||
}
|
||||
}
|
||||
// hmapdev sdk use 选定的版本(复用 sdkStore(),含改名前的旧目录回退)
|
||||
store := sdkStore()
|
||||
if store != "" {
|
||||
if d, err := os.ReadFile(filepath.Join(store, "current")); err == nil {
|
||||
if ver := strings.TrimSpace(string(d)); ver != "" {
|
||||
@ -511,7 +506,7 @@ func resolveSDKPath(sdkPath string) string {
|
||||
fmt.Printf("error: --sdk-path %q not a valid SDK\n", sdkPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
// Detect from plugindev's own location (internal dev)
|
||||
// Detect from hmapdev's own location (internal dev)
|
||||
self, err := os.Executable()
|
||||
if err == nil {
|
||||
cand := filepath.Dir(filepath.Dir(filepath.Dir(self)))
|
||||
@ -519,14 +514,8 @@ func resolveSDKPath(sdkPath string) string {
|
||||
return cand
|
||||
}
|
||||
}
|
||||
// Active SDK via plugindev sdk use
|
||||
store := os.Getenv("HOMEAGENT_SDK_DIR")
|
||||
if store == "" {
|
||||
home, _ := os.UserHomeDir()
|
||||
if home != "" {
|
||||
store = filepath.Join(home, ".homeagent", "plugindev", "sdk")
|
||||
}
|
||||
}
|
||||
// Active SDK via hmapdev sdk use
|
||||
store := sdkStore()
|
||||
if store != "" {
|
||||
if d, err := os.ReadFile(filepath.Join(store, "current")); err == nil {
|
||||
ver := strings.TrimSpace(string(d))
|
||||
@ -538,7 +527,7 @@ func resolveSDKPath(sdkPath string) string {
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Printf("error: cannot locate SDK. Use --sdk-path or 'plugindev sdk use'\n")
|
||||
fmt.Printf("error: cannot locate SDK. Use --sdk-path or 'hmapdev sdk use'\n")
|
||||
os.Exit(1)
|
||||
return ""
|
||||
}
|
||||
@ -7,12 +7,12 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/JianFeeeee/homeagent-sdk/tools/plugindev/yaegi"
|
||||
"gitcode.com/JianFeeeee/homeagent-sdk/tools/hmapdev/yaegi"
|
||||
)
|
||||
|
||||
// tmplLuaDebug is the temporary Lua debug script template
|
||||
const tmplLuaDebug = `-- HomeAgent Lua Plugin Debug
|
||||
-- Generated by plugindev debug --lua
|
||||
-- Generated by hmapdev debug --lua
|
||||
sdk = require("sdk")
|
||||
local ok, plugin = pcall(dofile, "main.lua")
|
||||
if not ok then
|
||||
@ -115,7 +115,7 @@ func debugLua(dir, sdkPath, luaPath string) {
|
||||
luaBin, err := exec.LookPath("lua")
|
||||
if err != nil {
|
||||
fmt.Println("error: lua interpreter not found in PATH")
|
||||
fmt.Println(" install Lua 5.1+ or use plugindev build to compile your plugin")
|
||||
fmt.Println(" install Lua 5.1+ or use hmapdev build to compile your plugin")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ type TemplateData struct {
|
||||
// SDKLocalPath 是本机 SDK 源码绝对路径,写入生成的 go.mod 作为 replace 目标。
|
||||
//
|
||||
// 为何必须写:gitcode 的模块不在 proxy.golang.org 上,只 require 一个
|
||||
// 版本号的 go.mod 配上缺失的 go.sum,新用户第一次 `plugindev build`
|
||||
// 版本号的 go.mod 配上缺失的 go.sum,新用户第一次 `hmapdev build`
|
||||
// 必定死在 "missing go.sum entry",而 `go mod tidy` 又会去公共 proxy 拉
|
||||
// 一个不存在的条目。有了本地 replace,go 完全不需要 go.sum 条目。
|
||||
SDKLocalPath string
|
||||
@ -71,7 +71,7 @@ type TemplateData struct {
|
||||
|
||||
func cmdInit(args []string) {
|
||||
if len(args) < 1 {
|
||||
fmt.Println("Usage: plugindev init <name> [--lua] [--type remotedevice]")
|
||||
fmt.Println("Usage: hmapdev init <name> [--lua] [--type remotedevice]")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
@ -192,7 +192,7 @@ func cmdInit(args []string) {
|
||||
if isLua {
|
||||
fmt.Printf(" cd %s && lua main.lua (standalone test)\n", dir)
|
||||
}
|
||||
fmt.Printf(" cd %s && plugindev build\n", dir)
|
||||
fmt.Printf(" cd %s && hmapdev build\n", dir)
|
||||
}
|
||||
|
||||
// detectSDKInfo reads the HomeAgent SDK's go.mod and meta to get module path, go version, and SDK version.
|
||||
@ -14,7 +14,12 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const sdkDirName = "plugindev/sdk"
|
||||
const sdkDirName = "hmapdev/sdk"
|
||||
|
||||
// legacySDKDirName 是改名前的存储目录。工具链在 1.2.0 从 plugindev 改名 hmapdev;
|
||||
// 已装过旧版的机器上 SDK 仍在旧路径,直接换名会让它找不到已装 SDK
|
||||
// (表现为「没有活动版本」)。新目录不存在而旧目录存在时沿用旧目录。
|
||||
const legacySDKDirName = "plugindev/sdk"
|
||||
|
||||
// sdkStore returns the root directory for stored SDK versions.
|
||||
func sdkStore() string {
|
||||
@ -26,7 +31,15 @@ func sdkStore() string {
|
||||
fmt.Printf("error: cannot determine home directory: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return filepath.Join(home, ".homeagent", sdkDirName)
|
||||
dir := filepath.Join(home, ".homeagent", sdkDirName)
|
||||
if _, err := os.Stat(dir); err != nil {
|
||||
if legacy := filepath.Join(home, ".homeagent", legacySDKDirName); legacy != "" {
|
||||
if _, err := os.Stat(legacy); err == nil {
|
||||
return legacy
|
||||
}
|
||||
}
|
||||
}
|
||||
return dir
|
||||
}
|
||||
|
||||
func sdkCurrentDir() string {
|
||||
@ -50,13 +63,13 @@ func cmdSDK(args []string) {
|
||||
cmdSDKList()
|
||||
case "install":
|
||||
if len(args) < 2 {
|
||||
fmt.Println("Usage: plugindev sdk install <version>")
|
||||
fmt.Println("Usage: hmapdev sdk install <version>")
|
||||
os.Exit(1)
|
||||
}
|
||||
cmdSDKInstall(args[1])
|
||||
case "use":
|
||||
if len(args) < 2 {
|
||||
fmt.Println("Usage: plugindev sdk use <version>")
|
||||
fmt.Println("Usage: hmapdev sdk use <version>")
|
||||
os.Exit(1)
|
||||
}
|
||||
cmdSDKUse(args[1])
|
||||
@ -72,7 +85,7 @@ func cmdSDK(args []string) {
|
||||
}
|
||||
|
||||
func sdkHelp() {
|
||||
fmt.Print(`Usage: plugindev sdk <command>
|
||||
fmt.Print(`Usage: hmapdev sdk <command>
|
||||
|
||||
Manage installed HomeAgent SDK versions.
|
||||
|
||||
@ -85,9 +98,9 @@ Commands:
|
||||
latest Show the latest available version from remote
|
||||
|
||||
Examples:
|
||||
plugindev sdk install v0.7.1
|
||||
plugindev sdk install latest
|
||||
plugindev sdk use v0.7.1
|
||||
hmapdev sdk install v0.7.1
|
||||
hmapdev sdk install latest
|
||||
hmapdev sdk use v0.7.1
|
||||
`)
|
||||
}
|
||||
|
||||
@ -127,7 +140,7 @@ func cmdSDKList() {
|
||||
fmt.Printf(" %s %s\n", mark, v)
|
||||
}
|
||||
if current == "" {
|
||||
fmt.Println("\nNo version active. Use 'plugindev sdk use <version>' to set one.")
|
||||
fmt.Println("\nNo version active. Use 'hmapdev sdk use <version>' to set one.")
|
||||
}
|
||||
}
|
||||
|
||||
@ -292,7 +305,7 @@ func cmdSDKUse(version string) {
|
||||
verDir := sdkVersionDir(version)
|
||||
if _, err := os.Stat(verDir); os.IsNotExist(err) {
|
||||
fmt.Printf("SDK version %s is not installed.\n", version)
|
||||
fmt.Printf("Install it first: plugindev sdk install %s\n", version)
|
||||
fmt.Printf("Install it first: hmapdev sdk install %s\n", version)
|
||||
os.Exit(1)
|
||||
}
|
||||
setCurrentVersion(store, version)
|
||||
@ -305,7 +318,7 @@ func cmdSDKPath() {
|
||||
current := resolveCurrentVersion(store)
|
||||
if current == "" {
|
||||
fmt.Println("No active SDK version set.")
|
||||
fmt.Println("Use 'plugindev sdk use <version>' to set one.")
|
||||
fmt.Println("Use 'hmapdev sdk use <version>' to set one.")
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println(sdkVersionDir(current))
|
||||
@ -440,21 +453,21 @@ func parseSemver(tag string) [3]int {
|
||||
}
|
||||
|
||||
// activeSDKRoot returns the path to the active SDK root.
|
||||
// It replaces the old runtime.Caller(0) approach so plugindev can work
|
||||
// It replaces the old runtime.Caller(0) approach so hmapdev can work
|
||||
// independently of its own build location.
|
||||
func activeSDKRoot() string {
|
||||
store := sdkStore()
|
||||
current := resolveCurrentVersion(store)
|
||||
if current == "" {
|
||||
fmt.Printf("error: no active SDK version set\n")
|
||||
fmt.Printf(" Install one: plugindev sdk install latest\n")
|
||||
fmt.Printf(" Or set one: plugindev sdk use <version>\n")
|
||||
fmt.Printf(" Install one: hmapdev sdk install latest\n")
|
||||
fmt.Printf(" Or set one: hmapdev sdk use <version>\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
root := sdkVersionDir(current)
|
||||
if _, err := os.Stat(root); os.IsNotExist(err) {
|
||||
fmt.Printf("error: active SDK version %s not found at %s\n", current, root)
|
||||
fmt.Printf(" Reinstall: plugindev sdk install %s\n", current)
|
||||
fmt.Printf(" Reinstall: hmapdev sdk install %s\n", current)
|
||||
os.Exit(1)
|
||||
}
|
||||
return root
|
||||
@ -1,4 +1,4 @@
|
||||
module github.com/JianFeeeee/homeagent-sdk/tools/plugindev
|
||||
module gitcode.com/JianFeeeee/homeagent-sdk/tools/hmapdev
|
||||
|
||||
go 1.21.0
|
||||
|
||||
@ -30,14 +30,14 @@ func help() {
|
||||
fmt.Print(`HomeAgent Plugin Dev Tool
|
||||
|
||||
Usage:
|
||||
plugindev init <name> Scaffold a new plugin project
|
||||
plugindev init <name> --lua Create Lua plugin
|
||||
plugindev init <name> --type remotedevice
|
||||
hmapdev init <name> Scaffold a new plugin project
|
||||
hmapdev init <name> --lua Create Lua plugin
|
||||
hmapdev init <name> --type remotedevice
|
||||
Create C remote device adapter
|
||||
plugindev build [flags] Compile and package plugin
|
||||
plugindev clean Clean build/dist artifacts
|
||||
plugindev debug [dir] Interpret and debug plugin source
|
||||
plugindev sdk <command> Manage SDK versions
|
||||
hmapdev build [flags] Compile and package plugin
|
||||
hmapdev clean Clean build/dist artifacts
|
||||
hmapdev debug [dir] Interpret and debug plugin source
|
||||
hmapdev sdk <command> Manage SDK versions
|
||||
|
||||
Flags:
|
||||
--outdir Output directory (default: dist)
|
||||
@ -56,7 +56,7 @@ const procGenFile = "z_proc_gen.go"
|
||||
// generateProcRuntime 把子进程运行时(平台无关主体 + 两个平台挂载实现)
|
||||
// 写入插件目录,返回清理函数。
|
||||
func generateProcRuntime() (func(), error) {
|
||||
// 清理历史 C ABI 产物:旧版 plugindev 生成过这两个文件,残留下来会与
|
||||
// 清理历史 C ABI 产物:旧版 hmapdev(原名 plugindev)生成过这两个文件,残留下来会与
|
||||
// 本模板的 main 冲突。无需人工清理就能从旧版升级。
|
||||
for _, stale := range []string{"z_bridge_gen.go", "z_entry.c"} {
|
||||
os.Remove(stale)
|
||||
@ -511,7 +511,7 @@ const tmplReadme = `# {{.Plg.Name}}
|
||||
## Build
|
||||
|
||||
` + "```bash" + `
|
||||
plugindev build
|
||||
hmapdev build
|
||||
` + "```" + `
|
||||
|
||||
## Install
|
||||
@ -13,7 +13,7 @@ import (
|
||||
|
||||
"github.com/traefik/yaegi/interp"
|
||||
"github.com/traefik/yaegi/stdlib"
|
||||
"github.com/JianFeeeee/homeagent-sdk/tools/plugindev/yaegi/mocksdk"
|
||||
"gitcode.com/JianFeeeee/homeagent-sdk/tools/hmapdev/yaegi/mocksdk"
|
||||
)
|
||||
|
||||
type YaegiDebugger struct {
|
||||
Reference in New Issue
Block a user