1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-06-04 10:45:18 +08:00
parent 3d0dd2c8cd
commit 7bead22151
13 changed files with 231 additions and 42 deletions

View File

@ -142,6 +142,7 @@ func _spide_body(m *ice.Message, method string, arg ...string) (io.Reader, map[s
data = append(data, url.QueryEscape(arg[i])+"="+url.QueryEscape(arg[i+1]))
}
body = bytes.NewBufferString(strings.Join(data, "&"))
m.Debug("what %v", strings.Join(data, "&"))
head[ContentType] = ContentFORM
case SPIDE_PART:

View File

@ -14,10 +14,13 @@ import (
kit "shylinux.com/x/toolkits"
)
func _install_path(m *ice.Message, link string) string {
return path.Join(ice.USR_INSTALL, kit.TrimExt(kit.Select(m.Option(mdb.LINK), link)))
}
func _install_download(m *ice.Message) {
link := m.Option(mdb.LINK)
name := path.Base(strings.Split(link, "?")[0])
file := path.Join(kit.Select(m.Config(nfs.PATH), m.Option(nfs.PATH)), name)
file := path.Join(kit.Select(ice.USR_INSTALL, m.Option(nfs.PATH)), name)
defer m.Cmdy(nfs.DIR, file)
if kit.FileExists(file) {
@ -32,13 +35,10 @@ func _install_download(m *ice.Message) {
// 下载进度
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
prev, value := 0, kit.GetMeta(value)
value = kit.GetMeta(value)
m.OptionCB(web.SPIDE, func(count int, total int, step int) {
if step >= prev {
value[mdb.COUNT], value[mdb.TOTAL], value[mdb.VALUE] = count, total, step
toast(name, count, total)
prev = step
}
})
})
@ -48,7 +48,7 @@ func _install_download(m *ice.Message) {
})
}
func _install_build(m *ice.Message, arg ...string) string {
p := m.Option(cli.CMD_DIR, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK))))
p := m.Option(cli.CMD_DIR, _install_path(m, ""))
pp := kit.Path(path.Join(p, "_install"))
// 推流
@ -77,7 +77,7 @@ func _install_build(m *ice.Message, arg ...string) string {
return ""
}
func _install_order(m *ice.Message, arg ...string) {
p := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)), m.Option(nfs.PATH)+ice.NL)
p := path.Join(_install_path(m, ""), m.Option(nfs.PATH)+ice.NL)
if !strings.Contains(m.Cmdx(nfs.CAT, ice.ETC_PATH), p) {
m.Cmd(nfs.PUSH, ice.ETC_PATH, p)
}
@ -85,7 +85,7 @@ func _install_order(m *ice.Message, arg ...string) {
}
func _install_spawn(m *ice.Message, arg ...string) {
if kit.Int(m.Option(tcp.PORT)) >= 10000 {
if p := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT)); kit.FileExists(p) {
if p := path.Join(ice.USR_LOCAL_DAEMON, m.Option(tcp.PORT)); kit.FileExists(p) {
m.Echo(p)
return
}
@ -93,8 +93,8 @@ func _install_spawn(m *ice.Message, arg ...string) {
m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT))
}
target := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT))
source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)))
target := path.Join(ice.USR_LOCAL_DAEMON, m.Option(tcp.PORT))
source := _install_path(m, "")
nfs.MkdirAll(m, target)
defer m.Echo(target)
@ -114,7 +114,17 @@ func _install_start(m *ice.Message, arg ...string) {
args = append(args, cb(p)...)
}
m.Cmdy(cli.DAEMON, arg[1:], args)
if m.Cmdy(cli.DAEMON, arg[1:], args); cli.IsSuccess(m) {
m.SetAppend()
}
}
func _install_stop(m *ice.Message, arg ...string) {
m.Cmd(cli.DAEMON).Tables(func(value map[string]string) {
if value[cli.PID] == m.Option(cli.PID) {
m.Cmd(cli.DAEMON, cli.STOP, kit.Dict(mdb.HASH, value[mdb.HASH]))
}
})
m.Cmd(cli.SYSTEM, cli.KILL, m.Option(cli.PID))
}
func _install_service(m *ice.Message, arg ...string) {
arg = kit.Split(path.Base(arg[0]), "-.")[:1]
@ -125,14 +135,7 @@ func _install_service(m *ice.Message, arg ...string) {
}
})
m.Set(tcp.PORT).Tables(func(value map[string]string) { m.Push(tcp.PORT, path.Base(value[nfs.DIR])) })
}
func _install_stop(m *ice.Message, arg ...string) {
m.Cmd(cli.DAEMON).Tables(func(value map[string]string) {
if value[cli.PID] == m.Option(cli.PID) {
m.Cmd(cli.DAEMON, cli.STOP, kit.Dict(mdb.HASH, value[mdb.HASH]))
}
})
m.Cmd(cli.SYSTEM, cli.KILL, m.Option(cli.PID))
m.StatusTimeCount()
}
const (
@ -151,7 +154,9 @@ func init() {
_install_download(m)
}},
nfs.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)), "_install"))
if m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, ""), "_install")); !kit.FileExists(m.Option(nfs.DIR_ROOT)) {
m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, "")))
}
defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT))
m.Cmdy(nfs.DIR, m.Option(nfs.PATH))
}},
@ -184,26 +189,13 @@ func init() {
_install_service(m, arg...)
default: // 目录列表
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), arg[1]))
m.Option(nfs.DIR_ROOT, path.Join(ice.USR_LOCAL_DAEMON, arg[1]))
m.Cmdy(nfs.CAT, kit.Select(nfs.PWD, arg, 2))
}
}},
}})
}
func InstallSoftware(m *ice.Message, bin string, list interface{}) (ok bool) {
if cli.SystemFind(m, bin) != "" {
return true
}
kit.Fetch(list, func(index int, value map[string]interface{}) {
if strings.Contains(m.Cmdx(cli.RUNTIME, kit.Keys(tcp.HOST, cli.OSID)), kit.Format(value[cli.OSID])) {
cli.PushStream(m)
m.Cmd(cli.SYSTEM, value[ice.CMD])
ok = true
}
})
return ok
}
func InstallAction(args ...interface{}) map[string]*ice.Action {
return ice.SelectAction(map[string]*ice.Action{ice.CTX_INIT: mdb.AutoConfig(args...),
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
@ -220,3 +212,16 @@ func InstallAction(args ...interface{}) map[string]*ice.Action {
}},
})
}
func InstallSoftware(m *ice.Message, bin string, list interface{}) (ok bool) {
if cli.SystemFind(m, bin) != "" {
return true
}
kit.Fetch(list, func(index int, value map[string]interface{}) {
if strings.Contains(m.Cmdx(cli.RUNTIME, kit.Keys(tcp.HOST, cli.OSID)), kit.Format(value[cli.OSID])) {
cli.PushStream(m)
m.Cmd(cli.SYSTEM, value[ice.CMD])
ok = true
}
})
return ok
}

