1
0
mirror of https://shylinux.com/x/icebergs synced 2025-05-01 19:19:24 +08:00
This commit is contained in:
harveyshao 2021-10-19 22:37:59 +08:00
parent 4f30191b4f
commit ecb66d16d3
8 changed files with 214 additions and 201 deletions

View File

@ -126,11 +126,9 @@ const (
const DAEMON = "daemon"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_DAEMON)},
},
Commands: map[string]*ice.Command{
}, Commands: map[string]*ice.Command{
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.PRUNES, DAEMON, "", mdb.HASH, mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
}},
@ -188,6 +186,5 @@ func init() {
m.Cmdy(SYSTEM, arg)
}
}},
},
})
}})
}

View File

@ -2,7 +2,6 @@ package cli
import (
"bytes"
"fmt"
"io"
"os"
"os/exec"
@ -26,7 +25,6 @@ func _system_show(m *ice.Message, cmd *exec.Cmd) {
if w, ok := m.Optionv(CMD_ERRPUT).(io.Writer); ok {
cmd.Stderr = w
}
} else {
out := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS))
err := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS))
@ -59,6 +57,9 @@ func SystemProcess(m *ice.Message, text string, arg ...string) {
m.ProcessField(SYSTEM, RUN)
m.Push(ARG, kit.Split(text))
}
func IsSuccess(m *ice.Message) bool {
return m.Append(CMD_CODE) == "0"
}
const (
CMD_DIR = "cmd_dir"
@ -75,9 +76,15 @@ const (
)
const (
GOARCH = "goarch"
GOOS = "goos"
LINUX = "linux"
DARWIN = "darwin"
WINDOWS = "windows"
AMD64 = "amd64"
I386 = "i386"
ARM = "arm"
SOURCE = "source"
TARGET = "target"
@ -88,11 +95,9 @@ const (
const SYSTEM = "system"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
}, Commands: map[string]*ice.Command{
SYSTEM: {Name: "system cmd run:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg), "time,id,cmd")
@ -117,7 +122,7 @@ func init() {
// 环境变量
env := kit.Simple(m.Optionv(CMD_ENV))
for i := 0; i < len(env)-1; i += 2 {
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env[i], env[i+1]))
cmd.Env = append(cmd.Env, kit.Format("%s=%s", env[i], env[i+1]))
}
if len(cmd.Env) > 0 {
m.Log_EXPORT(kit.MDB_META, SYSTEM, CMD_ENV, cmd.Env)
@ -130,6 +135,5 @@ func init() {
_system_show(m, cmd)
}
}},
},
})
}})
}

View File

@ -144,6 +144,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
const HASH = "hash"
func HashAction(fields ...string) map[string]*ice.Action {
_key := func(m *ice.Message) string { return kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT)) }
return ice.SelectAction(map[string]*ice.Action{
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg)
@ -152,16 +153,16 @@ func HashAction(fields ...string) map[string]*ice.Action {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg)
}},
REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))), arg)
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg)
}},
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))), arg)
m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg)
}},
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(EXPORT, m.PrefixKey(), "", HASH)
m.Cmdy(EXPORT, m.PrefixKey(), "", HASH, arg)
}},
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(IMPORT, m.PrefixKey(), "", HASH)
m.Cmdy(IMPORT, m.PrefixKey(), "", HASH, arg)
}},
PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
list := []string{}
@ -170,7 +171,7 @@ func HashAction(fields ...string) map[string]*ice.Action {
list = append(list, key)
}
})
m.OptionFields(m.Conf(m.PrefixKey(), kit.META_FIELD))
m.OptionFields(m.Config(kit.MDB_FIELD))
for _, v := range list {
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, kit.MDB_HASH, v)
}

View File

