提交 44340118 编写于 作者: Z zhangli10

command-line: install, package, darwin upx

上级 fcb8301e
......@@ -29,27 +29,27 @@ const (
)
// AssetsPath 返回配置资源目录
func AssetsPath(projectData *project.Project, file string) string {
return filepath.ToSlash(filepath.Join(projectData.AssetsDir, file))
func AssetsPath(proj *project.Project, file string) string {
return filepath.ToSlash(filepath.Join(proj.AssetsDir, file))
}
// BuildOutPath 返回固定构建输出目录 $current/build
func BuildOutPath(projectData *project.Project) string {
if projectData.AppType == project.AtHelper {
return projectData.ProjectPath
func BuildOutPath(proj *project.Project) string {
if proj.AppType == project.AtHelper {
return proj.ProjectPath
}
return filepath.Join(projectData.ProjectPath, "build")
return filepath.Join(proj.ProjectPath, "build")
}
// ReadFile
// 读取文件,根据项目配置先在本地目录读取,如果读取失败,则在内置资源目录读取
func ReadFile(projectData *project.Project, assetsFSPath, file string) ([]byte, error) {
func ReadFile(proj *project.Project, assetsFSPath, file string) ([]byte, error) {
var (
content []byte
err error
)
if projectData != nil {
localFilePath := AssetsPath(projectData, file)
if proj != nil {
localFilePath := AssetsPath(proj, file)
content, err = os.ReadFile(localFilePath)
}
if errors.Is(err, fs.ErrNotExist) || content == nil {
......
......@@ -49,8 +49,9 @@ type Install struct {
}
type Package struct {
Path string `short:"p" long:"path" description:"Project path, default current path. Can be configured in energy.json" default:""`
Clean bool `short:"c" long:"clean" description:"Clear configuration and regenerate the default configuration"`
Path string `short:"p" long:"path" description:"Project path, default current path. Can be configured in energy.json" default:""`
Clean bool `short:"c" long:"clean" description:"Clear configuration and regenerate the default configuration"`
Pkgbuild bool `long:"pkg" description:"Using pkgbuild to create pkg development installation packages"`
}
type Env struct {
......
......@@ -43,6 +43,7 @@ func runPackage(c *command.Config) error {
return err
} else {
proj.Clean = c.Package.Clean
proj.Dpkg.Pkgbuild = c.Package.Pkgbuild
if err = packager.GeneraInstaller(proj); err != nil {
return err
}
......
......@@ -67,12 +67,14 @@ var (
macCefHelperPlugin,
macCefHelpersRenderer,
}
projectPath string
)
func GeneraInstaller(proj *project.Project) error {
appRoot := fmt.Sprintf("darwin/%s.app", proj.Name)
buildOutDir := assets.BuildOutPath(proj)
buildOutDir = filepath.Join(buildOutDir, appRoot)
projectPath = proj.ProjectPath
if !tools.IsExist(buildOutDir) {
if err := os.MkdirAll(buildOutDir, 0755); err != nil {
return fmt.Errorf("unable to create directory: %w", err)
......@@ -96,6 +98,11 @@ func GeneraInstaller(proj *project.Project) error {
if err := copyHelperFile(proj, appRoot); err != nil {
return err
}
if proj.Dpkg.Pkgbuild {
if err := pkgbuild(proj, appRoot); err != nil {
return err
}
}
return nil
}
......@@ -192,7 +199,36 @@ func copyFrameworkFile(proj *project.Project, appRoot string) error {
if err := copyFiles(proj, cefDir, outCEF); err != nil {
return err
}
return nil
}
// pkgbuild --root demo.app --identifier com.demo.demo --version 1.0.0 --install-location /Applications/demo.app demo.pkg
func pkgbuild(proj *project.Project, appRoot string) error {
proj.AppType = project.AtApp
proj.ProjectPath = projectPath
buildOutDir := assets.BuildOutPath(proj)
cmdWorkDir := filepath.Join(buildOutDir, "darwin")
term.Logger.Info("Generate app pkgbuild", term.Logger.Args("cmd work dir", cmdWorkDir))
// remove xxx.pkg
os.Remove(filepath.Join(cmdWorkDir, fmt.Sprintf("%s.pkg", proj.Name)))
cmd := command.NewCMD()
//cmd.IsPrint = false
cmd.Dir = cmdWorkDir
cmd.MessageCallback = func(bytes []byte, err error) {
msg := string(bytes)
if msg != "" {
println(msg)
}
}
var args = []string{"--root", fmt.Sprintf("%s.app", proj.Name),
"--identifier", fmt.Sprintf("com.%s.%s", proj.PList.CompanyName, proj.PList.ProductName),
"--version", proj.PList.CFBundleVersion,
"--install-location", fmt.Sprintf("/Applications/%s.app", proj.Name),
fmt.Sprintf("%s.pkg", proj.Name)}
cmd.Command("pkgbuild", args...)
cmd.Close()
// remove xxx.app
os.Remove(filepath.Join(buildOutDir, appRoot))
return nil
}
......@@ -259,6 +295,7 @@ func createApp(proj *project.Project, appRoot string) error {
term.Logger.Info("Generate app create app dir: " + appRoot)
buildOutDir := assets.BuildOutPath(proj)
appDir := filepath.Join(buildOutDir, appRoot)
os.Remove(appDir)
// Contents
contents := filepath.Join(appDir, appContents)
if err := os.MkdirAll(contents, 0755); err != nil {
......
......@@ -116,9 +116,7 @@ func dpkgB(proj *project.Project) (string, error) {
err = e
}
}
if tools.IsExist(outFile) {
os.Remove(outFile)
}
os.Remove(outFile)
var args = []string{"-b", app, debName}
cmd.Command("dpkg", args...)
cmd.Close()
......
......@@ -158,6 +158,7 @@ type DPKG struct {
Compress string `json:"compress"` //压纹CEF, 当前仅支持7z/a压缩,""(空)时不启用压缩 默认: 7za
UseCompress bool `json:"-"` //如果支持配置的, true=使用压缩
CompressFile string `json:"-"` //压缩后的文件完全目录
Pkgbuild bool `json:"-"` // 生成pkg安装包
}
type PList struct {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册