提交 9d52b17f 编写于 作者: yanghye's avatar yanghye

Merge branch 'dev' of https://github.com/energye/energy into dev

......@@ -12,16 +12,7 @@
"productVersion": "1.0.0",
"copyright": "Copyright.....",
"comments": "Built using ENERGY (https://github.com/energye/energy)",
"fileDescription": "Built using ENERGY (https://github.com/energye/energy)",
"installPack": {
"assets": [],
"icon": "{{.ProjectPath}}/resources/icon.ico",
"unIcon": "{{.ProjectPath}}/resources/icon.ico",
"license": "",
"language": "english",
"requestExecutionLevel": "admin",
"compress": "7za"
}
"fileDescription": "Built using ENERGY (https://github.com/energye/energy)"
},
"author": {
"name": "yanghy",
......
{
"name": "{{.Name}}",
"projectPath": "{{.ProjectPath}}",
"frameworkPath": "{{.FrameworkPath}}",
"assetsDir": "assets",
"outputFilename": "{{.OutputFilename}}",
"info": {
"icon": "{{.ProjectPath}}/resources/icon.ico",
"companyName": "{{.CompanyName}}",
"productName": "{{.ProductName}}",
"fileVersion": "1.0.0",
"productVersion": "1.0.0",
"copyright": "Copyright.....",
"comments": "Built using ENERGY (https://github.com/energye/energy)",
"fileDescription": "Built using ENERGY (https://github.com/energye/energy)"
},
"dpkg": {
"assets": [],
"icon": "{{.ProjectPath}}/resources/icon.ico",
"unIcon": "{{.ProjectPath}}/resources/icon.ico",
"license": "",
"language": "english",
"requestExecutionLevel": "admin",
"compress": "7za"
},
"author": {
"name": "yanghy",
"email": "snxamdf@126.com"
}
}
{
"name": "{{.Name}}",
"projectPath": "{{.ProjectPath}}",
"frameworkPath": "{{.FrameworkPath}}",
"assetsDir": "assets",
"outputFilename": "{{.OutputFilename}}",
"info": {
"icon": "{{.ProjectPath}}/resources/icon.ico",
"companyName": "{{.CompanyName}}",
"productName": "{{.ProductName}}",
"fileVersion": "1.0.0",
"productVersion": "1.0.0",
"copyright": "Copyright.....",
"comments": "Built using ENERGY (https://github.com/energye/energy)",
"fileDescription": "Built using ENERGY (https://github.com/energye/energy)"
},
"nsis": {
"assets": [],
"icon": "{{.ProjectPath}}/resources/icon.ico",
"unIcon": "{{.ProjectPath}}/resources/icon.ico",
"license": "",
"language": "english",
"requestExecutionLevel": "admin",
"compress": "7za"
},
"author": {
"name": "yanghy",
"email": "snxamdf@126.com"
}
}
......@@ -13,18 +13,18 @@
!define INFO_Copyright "{{.Info.Copyright}}"
!define PRODUCT_EXECUTABLE "${INFO_ProjectName}.exe"
!define UNINST_KEY_NAME "${INFO_CompanyName}${INFO_ProductName}"
!define INFO_Icon "{{.Info.InstallPack.Icon}}"
!define INFO_UnIcon "{{.Info.InstallPack.UnIcon}}"
!define ENERGY_LANGUAGE "{{.Info.InstallPack.Language}}"
!define INFO_Icon "{{.NSIS.Icon}}"
!define INFO_UnIcon "{{.NSIS.UnIcon}}"
!define ENERGY_LANGUAGE "{{.NSIS.Language}}"
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_KEY_NAME}"
{{if .Info.InstallPack.License}}
!define ENERGY_PAGE_LICENSE "{{.Info.InstallPack.License}}" ; license.txt path
{{if .NSIS.License}}
!define ENERGY_PAGE_LICENSE "{{.NSIS.License}}" ; license.txt path
{{end}}
{{if .Info.InstallPack.RequestExecutionLevel}}
!define REQUEST_EXECUTION_LEVEL "{{.Info.InstallPack.RequestExecutionLevel}}"
{{if .NSIS.RequestExecutionLevel}}
!define REQUEST_EXECUTION_LEVEL "{{.NSIS.RequestExecutionLevel}}"
RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" ; admin or ""
{{end}}
......@@ -33,18 +33,18 @@ RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" ; admin or ""
File "/oname=${PRODUCT_EXECUTABLE}" "{{.ProjectPath}}\{{.Name}}.exe" ; app.exe path, ..\..\app.exe
{{if .Info.InstallPack.CompressFile}}
File "{{.Info.InstallPack.CompressFile}}"
{{if .NSIS.CompressFile}}
File "{{.NSIS.CompressFile}}"
{{else if .FrameworkPath}}
File /r "{{.FrameworkPath}}\*.*"
{{end}}
{{range $i,$path := .Info.InstallPack.Assets }}
{{range $i,$path := .NSIS.Assets }}
File /r "{{$path}}"{{end}}
!macroend
!macro energy.compressNsis7z
{{if .Info.InstallPack.UseCompress}} ;CEF
{{if .NSIS.UseCompress}} ;CEF
Nsis7z::ExtractWithCallback "$INSTDIR\CEF.7z"
Delete "$OUTDIR\CEF.7z"
{{end}}
......
......@@ -23,6 +23,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
"runtime"
"strings"
)
......@@ -116,7 +117,8 @@ func generaProject(c *command.Config) error {
data["OutputFilename"] = c.Init.Name
data["CompanyName"] = c.Init.Name
data["ProductName"] = c.Init.Name
if err := createFile("assets/energy.json", consts.EnergyProjectConfig, data); err != nil {
energyJSON := fmt.Sprintf("assets/energy_%s.json", runtime.GOOS)
if err := createFile(energyJSON, consts.EnergyProjectConfig, data); err != nil {
return err
}
......
......@@ -14,9 +14,78 @@
package packager
import (
"errors"
"fmt"
"github.com/energye/energy/v2/cmd/internal/assets"
"github.com/energye/energy/v2/cmd/internal/project"
"github.com/energye/energy/v2/cmd/internal/tools"
"io/fs"
"io/ioutil"
"os"
"path/filepath"
)
func GeneraInstaller(projectData *project.Project) error {
const (
deb = "DEBIAN"
debControl = deb + "/control"
debPreinit = deb + "/preinit"
debPostinit = deb + "/postinit"
debPrerm = deb + "/prerm"
debPostrm = deb + "/postrm"
)
func GeneraInstaller(proj *project.Project) error {
if !tools.CommandExists("dpkg") {
return errors.New("failed to create application installation program. Could not find the dpkg command")
}
// 创建构建输出目录
buildOutDir := assets.BuildOutPath(proj)
buildOutDir = filepath.Join(buildOutDir, "linux")
if !tools.IsExist(buildOutDir) {
if err := os.MkdirAll(buildOutDir, 0755); err != nil {
return fmt.Errorf("unable to create directory: %w", err)
}
}
var err error
if err = linux(proj); err != nil {
return err
}
return nil
}
func linux(proj *project.Project) error {
buildOutDir := assets.BuildOutPath(proj)
buildOutDir = filepath.Join(buildOutDir, "linux")
// app dir
appDir := filepath.Join(buildOutDir, proj.Name)
if err := os.MkdirAll(appDir, 0755); err != nil {
return fmt.Errorf("unable to create directory: %w", err)
}
debDir := filepath.Join(appDir, deb)
if err := os.MkdirAll(debDir, 0755); err != nil {
return fmt.Errorf("unable to create directory: %w", err)
}
controlTemp := `Package: {{.CompanyName}}.{{.ProductName}}.{{.Name}}
Version: {{.ProductVersion}}
Section: Application
Priority: optional
Architecture: {{.Arch}}
Maintainer: {{.Maintainer}}
Description: {{.Comments}}
`
data := make(map[string]any)
data["Name"] = proj.Name
data["CompanyName"] = proj.Info.CompanyName
data["ProductName"] = proj.Info.ProductName
data["ProductVersion"] = proj.Info.ProductVersion
data["Arch"] = ""
data["Maintainer"] = ""
data["Comments"] = ""
content, err := tools.RenderTemplate(controlTemp, data)
if err != nil {
return err
}
debControlFile := filepath.Join(appDir, debControl)
ioutil.WriteFile(debControlFile, content, fs.ModePerm)
return nil
}
......@@ -44,14 +44,14 @@ func GeneraInstaller(proj *project.Project) error {
}
}
// 7za 压缩 CEF
if proj.Info.InstallPack.Compress == "7za" && tools.CommandExists("7za") {
proj.Info.InstallPack.UseCompress = true
if proj.NSIS.Compress == "7za" && tools.CommandExists("7za") {
proj.NSIS.UseCompress = true
}
if proj.Info.InstallPack.UseCompress {
if proj.NSIS.UseCompress {
if cef7zFile, err := compressCEF7za(proj); err != nil {
return err
} else {
proj.Info.InstallPack.CompressFile = cef7zFile
proj.NSIS.CompressFile = cef7zFile
}
}
......@@ -119,7 +119,10 @@ func windows(proj *project.Project) error {
data["Name"] = proj.Name
data["ProjectPath"] = filepath.FromSlash(proj.ProjectPath)
data["FrameworkPath"] = filepath.FromSlash(proj.FrameworkPath)
data["Info"] = proj.Info.FromSlash()
proj.Info.FromSlash()
proj.NSIS.FromSlash()
data["Info"] = proj.Info
data["NSIS"] = proj.NSIS
if content, err := tools.RenderTemplate(string(toolsData), data); err != nil {
return err
} else if err = assets.WriteFile(proj, windowsNsisTools, content); err != nil {
......
......@@ -29,6 +29,7 @@ type Project struct {
AssetsDir string `json:"assetsDir"` // 构建配置所在目录 未指定使用田默认内置配置
OutputFilename string `json:"outputFilename"` // 输出安装包文件名
Info Info `json:"info"` // 应用信息
NSIS NSIS `json:"nsis"` // windows nsis 安装包
Author Author `json:"author"` // 作者信息
}
......@@ -86,49 +87,42 @@ func (m *Project) setDefaults() {
}
type Info struct {
Icon string `json:"icon"` //应用图标
CompanyName string `json:"companyName"` //公司名称
ProductName string `json:"productName"` //产品名称
FileVersion string `json:"FileVersion"` //文件版本
ProductVersion string `json:"productVersion"` //产品版本
Copyright *string `json:"copyright"` //版权
Comments *string `json:"comments"` //exe详情描述
FileDescription *string `json:"fileDescription"` //描述
InstallPack InstallPack `json:"installPack"` // windows nsis 安装包
Icon string `json:"icon"` //应用图标
CompanyName string `json:"companyName"` //公司名称
ProductName string `json:"productName"` //产品名称
FileVersion string `json:"FileVersion"` //文件版本
ProductVersion string `json:"productVersion"` //产品版本
Copyright *string `json:"copyright"` //版权
Comments *string `json:"comments"` //exe详情描述
FileDescription *string `json:"fileDescription"` //描述
}
func (m *Info) FromSlash() *Info {
func (m *Info) FromSlash() {
m.Icon = filepath.FromSlash(m.Icon)
m.InstallPack = *m.InstallPack.FromSlash()
return m
}
func (m *Info) ToSlash() *Info {
func (m *Info) ToSlash() {
m.Icon = filepath.ToSlash(m.Icon)
m.InstallPack = *m.InstallPack.ToSlash()
return m
}
func (m *InstallPack) FromSlash() *InstallPack {
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)
}
return m
}
func (m *InstallPack) ToSlash() *InstallPack {
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)
}
return m
}
// InstallPack windows NSIS
type InstallPack struct {
// NSIS windows NSIS
type NSIS struct {
Icon string `json:"icon"` //安装包图标
Assets []string `json:"assets"` //打包的资源目录、或文件 ["/to/path/file.txt", "/to/dir/*.*", "/to/dir"]
UnIcon string `json:"unIcon"` //安装包卸载图标
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册