@ -129,32 +129,9 @@ func _zone_import(m *ice.Message, prefix, chain, file string) {
const ZONE_FIELD = "time,zone,count"
func ZoneAction(fields ...string) map[string]*ice.Action {
_zone := func(m *ice.Message) string {
return kit.Select(kit.MDB_ZONE, m.Conf(m.PrefixKey(), kit.Keym(kit.MDB_SHORT)))
}
_zone := func(m *ice.Message) string { return kit.Select(kit.MDB_ZONE, m.Config(kit.MDB_SHORT)) }
return ice.SelectAction(map[string]*ice.Action{
CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg)
}},
INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1])
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:])
}},
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg)
}},
REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_zone(m)))
}},
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(_zone(m), m.Conf(m.PrefixKey(), kit.META_FIELD))
m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE)
m.Conf(m.PrefixKey(), kit.MDB_HASH, "")
}},
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(_zone(m))
m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE)
}},
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case _zone(m):
@ -163,5 +140,33 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg)
}
}},
CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg)
}},
REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_zone(m)), arg)
}},
INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1])
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:])
}},
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg)
}},
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(_zone(m), m.Config(kit.MDB_FIELD))
m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE)
m.Conf(m.PrefixKey(), kit.MDB_HASH, "")
}},
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(_zone(m))
m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE)
}},
PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
PrevPage(m, arg[0], arg[1:]...)
}},
NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
NextPageLimit(m, arg[0], arg[1:]...)
}},
}, fields...)
}

View File

@ -47,7 +47,7 @@ func init() {
m.Cmd(TAIL, mdb.CREATE, kit.MDB_FILE, kit.Format(value[kit.MDB_FILE]), kit.MDB_NAME, kit.Format(value[kit.MDB_NAME]))
})
}},
TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: map[string]*ice.Action{
TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: ice.MergeAction(map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case FILE:
@ -55,21 +55,17 @@ func init() {
m.ProcessAgain()
case kit.MDB_NAME:
m.Push(arg[0], kit.Split(m.Option(FILE), "/"))
case "limit":
m.Push("limit", 10)
m.Push("limit", 20)
m.Push("limit", 30)
m.Push("limit", 50)
}
}},
mdb.CREATE: {Name: "create file name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
_tail_create(m, arg...)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, TAIL, "", mdb.HASH, m.OptionSimple(kit.MDB_NAME))
}},
mdb.PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
mdb.PrevPage(m, arg[0], arg[1:]...)
}},
mdb.NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
mdb.NextPageLimit(m, arg[0], arg[1:]...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(kit.Slice(arg, 0, 2)), "time,name,count,file", "time,id,file,text")
m.Option(mdb.CACHE_FILTER, kit.Select("", arg, 4))
m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3))

View File

