Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
0adc4541
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0adc4541
编写于
9月 13, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
energy command-line tools: package linux
上级
6d842a91
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
133 addition
and
17 deletion
+133
-17
cmd/internal/assets/assets/energy_linux.json
cmd/internal/assets/assets/energy_linux.json
+2
-1
cmd/internal/assets/assets/energy_windows.json
cmd/internal/assets/assets/energy_windows.json
+2
-1
cmd/internal/assets/assets/packager/linux/app.desktop
cmd/internal/assets/assets/packager/linux/app.desktop
+1
-0
cmd/internal/assets/assets/packager/windows/installer-tools.nsh
...ternal/assets/assets/packager/windows/installer-tools.nsh
+1
-1
cmd/internal/packager/pkg_dpkg_linux.go
cmd/internal/packager/pkg_dpkg_linux.go
+103
-6
cmd/internal/packager/pkg_nsis_windows.go
cmd/internal/packager/pkg_nsis_windows.go
+3
-2
cmd/internal/project/project.go
cmd/internal/project/project.go
+8
-6
cmd/internal/tools/tools.go
cmd/internal/tools/tools.go
+13
-0
未找到文件。
cmd/internal/assets/assets/energy_linux.json
浏览文件 @
0adc4541
...
...
@@ -12,7 +12,8 @@
"comments"
:
"Built using ENERGY (https://github.com/energye/energy)"
},
"dpkg"
:
{
"assets"
:
[],
"include"
:
[],
"exclude"
:
[
"cache"
],
"package"
:
"com.{{.CompanyName}}.{{.CompanyName}}"
,
"homepage"
:
"https://github.com/energye/energy"
,
"compress"
:
"7zz"
...
...
cmd/internal/assets/assets/energy_windows.json
浏览文件 @
0adc4541
...
...
@@ -15,7 +15,8 @@
"fileDescription"
:
"Built using ENERGY (https://github.com/energye/energy)"
},
"nsis"
:
{
"assets"
:
[],
"include"
:
[],
"exclude"
:
[
"cache"
],
"icon"
:
"{{.ProjectPath}}/resources/icon.ico"
,
"unIcon"
:
"{{.ProjectPath}}/resources/icon.ico"
,
"license"
:
""
,
...
...
cmd/internal/assets/assets/packager/linux/app.desktop
浏览文件 @
0adc4541
...
...
@@ -5,4 +5,5 @@ Name={{.Name}}
Exec={{.Exec}}
Icon={{.Icon}}
Comment={{.Comments}}
Encoding=UTF-8
Categories=Utility;
\ No newline at end of file
cmd/internal/assets/assets/packager/windows/installer-tools.nsh
浏览文件 @
0adc4541
...
...
@@ -39,7 +39,7 @@ RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" ; admin or ""
File /r "{{.FrameworkPath}}\*.*"
{{end}}
{{range $i,$path := .NSIS.
Assets
}}
{{range $i,$path := .NSIS.
Include
}}
File /r "{{$path}}"{{end}}
!macroend
...
...
cmd/internal/packager/pkg_dpkg_linux.go
浏览文件 @
0adc4541
...
...
@@ -21,10 +21,13 @@ import (
"github.com/energye/energy/v2/cmd/internal/project"
"github.com/energye/energy/v2/cmd/internal/term"
"github.com/energye/energy/v2/cmd/internal/tools"
"github.com/energye/golcl/tools/command"
"io"
"io/fs"
"os"
"path/filepath"
"runtime"
"strings"
)
const
(
...
...
@@ -57,23 +60,64 @@ func GeneraInstaller(proj *project.Project) error {
}
}
var
err
error
// create debian/control
if
err
=
linuxControl
(
proj
,
appRoot
);
err
!=
nil
{
return
err
}
// create debian/copyright
if
err
=
linuxCopyright
(
proj
,
appRoot
);
err
!=
nil
{
return
err
}
// create app.desktop
if
err
=
linuxDesktop
(
proj
,
appRoot
);
err
!=
nil
{
return
err
}
if
err
=
linuxOpt
(
proj
,
appRoot
);
err
!=
nil
{
// copy source
if
err
=
linuxOptCopy
(
proj
,
appRoot
);
err
!=
nil
{
return
err
}
// dpkg -b
var
debName
string
if
debName
,
err
=
dpkgB
(
proj
);
err
!=
nil
{
return
err
}
// out log
outInstall
:=
filepath
.
Join
(
assets
.
BuildOutPath
(
proj
),
"linux"
,
debName
)
successLog
:=
"Success
\n\t
Install Package: %s
\n\t
Install: sudo dpkg -i %s
\n\t
Remove: sudo dpkg -r %s"
term
.
Section
.
Println
(
fmt
.
Sprintf
(
successLog
,
outInstall
,
debName
,
proj
.
Dpkg
.
Package
))
return
nil
}
func
dpkgB
(
proj
*
project
.
Project
)
(
string
,
error
)
{
dir
:=
filepath
.
Join
(
assets
.
BuildOutPath
(
proj
),
"linux"
)
//sudo dpkg -b demo-1.0.0/ demo-[os]-[arch].deb
app
:=
fmt
.
Sprintf
(
"%s-%s"
,
proj
.
Name
,
proj
.
Info
.
ProductVersion
)
debName
:=
fmt
.
Sprintf
(
"%s-%s-%s.deb"
,
proj
.
Name
,
runtime
.
GOOS
,
runtime
.
GOARCH
)
outFile
:=
filepath
.
Join
(
dir
,
debName
)
term
.
Logger
.
Info
(
"Generate dpkg package. Almost complete"
,
term
.
Logger
.
Args
(
"deb"
,
debName
))
cmd
:=
command
.
NewCMD
()
cmd
.
IsPrint
=
false
cmd
.
Dir
=
dir
var
err
error
cmd
.
MessageCallback
=
func
(
bytes
[]
byte
,
e
error
)
{
if
e
!=
nil
{
err
=
e
}
}
if
tools
.
IsExist
(
outFile
)
{
os
.
Remove
(
outFile
)
}
var
args
=
[]
string
{
"-b"
,
app
,
debName
}
cmd
.
Command
(
"dpkg"
,
args
...
)
cmd
.
Close
()
return
debName
,
err
}
func
opt
(
proj
*
project
.
Project
)
string
{
return
filepath
.
Join
(
"/opt"
,
proj
.
Info
.
CompanyName
,
proj
.
Info
.
ProductName
)
}
func
linuxOpt
(
proj
*
project
.
Project
,
appRoot
string
)
error
{
func
linuxOpt
Copy
(
proj
*
project
.
Project
,
appRoot
string
)
error
{
term
.
Logger
.
Info
(
"Generate dpkg copy:"
,
term
.
Logger
.
Args
(
"company"
,
proj
.
Info
.
CompanyName
,
"product"
,
proj
.
Info
.
ProductName
,
"opt"
,
fmt
.
Sprintf
(
"/opt/%s/%s"
,
proj
.
Info
.
CompanyName
,
proj
.
Info
.
ProductName
)))
...
...
@@ -88,6 +132,11 @@ func linuxOpt(proj *project.Project, appRoot string) error {
if
!
tools
.
IsExist
(
exeDir
)
{
return
fmt
.
Errorf
(
"execution file not found: %s"
,
exeDir
)
}
exeIconDir
:=
proj
.
Info
.
Icon
if
!
tools
.
IsExist
(
exeIconDir
)
{
return
fmt
.
Errorf
(
"execution file not found: %s"
,
exeDir
)
}
term
.
Logger
.
Info
(
"Generate dpkg execution "
+
exeDir
)
cefDir
:=
os
.
Getenv
(
consts
.
EnergyHomeKey
)
if
!
tools
.
IsExist
(
cefDir
)
{
...
...
@@ -98,14 +147,53 @@ func linuxOpt(proj *project.Project, appRoot string) error {
if
srcFile
,
err
:=
os
.
Open
(
src
);
err
!=
nil
{
return
err
}
else
{
defer
srcFile
.
Close
()
st
,
err
:=
srcFile
.
Stat
()
if
err
!=
nil
{
return
err
}
if
st
.
IsDir
()
{
srcFile
.
Close
()
//close
var
pathLen
=
len
(
src
)
err
:=
filepath
.
WalkDir
(
src
,
func
(
path
string
,
d
fs
.
DirEntry
,
err
error
)
error
{
if
path
==
src
{
// current root
return
nil
}
outPath
:=
path
[
pathLen
:
]
// exclude file or dir
for
_
,
p
:=
range
proj
.
Dpkg
.
Exclude
{
if
strings
.
Contains
(
outPath
,
p
)
{
return
nil
}
}
targetPath
:=
filepath
.
Join
(
dst
,
outPath
)
info
,
_
:=
d
.
Info
()
if
d
.
IsDir
()
{
return
os
.
MkdirAll
(
targetPath
,
info
.
Mode
())
}
else
{
if
tools
.
IsExistAndSize
(
targetPath
,
info
.
Size
())
{
term
.
Logger
.
Info
(
"
\t
copy skip: "
+
outPath
)
return
nil
}
srcFile
,
err
:=
os
.
Open
(
path
)
if
err
!=
nil
{
return
err
}
defer
srcFile
.
Close
()
dstFile
,
err
:=
os
.
OpenFile
(
targetPath
,
os
.
O_CREATE
|
os
.
O_WRONLY
,
info
.
Mode
())
if
err
!=
nil
{
return
err
}
defer
dstFile
.
Close
()
term
.
Logger
.
Info
(
"
\t
copy: "
+
outPath
)
_
,
err
=
io
.
Copy
(
dstFile
,
srcFile
)
return
err
}
})
if
err
!=
nil
{
return
err
}
}
else
{
defer
srcFile
.
Close
()
dstFilePath
:=
filepath
.
Join
(
dst
,
st
.
Name
())
dstFile
,
err
:=
os
.
OpenFile
(
dstFilePath
,
os
.
O_CREATE
|
os
.
O_WRONLY
,
st
.
Mode
())
if
err
!=
nil
{
...
...
@@ -122,11 +210,15 @@ func linuxOpt(proj *project.Project, appRoot string) error {
}
term
.
Logger
.
Info
(
"Generate dpkg copy:"
,
term
.
Logger
.
Args
(
"execution"
,
exeDir
))
if
err
:=
copyFiles
(
exeDir
,
optDir
);
err
!=
nil
{
return
nil
return
err
}
term
.
Logger
.
Info
(
"Generate dpkg copy:"
,
term
.
Logger
.
Args
(
"icon"
,
exeIconDir
))
if
err
:=
copyFiles
(
exeIconDir
,
optDir
);
err
!=
nil
{
return
err
}
term
.
Logger
.
Info
(
"Generate dpkg copy:"
,
term
.
Logger
.
Args
(
"framework"
,
cefDir
))
if
err
:=
copyFiles
(
cefDir
,
optDir
);
err
!=
nil
{
return
nil
return
err
}
return
nil
}
...
...
@@ -162,6 +254,11 @@ func linuxDesktop(proj *project.Project, appRoot string) error {
return
nil
}
func
linuxCopyright
(
proj
*
project
.
Project
,
appRoot
string
)
error
{
term
.
Logger
.
Info
(
"Generate dpkg copyright"
)
return
nil
}
func
linuxControl
(
proj
*
project
.
Project
,
appRoot
string
)
error
{
term
.
Logger
.
Info
(
"Generate dpkg control"
)
buildOutDir
:=
assets
.
BuildOutPath
(
proj
)
...
...
cmd/internal/packager/pkg_nsis_windows.go
浏览文件 @
0adc4541
...
...
@@ -134,7 +134,8 @@ func windows(proj *project.Project) error {
// 使用nsis生成安装包
func
makeNSIS
(
proj
*
project
.
Project
)
(
string
,
error
)
{
term
.
Logger
.
Info
(
"NSIS Making Installation, Almost complete"
)
installPackage
:=
proj
.
Name
+
"-installer.exe"
term
.
Logger
.
Info
(
"NSIS Making Installation, Almost complete"
,
term
.
Logger
.
Args
(
"Install Package"
,
installPackage
))
var
args
[]
string
cmd
:=
command
.
NewCMD
()
cmd
.
IsPrint
=
false
...
...
@@ -145,6 +146,6 @@ func makeNSIS(proj *project.Project) (string, error) {
nsisScriptPath
:=
filepath
.
Join
(
assets
.
BuildOutPath
(
proj
),
windowsNsis
)
args
=
append
(
args
,
nsisScriptPath
)
cmd
.
Command
(
"makensis"
,
args
...
)
outInstall
:=
filepath
.
Join
(
filepath
.
Dir
(
nsisScriptPath
),
proj
.
Name
+
"-installer.exe"
)
outInstall
:=
filepath
.
Join
(
filepath
.
Dir
(
nsisScriptPath
),
installPackage
)
return
outInstall
,
nil
}
cmd/internal/project/project.go
浏览文件 @
0adc4541
...
...
@@ -109,23 +109,24 @@ func (m *Info) ToSlash() {
func
(
m
*
NSIS
)
FromSlash
()
{
m
.
Icon
=
filepath
.
FromSlash
(
m
.
Icon
)
m
.
UnIcon
=
filepath
.
FromSlash
(
m
.
UnIcon
)
for
i
,
as
:=
range
m
.
Assets
{
m
.
Assets
[
i
]
=
filepath
.
FromSlash
(
as
)
for
i
,
as
:=
range
m
.
Include
{
m
.
Include
[
i
]
=
filepath
.
FromSlash
(
as
)
}
}
func
(
m
*
NSIS
)
ToSlash
()
{
m
.
Icon
=
filepath
.
ToSlash
(
m
.
Icon
)
m
.
UnIcon
=
filepath
.
ToSlash
(
m
.
UnIcon
)
for
i
,
as
:=
range
m
.
Assets
{
m
.
Assets
[
i
]
=
filepath
.
ToSlash
(
as
)
for
i
,
as
:=
range
m
.
Include
{
m
.
Include
[
i
]
=
filepath
.
ToSlash
(
as
)
}
}
// NSIS windows NSIS
type
NSIS
struct
{
Icon
string
`json:"icon"`
//安装包图标
Assets
[]
string
`json:"assets"`
//打包的资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
Include
[]
string
`json:"include"`
//打包资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
Exclude
[]
string
`json:"exclude"`
//打包排除资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
UnIcon
string
`json:"unIcon"`
//安装包卸载图标
License
string
`json:"license"`
//安装包授权信息,(license.txt)文件路径
Language
string
`json:"language"`
//安装包语言, 中文: SimpChinese, 英文: English, 语言在 NSIS_HOME/Contrib/Language files
...
...
@@ -136,7 +137,8 @@ type NSIS struct {
}
type
DPKG
struct
{
Assets
[]
string
`json:"assets"`
//打包的资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
Include
[]
string
`json:"include"`
//打包资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
Exclude
[]
string
`json:"exclude"`
//打包排除资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
Package
string
`json:"package"`
Homepage
string
`json:"homepage"`
Compress
string
`json:"compress"`
//压纹CEF, 当前仅支持7z/a压缩,""(空)时不启用压缩 默认: 7za
...
...
cmd/internal/tools/tools.go
浏览文件 @
0adc4541
...
...
@@ -106,6 +106,19 @@ func IsExist(path string) bool {
return
true
}
func
IsExistAndSize
(
path
string
,
size
int64
)
bool
{
s
,
err
:=
os
.
Stat
(
path
)
if
err
!=
nil
{
if
os
.
IsExist
(
err
)
&&
s
.
Size
()
==
size
{
return
true
}
else
if
os
.
IsNotExist
(
err
)
{
return
false
}
return
false
}
return
true
}
func
RenderTemplate
(
templateText
string
,
data
map
[
string
]
any
)
([]
byte
,
error
)
{
tmpl
,
err
:=
template
.
New
(
""
)
.
Parse
(
templateText
)
if
err
!=
nil
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录