5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 06:59:18 +08:00
wails/v2/pkg/commands/build/packager_linux.go
2020-09-15 19:55:50 -05:00

135 lines
3.2 KiB
Go

package build
import (
"io/ioutil"
"os"
"path/filepath"
"strings"
"github.com/leaanthony/slicer"
"github.com/wailsapp/wails/v2/internal/fs"
"github.com/wailsapp/wails/v2/internal/shell"
)
func deleteLinuxPackFiles(appDirBase string) {
// Delete appdir
appDir := filepath.Join(appDirBase, "AppDir")
os.RemoveAll(appDir)
}
func packageApplication(options *Options) error {
// Check we have AppImage tools
// Create AppImage build directory
buildDirectory, err := getApplicationBuildDirectory(options, "linux")
if err != nil {
return err
}
defer deleteLinuxPackFiles(buildDirectory)
// Get the name of the application and ensure we lower+kebab case it
name := filepath.Base(options.ProjectData.OutputFilename)
// Calculate asset directory
assetDir := getPackageAssetsDirectory()
// Copy default icon if one doesn't exist
baseBuildDirectory, err := getBuildBaseDirectory(options)
if err != nil {
return err
}
iconFile := filepath.Join(baseBuildDirectory, "icon.png")
if !fs.FileExists(iconFile) {
err = fs.CopyFile(defaultIconPath(), iconFile)
if err != nil {
return err
}
}
// Copy Icon
targetIcon := filepath.Join(buildDirectory, name+".png")
err = fs.CopyFile(iconFile, targetIcon)
if err != nil {
return err
}
// Copy app.desktop
dotDesktopFile := filepath.Join(baseBuildDirectory, "linux", name+".desktop")
if !fs.FileExists(dotDesktopFile) {
bytes, err := ioutil.ReadFile(filepath.Join(assetDir, "app.desktop"))
if err != nil {
return err
}
appDesktop := string(bytes)
appDesktop = strings.ReplaceAll(appDesktop, `{{.Name}}`, name)
err = ioutil.WriteFile(dotDesktopFile, []byte(appDesktop), 0644)
if err != nil {
return err
}
}
// Copy AppRun file
// targetFilename = filepath.Join(buildDirectory, "AppRun")
// if !fs.FileExists(targetFilename) {
// bytes, err := ioutil.ReadFile(filepath.Join(assetDir, "AppRun"))
// if err != nil {
// return err
// }
// appRun := string(bytes)
// appRun = strings.ReplaceAll(appRun, `{{.OutputFilename}}`, name)
// err = ioutil.WriteFile(targetFilename, []byte(appRun), 0644)
// if err != nil {
// return err
// }
// }
// Copy Binary
sourceFile := filepath.Join(options.ProjectData.Path, options.ProjectData.OutputFilename)
targetFile := filepath.Join(buildDirectory, options.ProjectData.OutputFilename)
err = fs.CopyFile(sourceFile, targetFile)
if err != nil {
return err
}
err = os.Chmod(targetFile, 0777)
if err != nil {
return err
}
/** Pack App **/
// Make file executable
// Set environment variable: OUTPUT=outputfilename
command := shell.NewCommand("linuxdeploy-x86_64.AppImage")
command.Dir(buildDirectory)
argslice := slicer.String()
argslice.Add("--appdir", "AppDir")
argslice.Add("-d", filepath.Join("..", name+".desktop"))
argslice.Add("-i", name+".png")
argslice.Add("-e", name)
argslice.Add("--output", "appimage")
command.AddArgs(argslice.AsSlice())
command.Env("OUTPUT", name+".AppImage")
err = command.Run()
if err != nil {
println(command.Stdout())
println(command.Stderr())
return err
}
// Copy app to project dir
println(buildDirectory)
return nil
}
func deleteDirectory(directory string) {
os.RemoveAll(directory)
}