@ -100,8 +100,10 @@ func _autogen_version(m *ice.Message) {
m.Cmdy(cli.SYSTEM, "go", "mod", "init", path.Base(kit.Path("")))
}
file := ice.SRC_VERSION_GO
m.Cmd(nfs.SAVE, file, kit.Format(`package main
m.Cmd(nfs.DEFS, ice.SRC_BINPACK_GO, kit.Format(`package main
`))
m.Cmd(nfs.SAVE, ice.SRC_VERSION_GO, kit.Format(`package main
import (
"shylinux.com/x/icebergs"
@ -124,10 +126,9 @@ func init() {
strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "describe", "--tags")),
ice.Info.HostName, ice.Info.UserName,
))
defer m.Cmdy(nfs.CAT, file)
m.Cmdy(nfs.DIR, file, "time,size,line,path")
m.Cmdy(nfs.DIR, ice.SRC_BINPACK_GO, "time,size,line,path")
m.Cmdy(nfs.DIR, ice.SRC_VERSION_GO, "time,size,line,path")
m.Cmdy(nfs.DIR, ice.SRC_MAIN_GO, "time,size,line,path")
}
func _autogen_miss(m *ice.Message) {

View File

@ -16,12 +16,15 @@ func init() {
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,name,cmd,api,arg,res",
)},
}, Commands: map[string]*ice.Command{
CASE: {Name: "case zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{
mdb.INSERT: {Name: "create zone name=hi cmd=POST,GET api arg:textarea res:textarea", Help: "添加"},
CASE: {Name: "case dev zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{
mdb.CREATE: {Name: "create name address", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.SPIDE, mdb.CREATE, arg)
}},
mdb.INSERT: {Name: "insert zone name=hi cmd=POST,GET api arg:textarea res:textarea", Help: "添加"},
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Option(web.SPIDE_HEADER, web.ContentType, web.ContentJSON)
m.Echo(kit.Formats(kit.UnMarshal(m.Cmdx(web.SPIDE, ice.DEV, web.SPIDE_RAW,
m.Echo(kit.Formats(kit.UnMarshal(m.Cmdx(web.SPIDE, m.Option(ice.DEV), web.SPIDE_RAW,
m.Option(cli.CMD), m.Option(cli.API), web.SPIDE_DATA, m.Option(cli.ARG)))))
m.Info(`curl "` + m.Option(cli.API) + `" -H "Content-Type: application/json"` + ` -d '` + m.Option(cli.ARG) + `'`)
m.ProcessDisplay("/plugin/local/wiki/json.js")
@ -58,9 +61,17 @@ func init() {
m.Echo(ice.OK)
}},
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg), "time,zone,count", m.Conf(m.PrefixKey(), kit.META_FIELD))
if m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
if len(arg) == 0 {
m.Action(mdb.CREATE)
m.Cmdy(web.SPIDE)
m.RenameAppend("client.name", "dev")
m.RenameAppend("client.url", "address")
return
}
m.Fields(len(arg)-1, "time,zone,count", m.Config(kit.MDB_FIELD))
if m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, arg[1:]); len(arg) == 1 {
m.Action(mdb.INSERT, mdb.EXPORT, mdb.IMPORT)
m.PushAction(mdb.INSERT, cli.CHECK, mdb.REMOVE)
} else {
m.Action(mdb.INSERT, cli.CHECK)

View File

@ -3,72 +3,70 @@ package code
import (
"os"
"path"
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits"
)
const COMPILE = "compile"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data(
kit.MDB_PATH, ice.USR_PUBLISH, cli.ENV, kit.Dict(
"CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"),
nfs.PATH, ice.USR_PUBLISH, cli.ENV, kit.Dict(
"GOPRIVATE", "shylinux.com,github.com", "GOPROXY", "https://goproxy.cn,direct",
cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH),
"GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com",
), GO, []interface{}{GO, cli.BUILD},
"GOCACHE", os.Getenv("GOCACHE"), "CGO_ENABLED", "0",
), GO, kit.List(GO, cli.BUILD),
)},
},
Commands: map[string]*ice.Command{
}, Commands: map[string]*ice.Command{
COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key run:button", Help: "编译", Action: map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DIR, "src", "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`})
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`})
m.Sort(kit.MDB_PATH)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
m.Cmdy(nfs.DIR, m.Conf(COMPILE, kit.META_PATH), "time,size,path")
m.Cmdy(nfs.DIR, m.Config(nfs.PATH), "time,size,path")
return
}
// 交叉编译
main := ice.SRC_MAIN_GO
goos := m.Conf(cli.RUNTIME, "host.GOOS")
arch := m.Conf(cli.RUNTIME, "host.GOARCH")
goos := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOOS))
arch := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOARCH))
for _, k := range arg {
switch k {
case cli.LINUX, cli.DARWIN, cli.WINDOWS:
goos = k
case "amd64", "386", "arm":
case cli.AMD64, cli.I386, cli.ARM:
arch = k
default:
if kit.Ext(k) == GO {
main = k
}
}
}
file := path.Join(kit.Select("", m.Config(nfs.PATH), m.Option(cli.CMD_DIR) == ""),
kit.Keys(kit.Select(ice.ICE, kit.TrimExt(main, ".go"), main != ice.SRC_MAIN_GO), goos, arch))
// 执行编译
_autogen_version(m.Spawn())
// 编译目标
file := path.Join(kit.Select("", m.Conf(COMPILE, kit.META_PATH), m.Option(cli.CMD_DIR) == ""),
kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != ice.SRC_MAIN_GO), goos, arch))
// 编译参数
m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), "GOARCH", arch, "GOOS", goos))
if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)),
"-o", file, main, ice.SRC_VERSION_GO, ice.SRC_BINPACK_GO); msg.Append(cli.CMD_CODE) != "0" {
m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), cli.GOOS, goos, cli.GOARCH, arch))
if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)), "-o", file, main, ice.SRC_VERSION_GO, ice.SRC_BINPACK_GO); !cli.IsSuccess(msg) {
m.Copy(msg)
return
}
// 编译成功
m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file)
m.Cmdy(nfs.DIR, file)
m.EchoDownload(file)
m.Cmdy(nfs.DIR, file, "time,path,size,link,action")
m.Cmdy(PUBLISH, ice.CONTEXTS, "base")
m.StatusTimeCount()
}},
},
})
}})
}