View File

@ -2,7 +2,6 @@ package chrome
import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/nfs"
)
type chrome struct {
@ -13,7 +12,7 @@ type chrome struct {
}
func (c chrome) List(m *ice.Message, arg ...string) {
c.Code.Source(m, m.Config(nfs.SOURCE), arg...)
c.Code.Source(m, "", arg...)
}
func init() { ice.CodeCtxCmd(chrome{}) }

View File

@ -4,6 +4,7 @@ https://coder.com/
https://github.com/coder/code-server/
https://github.com/microsoft/vscode
https://code.visualstudio.com/
https://geek-docs.com/vscode/vscode-tutorials/what-is-vscode.html
`
spark shell `

View File

@ -6,6 +6,7 @@ import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/aaa"
"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"
@ -22,16 +23,24 @@ type server struct {
list string `name:"list port path auto start install" help:"编辑器"`
}
func (s server) Search(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH && arg[1] == "" {
s.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir"))).Tables(func(value map[string]string) {
m.PushSearch(mdb.TYPE, value[cli.STATUS], mdb.NAME, value[nfs.PATH], mdb.TEXT, value[mdb.LINK])
})
}
}
func (s server) Start(m *ice.Message, arg ...string) {
s.Code.Start(m, "", "./bin/code-server", func(p string) []string {
return []string{kit.Format("--config=%s", m.Cmdx(nfs.SAVE, kit.Path(p, "config"), kit.Format(`
s.Code.Start(m, "", "bin/code-server", func(p string) []string {
m.Cmd(nfs.SAVE, kit.Path(p, "config"), kit.Format(`
user-data-dir: %s
bind-addr: %s:%s
password: %s
`, "./data", kit.Select("0.0.0.0", m.Option(tcp.HOST)), path.Base(p), kit.Select(m.Config(aaa.PASSWORD), m.Option(aaa.PASSWORD))))), kit.Path(nfs.PWD)}
`, "./data", kit.Select("0.0.0.0", m.Option(tcp.HOST)), path.Base(p), kit.Select(m.Config(aaa.PASSWORD), m.Option(aaa.PASSWORD))))
return []string{"--config=config", kit.Path(nfs.PWD)}
})
}
func (s server) List(m *ice.Message, arg ...string) {
func (s server) List(m *ice.Message, arg ...string) *ice.Message {
if s.Code.List(m, "", arg...); len(arg) == 0 {
s.PushLink(m).Tables(func(value map[string]string) {
switch value[cli.STATUS] {
@ -42,6 +51,7 @@ func (s server) List(m *ice.Message, arg ...string) {
}
})
}
return m
}
func init() { ice.CodeCtxCmd(server{}) }

17
misc/java/maven.go Normal file
View File

@ -0,0 +1,17 @@
package java
import "shylinux.com/x/ice"
type maven struct {
ice.Code
linux string `data:"https://mirrors.tencent.com/macports/distfiles/maven3/apache-maven-3.8.5-bin.tar.gz"`
list string `name:"list path auto order install" help:"打包构建"`
}
func (s maven) Order(m *ice.Message) {
s.Code.Order(m, s.PathOther(m, s.Link(m, "")), ice.BIN)
}
func (s maven) List(m *ice.Message, arg ...string) {
s.Code.Source(m, s.PathOther(m, s.Link(m, "")), arg...)
}
func init() { ice.CodeCtxCmd(maven{}) }

36
misc/java/server.go Normal file
View File

@ -0,0 +1,36 @@
package java
import (
"strings"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
)
const (
JAVA = "java"
JAVAC = "javac"
)
type server struct {
ice.Code
regexp string `data:".*.java"`
linux string `data:"https://mirrors.tencent.com/repository/generic/konajdk/8/0/10/linux-x86_64/b1/TencentKona8.0.10.b1_jdk_linux-x86_64_8u332.tar.gz"`
list string `name:"list path auto listScript order install" help:"编译执行"`
}
func (s server) Order(m *ice.Message) {
s.Code.Order(m, s.PathOther(m, s.Link(m, "")), ice.BIN)
}
func (s server) List(m *ice.Message, arg ...string) {
s.Code.Source(m, s.PathOther(m, s.Link(m, "")), arg...)
}
func (s server) RunScript(m *ice.Message) {
if s.Code.System(m, nfs.PWD, JAVAC, "-d", ice.BIN, m.Option(nfs.PATH)); cli.IsSuccess(m.Message) {
s.Code.System(m, nfs.PWD, JAVA, "-cp", kit.Path(ice.BIN), strings.TrimPrefix(strings.TrimSuffix(m.Option(nfs.PATH), ".java"), "src/"))
}
}
func init() { ice.CodeCtxCmd(server{}) }

56
misc/java/spring.go Normal file
View File

@ -0,0 +1,56 @@
package java
import (
"path"
"strings"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits"
)
type spring struct {
ice.Code
linux string `data:"https://mirrors.tencent.com/macports/distfiles/spring-boot-cli/spring-boot-cli-2.7.0-bin.tar.gz"`
ice.Hash
short string `data:"name"`
field string `data:"time,name,text"`
create string `name:"create name text" help:"创建"`
start string `name:"start server.port" help:"启动"`
list string `name:"list name auto create order install" help:"服务框架"`
}
func (s spring) Order(m *ice.Message) {
s.Code.Order(m, s.PathOther(m, s.Link(m, "")), ice.BIN)
}
func (s spring) Create(m *ice.Message, arg ...string) {
s.Hash.Create(m, arg...)
}
func (s spring) Build(m *ice.Message) {
s.Code.Stream(m, path.Join(ice.USR, m.Option(mdb.NAME)), "mvn", "package")
}
func (s spring) Start(m *ice.Message, arg ...string) {
args := []string{}
for i := 0; i < len(arg)-1; i += 2 {
args = append(args, "-D"+arg[i]+"="+arg[i+1])
}
s.Code.Daemon(m, path.Join(ice.USR, m.Option(mdb.NAME)), kit.Simple("java", args, "-jar", kit.Format("target/%s-0.0.1-SNAPSHOT.jar", m.Option(mdb.NAME)))...)
}
func (s spring) List(m *ice.Message, arg ...string) {
if len(arg) == 0 { // 项目列表
s.Hash.List(m, arg...).PushAction(s.Start, s.Build)
} else { // 服务列表
m.Cmd(cli.DAEMON).Table(func(index int, value map[string]string, head []string) {
if strings.Contains(value[ice.CMD], "target/"+arg[0]+"-0.0.1-SNAPSHOT.jar") {
m.PushRecord(value, head...)
}
})
}
}
func init() { ice.CodeCtxCmd(spring{}) }

9
misc/java/spring.shy Normal file
View File

@ -0,0 +1,9 @@
section "spring"
refer `
官网 https://spring.io/projects/spring-boot
入门 https://spring.io/quickstart
向导 https://start.spring.io/
参数 https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
接口 https://spring.io/guides/gs/rest-service/
数据 https://spring.io/guides/gs/accessing-data-mysql/
`

14
misc/node/npm.go Normal file
View File

@ -0,0 +1,14 @@
package node
import "shylinux.com/x/ice"
type npm struct {
ice.Code
list string `name:"list auto" help:"打包构建"`
}
func (s npm) List(m *ice.Message) {
}
func init() { ice.CodeCtxCmd(npm{}) }

22
misc/node/server.go Normal file
View File

@ -0,0 +1,22 @@
package node
import (
"shylinux.com/x/ice"
)
type server struct {
ice.Code
command string `data:"node"`
regexp string `data:".*.js"`
linux string `data:"https://mirrors.tencent.com/nodejs-release/v16.15.1/node-v16.15.1-linux-x64.tar.xz"`
list string `name:"list path auto listScript order install" help:"编译执行"`
}
func (s server) Order(m *ice.Message) {
s.Code.Order(m, "", ice.BIN)
}
func (s server) List(m *ice.Message, arg ...string) {
s.Code.Source(m, "", arg...)
}
func init() { ice.CodeCtxCmd(server{}) }

14
misc/node/vue.go Normal file
View File

@ -0,0 +1,14 @@
package node
import "shylinux.com/x/ice"
type vue struct {
ice.Code
list string `name:"list auto" help:"服务框架"`
}
func (s vue) List(m *ice.Message) {
}
func init() { ice.CodeCtxCmd(vue{}) }

5
misc/node/vue.shy Normal file
View File

@ -0,0 +1,5 @@
section "vue"
refer `
官网 https://vuejs.org/
入门 https://vuejs.org/guide/quick-start.html
`