From 12efb8b9816202737346af8edcd7eaac2996866d Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 18 Nov 2023 13:08:59 +1100 Subject: [PATCH] Update default taskfile. WIP linux packaging --- mkdocs-website/shared/alpha2.csv | 2 +- v3/cmd/wails3/main.go | 2 + v3/go.mod | 1 + v3/go.sum | 2 + v3/internal/commands/appimage.go | 173 ++++++++ v3/internal/commands/appimage_test.go | 80 ++++ .../commands/appimage_testfiles/appicon.png | Bin 0 -> 132625 bytes .../commands/appimage_testfiles/main.go | 417 ++++++++++++++++++ .../appimage_testfiles/testapp.desktop | 10 + v3/internal/commands/dot_desktop.go | 4 +- .../commands/linuxdeploy-plugin-gtk.sh | 376 ++++++++++++++++ v3/internal/commands/task.go | 10 +- v3/internal/s/s.go | 417 ++++++++++++++++++ .../templates/_common/Taskfile.tmpl.yml | 73 +-- 14 files changed, 1524 insertions(+), 43 deletions(-) create mode 100644 v3/internal/commands/appimage.go create mode 100644 v3/internal/commands/appimage_test.go create mode 100644 v3/internal/commands/appimage_testfiles/appicon.png create mode 100644 v3/internal/commands/appimage_testfiles/main.go create mode 100644 v3/internal/commands/appimage_testfiles/testapp.desktop create mode 100644 v3/internal/commands/linuxdeploy-plugin-gtk.sh create mode 100644 v3/internal/s/s.go diff --git a/mkdocs-website/shared/alpha2.csv b/mkdocs-website/shared/alpha2.csv index 2dd5262c..a65bac12 100644 --- a/mkdocs-website/shared/alpha2.csv +++ b/mkdocs-website/shared/alpha2.csv @@ -2,4 +2,4 @@ `wails init`,:material-check-bold:,:material-check-bold:,:material-check-bold: `wails build`,:material-check-bold:,:material-check-bold:,:material-check-bold: `wails dev`," "," "," " -`wails package`," ",:material-check-bold:," " +`wails package`," ",:material-check-bold:,:material-check-bold: diff --git a/v3/cmd/wails3/main.go b/v3/cmd/wails3/main.go index 6472556b..b993072d 100644 --- a/v3/cmd/wails3/main.go +++ b/v3/cmd/wails3/main.go @@ -45,6 +45,8 @@ func main() { generate.NewSubCommandFunction("bindings", "Generate bindings + models", commands.GenerateBindings) generate.NewSubCommandFunction("constants", "Generate JS constants from Go", commands.GenerateConstants) generate.NewSubCommandFunction(".desktop", "Generate .desktop file", commands.GenerateDotDesktop) + generate.NewSubCommandFunction("appimage", "Generate Linux AppImage", commands.GenerateAppImage) + plugin := app.NewSubCommand("plugin", "Plugin tools") //plugin.NewSubCommandFunction("list", "List plugins", commands.PluginList) plugin.NewSubCommandFunction("init", "Initialise a new plugin", commands.PluginInit) diff --git a/v3/go.mod b/v3/go.mod index a94caafd..a40732f3 100644 --- a/v3/go.mod +++ b/v3/go.mod @@ -10,6 +10,7 @@ require ( github.com/go-task/task/v3 v3.31.0 github.com/godbus/dbus/v5 v5.1.0 github.com/google/go-cmp v0.5.9 + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/google/uuid v1.3.0 github.com/gorilla/pat v1.0.1 github.com/gorilla/sessions v1.2.1 diff --git a/v3/go.sum b/v3/go.sum index a867c1c6..88b9feb8 100644 --- a/v3/go.sum +++ b/v3/go.sum @@ -173,6 +173,8 @@ github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= diff --git a/v3/internal/commands/appimage.go b/v3/internal/commands/appimage.go new file mode 100644 index 00000000..90b7599f --- /dev/null +++ b/v3/internal/commands/appimage.go @@ -0,0 +1,173 @@ +package commands + +import ( + _ "embed" + "fmt" + "github.com/pterm/pterm" + "github.com/wailsapp/wails/v3/internal/s" + "os" + "path/filepath" + "sync" +) + +//go:embed linuxdeploy-plugin-gtk.sh +var gtkPlugin []byte + +func log(p *pterm.ProgressbarPrinter, message string) { + p.UpdateTitle(message) + pterm.Info.Println(message) + p.Increment() +} + +type GenerateAppImageOptions struct { + Binary string `description:"The binary to package including path"` + Icon string `description:"Path to the icon"` + DesktopFile string `description:"Path to the desktop file"` + OutputDir string `description:"Path to the output directory" default:"."` + BuildDir string `description:"Path to the build directory"` +} + +func GenerateAppImage(options *GenerateAppImageOptions) error { + + defer func() { + pterm.DefaultSpinner.Stop() + }() + + if options.Binary == "" { + return fmt.Errorf("binary not provided") + } + if options.Icon == "" { + return fmt.Errorf("icon path not provided") + } + if options.DesktopFile == "" { + return fmt.Errorf("desktop file path not provided") + } + if options.BuildDir == "" { + // Create temp directory + var err error + options.BuildDir, err = os.MkdirTemp("", "wails-appimage-*") + if err != nil { + return err + } + } + var err error + options.OutputDir, err = filepath.Abs(options.OutputDir) + if err != nil { + return err + } + + return generateAppImage(options) +} + +func generateAppImage(options *GenerateAppImageOptions) error { + numberOfSteps := 5 + p, _ := pterm.DefaultProgressbar.WithTotal(numberOfSteps).WithTitle("Generating AppImage").Start() + + // Get the last path of the binary and normalise the name + name := normaliseName(filepath.Base(options.Binary)) + + appDir := filepath.Join(options.BuildDir, name+"-x86_64.AppDir") + s.RMDIR(appDir) + + log(p, "Preparing AppImage Directory: "+appDir) + + usrBin := filepath.Join(appDir, "usr", "bin") + s.MKDIR(options.BuildDir) + s.MKDIR(usrBin) + s.COPY(options.Binary, usrBin) + s.CHMOD(filepath.Join(usrBin, filepath.Base(options.Binary)), 0755) + dotDirIcon := filepath.Join(appDir, ".DirIcon") + s.COPY(options.Icon, dotDirIcon) + iconLink := filepath.Join(appDir, filepath.Base(options.Icon)) + s.DELETE(iconLink) + s.SYMLINK(".DirIcon", iconLink) + s.COPY(options.DesktopFile, appDir) + + // Download linuxdeploy and make it executable + s.CD(options.BuildDir) + + // Download necessary files + log(p, "Downloading AppImage tooling") + var wg sync.WaitGroup + wg.Add(2) + go func() { + if !s.EXISTS(filepath.Join(options.BuildDir, "linuxdeploy-x86_64.AppImage")) { + s.DOWNLOAD("https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage", filepath.Join(options.BuildDir, "linuxdeploy-x86_64.AppImage")) + } + s.CHMOD(filepath.Join(options.BuildDir, "linuxdeploy-x86_64.AppImage"), 0755) + wg.Done() + }() + go func() { + target := filepath.Join(appDir, "AppRun") + if !s.EXISTS(target) { + s.DOWNLOAD("https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86_64", target) + } + s.CHMOD(target, 0755) + wg.Done() + }() + wg.Wait() + + log(p, "Processing GTK files.") + files := s.FINDFILES("/usr/lib", "WebKitNetworkProcess", "WebKitWebProcess", "libwebkit2gtkinjectedbundle.so") + if len(files) != 3 { + return fmt.Errorf("unable to locate all WebKit libraries") + } + s.CD(appDir) + for _, file := range files { + targetDir := filepath.Dir(file) + // Strip leading forward slash + if targetDir[0] == '/' { + targetDir = targetDir[1:] + } + var err error + targetDir, err = filepath.Abs(targetDir) + if err != nil { + return err + } + s.MKDIR(targetDir) + s.COPY(file, targetDir) + } + // Copy GTK Plugin + err := os.WriteFile(filepath.Join(options.BuildDir, "linuxdeploy-plugin-gtk.sh"), gtkPlugin, 0755) + if err != nil { + return err + } + + // Determine GTK Version + // Run ldd on the binary and capture the output + targetBinary := filepath.Join(appDir, "usr", "bin", options.Binary) + lddOutput, err := s.EXEC(fmt.Sprintf("ldd %s", targetBinary)) + if err != nil { + println(string(lddOutput)) + return err + } + lddString := string(lddOutput) + // Check if GTK3 is present + var DeployGtkVersion string + if s.CONTAINS(lddString, "libgtk-x11-2.0.so") { + DeployGtkVersion = "2" + } else if s.CONTAINS(lddString, "libgtk-3.so") { + DeployGtkVersion = "3" + } else if s.CONTAINS(lddString, "libgtk-4.so") { + DeployGtkVersion = "4" + } else { + return fmt.Errorf("unable to determine GTK version") + } + // Run linuxdeploy to bundle the application + s.CD(options.BuildDir) + log(p, "Generating AppImage (This may take a while...)") + cmd := fmt.Sprintf("./linuxdeploy-x86_64.AppImage --appimage-extract-and-run --appdir %s --output appimage --plugin gtk", appDir) + s.SETENV("DEPLOY_GTK_VERSION", DeployGtkVersion) + output, err := s.EXEC(cmd) + if err != nil { + println(output) + return err + } + + // Move file to output directory + targetFile := filepath.Join(options.BuildDir, name+"-x86_64.AppImage") + s.MOVE(targetFile, options.OutputDir) + + log(p, "AppImage created: "+targetFile) + return nil +} diff --git a/v3/internal/commands/appimage_test.go b/v3/internal/commands/appimage_test.go new file mode 100644 index 00000000..23e81efa --- /dev/null +++ b/v3/internal/commands/appimage_test.go @@ -0,0 +1,80 @@ +//go:build full_test + +package commands_test + +import ( + "github.com/wailsapp/wails/v3/internal/commands" + "github.com/wailsapp/wails/v3/internal/s" + "testing" +) + +func Test_generateAppImage(t *testing.T) { + + tests := []struct { + name string + options *commands.GenerateAppImageOptions + wantErr bool + setup func() + teardown func() + }{ + { + name: "Should fail if binary path is not provided", + options: &commands.GenerateAppImageOptions{}, + wantErr: true, + }, + { + name: "Should fail if Icon is not provided", + options: &commands.GenerateAppImageOptions{ + Binary: "testapp", + }, + wantErr: true, + }, + + { + name: "Should fail if desktop file is not provided", + options: &commands.GenerateAppImageOptions{ + Binary: "testapp", + Icon: "testicon", + }, + wantErr: true, + }, + { + name: "Should work if inputs are valid", + options: &commands.GenerateAppImageOptions{ + Binary: "testapp", + Icon: "appicon.png", + DesktopFile: "testapp.desktop", + }, + setup: func() { + // Compile the test application + s.CD("appimage_testfiles") + testDir := s.CWD() + _, err := s.EXEC(`go build -ldflags="-s -w" -o testapp`) + if err != nil { + t.Fatal(err) + } + s.DEFER(func() { + s.CD(testDir) + s.RM("testapp") + s.RM("testapp-x86_64.AppImage") + }) + }, + teardown: func() { + s.CALLDEFER() + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.setup != nil { + tt.setup() + } + if err := commands.GenerateAppImage(tt.options); (err != nil) != tt.wantErr { + t.Errorf("generateAppImage() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.teardown != nil { + tt.teardown() + } + }) + } +} diff --git a/v3/internal/commands/appimage_testfiles/appicon.png b/v3/internal/commands/appimage_testfiles/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..63617fe4f746b8a878bd5f44725f4f317b9d9850 GIT binary patch literal 132625 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", + X: rand.Intn(1000), + Y: rand.Intn(800), + IgnoreMouseEvents: true, + BackgroundType: application.BackgroundTypeTransparent, + Mac: application.MacWindow{ + InvisibleTitleBarHeight: 50, + }, + }).Show() + windowCounter++ + }) + if runtime.GOOS == "darwin" { + myMenu.Add("New WebviewWindow (MacTitleBarHiddenInset)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Mac: application.MacWindow{ + TitleBar: application.MacTitleBarHiddenInset, + InvisibleTitleBarHeight: 25, + }, + }). + SetBackgroundColour(application.NewRGB(33, 37, 41)). + SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). + SetRelativePosition(rand.Intn(1000), rand.Intn(800)). + SetHTML("

A MacTitleBarHiddenInset WebviewWindow example

"). + Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (MacTitleBarHiddenInsetUnified)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Mac: application.MacWindow{ + TitleBar: application.MacTitleBarHiddenInsetUnified, + InvisibleTitleBarHeight: 50, + }, + }). + SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). + SetRelativePosition(rand.Intn(1000), rand.Intn(800)). + SetHTML("

A MacTitleBarHiddenInsetUnified WebviewWindow example

"). + Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (MacTitleBarHidden)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Mac: application.MacWindow{ + TitleBar: application.MacTitleBarHidden, + InvisibleTitleBarHeight: 25, + }, + }). + SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). + SetRelativePosition(rand.Intn(1000), rand.Intn(800)). + SetHTML("

A MacTitleBarHidden WebviewWindow example

"). + Show() + windowCounter++ + }) + } + if runtime.GOOS == "windows" { + myMenu.Add("New WebviewWindow (Mica)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Mica, + }, + }).Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (Acrylic)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Acrylic, + }, + }).Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (Tabbed)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Tabbed, + }, + }).Show() + windowCounter++ + }) + } + + sizeMenu := menu.AddSubmenu("Size") + sizeMenu.Add("Set Size (800,600)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetSize(800, 600) + }) + }) + + sizeMenu.Add("Set Size (Random)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetSize(rand.Intn(800)+200, rand.Intn(600)+200) + }) + }) + sizeMenu.Add("Set Min Size (200,200)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetMinSize(200, 200) + }) + }) + sizeMenu.Add("Set Max Size (600,600)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetFullscreenButtonEnabled(false) + w.SetMaxSize(600, 600) + }) + }) + sizeMenu.Add("Get Current WebviewWindow Size").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + width, height := w.Size() + application.InfoDialog().SetTitle("Current WebviewWindow Size").SetMessage("Width: " + strconv.Itoa(width) + " Height: " + strconv.Itoa(height)).Show() + }) + }) + + sizeMenu.Add("Reset Min Size").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetMinSize(0, 0) + }) + }) + + sizeMenu.Add("Reset Max Size").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetMaxSize(0, 0) + w.SetFullscreenButtonEnabled(true) + }) + }) + positionMenu := menu.AddSubmenu("Position") + positionMenu.Add("Set Relative Position (0,0)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetRelativePosition(0, 0) + }) + }) + positionMenu.Add("Set Relative Position (Random)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetRelativePosition(rand.Intn(1000), rand.Intn(800)) + }) + }) + + positionMenu.Add("Get Relative Position").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + x, y := w.RelativePosition() + application.InfoDialog().SetTitle("Current WebviewWindow Position").SetMessage("X: " + strconv.Itoa(x) + " Y: " + strconv.Itoa(y)).Show() + }) + }) + + positionMenu.Add("Set Absolute Position (0,0)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetAbsolutePosition(0, 0) + }) + }) + + positionMenu.Add("Set Absolute Position (Random)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetAbsolutePosition(rand.Intn(1000), rand.Intn(800)) + }) + }) + + positionMenu.Add("Get Absolute Position").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + x, y := w.AbsolutePosition() + application.InfoDialog().SetTitle("Current WebviewWindow Position").SetMessage("X: " + strconv.Itoa(x) + " Y: " + strconv.Itoa(y)).Show() + }) + }) + + positionMenu.Add("Center").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Center() + }) + }) + stateMenu := menu.AddSubmenu("State") + stateMenu.Add("Minimise (for 2 secs)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Minimise() + time.Sleep(2 * time.Second) + w.Restore() + }) + }) + stateMenu.Add("Maximise").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Maximise() + }) + }) + stateMenu.Add("Fullscreen").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Fullscreen() + }) + }) + stateMenu.Add("UnFullscreen").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.UnFullscreen() + }) + }) + stateMenu.Add("Restore").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Restore() + }) + }) + stateMenu.Add("Hide (for 2 seconds)").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.Hide() + time.Sleep(2 * time.Second) + w.Show() + }) + }) + stateMenu.Add("Always on Top").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetAlwaysOnTop(true) + }) + }) + stateMenu.Add("Not always on Top").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetAlwaysOnTop(false) + }) + }) + stateMenu.Add("Google.com").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetURL("https://google.com") + }) + }) + stateMenu.Add("wails.io").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetURL("https://wails.io") + }) + }) + stateMenu.Add("Get Primary Screen").OnClick(func(ctx *application.Context) { + screen, err := app.GetPrimaryScreen() + if err != nil { + application.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() + return + } + msg := fmt.Sprintf("Screen: %+v", screen) + application.InfoDialog().SetTitle("Primary Screen").SetMessage(msg).Show() + }) + stateMenu.Add("Get Screens").OnClick(func(ctx *application.Context) { + screens, err := app.GetScreens() + if err != nil { + application.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() + return + } + for _, screen := range screens { + msg := fmt.Sprintf("Screen: %+v", screen) + application.InfoDialog().SetTitle(fmt.Sprintf("Screen %s", screen.ID)).SetMessage(msg).Show() + } + }) + stateMenu.Add("Get Screen for WebviewWindow").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + screen, err := w.GetScreen() + if err != nil { + application.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() + return + } + msg := fmt.Sprintf("Screen: %+v", screen) + application.InfoDialog().SetTitle(fmt.Sprintf("Screen %s", screen.ID)).SetMessage(msg).Show() + }) + }) + stateMenu.Add("Disable for 5s").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + w.SetEnabled(false) + time.Sleep(5 * time.Second) + w.SetEnabled(true) + }) + }) + + if runtime.GOOS == "windows" { + stateMenu.Add("Flash Start").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + time.Sleep(2 * time.Second) + w.Flash(true) + }) + }) + } + + printMenu := menu.AddSubmenu("Print") + printMenu.Add("Print").OnClick(func(ctx *application.Context) { + currentWindow(func(w *application.WebviewWindow) { + _ = w.Print() + }) + }) + + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + BackgroundColour: application.NewRGB(33, 37, 41), + Mac: application.MacWindow{ + DisableShadow: true, + }, + }) + + app.SetMenu(menu) + err := app.Run() + + if err != nil { + log.Fatal(err) + } + +} diff --git a/v3/internal/commands/appimage_testfiles/testapp.desktop b/v3/internal/commands/appimage_testfiles/testapp.desktop new file mode 100644 index 00000000..27bbed87 --- /dev/null +++ b/v3/internal/commands/appimage_testfiles/testapp.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Name=testapp +Exec=testapp +Icon=appicon +Categories=Development; +Terminal=false +Keywords=wails +Version=1.0 +StartupNotify=false diff --git a/v3/internal/commands/dot_desktop.go b/v3/internal/commands/dot_desktop.go index 0fd674d9..1e76163a 100644 --- a/v3/internal/commands/dot_desktop.go +++ b/v3/internal/commands/dot_desktop.go @@ -35,9 +35,7 @@ func (d *DotDesktopOptions) asBytes() []byte { if d.Icon != "" { buf.WriteString(fmt.Sprintf("Icon=%s\n", d.Icon)) } - if d.Categories != "" { - buf.WriteString(fmt.Sprintf("Categories=%s\n", d.Categories)) - } + buf.WriteString(fmt.Sprintf("Categories=%s\n", d.Categories)) if d.Comment != "" { buf.WriteString(fmt.Sprintf("Comment=%s\n", d.Comment)) } diff --git a/v3/internal/commands/linuxdeploy-plugin-gtk.sh b/v3/internal/commands/linuxdeploy-plugin-gtk.sh new file mode 100644 index 00000000..51c1231d --- /dev/null +++ b/v3/internal/commands/linuxdeploy-plugin-gtk.sh @@ -0,0 +1,376 @@ +#! /usr/bin/env bash + +# Source: https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh +# License: MIT (https://github.com/linuxdeploy/linuxdeploy-plugin-gtk/blob/master/LICENSE.txt) + +# GTK3 environment variables: https://developer.gnome.org/gtk3/stable/gtk-running.html +# GTK4 environment variables: https://developer.gnome.org/gtk4/stable/gtk-running.html + +# abort on all errors +set -e + +if [ "$DEBUG" != "" ]; then + set -x + verbose="--verbose" +fi + +SCRIPT="$(basename "$(readlink -f "$0")")" + +show_usage() { + echo "Usage: $SCRIPT --appdir " + echo + echo "Bundles resources for applications that use GTK into an AppDir" + echo + echo "Required variables:" + echo " LINUXDEPLOY=\".../linuxdeploy\" path to linuxdeploy (e.g., AppImage); set automatically when plugin is run directly by linuxdeploy" + echo + echo "Optional variables:" + echo " DEPLOY_GTK_VERSION (major version of GTK to deploy, e.g. '2', '3' or '4'; auto-detect by default)" +} + +variable_is_true() { + local var="$1" + + if [ -n "$var" ] && { [ "$var" == "true" ] || [ "$var" -gt 0 ]; } 2> /dev/null; then + return 0 # true + else + return 1 # false + fi +} + +get_pkgconf_variable() { + local variable="$1" + local library="$2" + local default_value="$3" + + pkgconfig_ret="$("$PKG_CONFIG" --variable="$variable" "$library")" + if [ -n "$pkgconfig_ret" ]; then + echo "$pkgconfig_ret" + elif [ -n "$default_value" ]; then + echo "$default_value" + else + echo "$0: there is no '$variable' variable for '$library' library." > /dev/stderr + echo "Please check the '$library.pc' file is present in \$PKG_CONFIG_PATH (you may need to install the appropriate -dev/-devel package)." > /dev/stderr + exit 1 + fi +} + +copy_tree() { + local src=("${@:1:$#-1}") + local dst="${*:$#}" + + for elem in "${src[@]}"; do + mkdir -p "${dst::-1}$elem" + cp "$elem" --archive --parents --target-directory="$dst" $verbose + done +} + +copy_lib_tree() { + # The source lib directory could be /usr/lib, /usr/lib64, or /usr/lib/x86_64-linux-gnu + # Therefore, when copying lib directories, we need to transform that target path + # to a consistent /usr/lib + local src=("${@:1:$#-1}") + local dst="${*:$#}" + + for elem in "${src[@]}"; do + mkdir -p "${dst::-1}${elem/$LD_GTK_LIBRARY_PATH//usr/lib}" + pushd "$LD_GTK_LIBRARY_PATH" + cp "$(realpath --relative-to="$LD_GTK_LIBRARY_PATH" "$elem")" --archive --parents --target-directory="$dst/usr/lib" $verbose + popd + done +} + +get_triplet_path() { + if command -v dpkg-architecture > /dev/null; then + echo "/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + fi +} + + + +search_library_path() { + PATH_ARRAY=( + "$(get_triplet_path)" + "/usr/lib64" + "/usr/lib" + ) + + for path in "${PATH_ARRAY[@]}"; do + if [ -d "$path" ]; then + echo "$path" + return 0 + fi + done +} + +search_tool() { + local tool="$1" + local directory="$2" + + if command -v "$tool"; then + return 0 + fi + + PATH_ARRAY=( + "$(get_triplet_path)/$directory/$tool" + "/usr/lib64/$directory/$tool" + "/usr/lib/$directory/$tool" + "/usr/bin/$tool" + "/usr/bin/$tool-64" + "/usr/bin/$tool-32" + ) + + for path in "${PATH_ARRAY[@]}"; do + if [ -x "$path" ]; then + echo "$path" + return 0 + fi + done +} + +DEPLOY_GTK_VERSION="${DEPLOY_GTK_VERSION:-0}" # When not set by user, this variable use the integer '0' as a sentinel value +APPDIR= + +while [ "$1" != "" ]; do + case "$1" in + --plugin-api-version) + echo "0" + exit 0 + ;; + --appdir) + APPDIR="$2" + shift + shift + ;; + --help) + show_usage + exit 0 + ;; + *) + echo "Invalid argument: $1" + echo + show_usage + exit 1 + ;; + esac +done + +if [ "$APPDIR" == "" ]; then + show_usage + exit 1 +fi + +APPDIR="$(realpath "$APPDIR")" +mkdir -p "$APPDIR" + +. /etc/os-release +if [ "$ID" = "debian" ] || [ "$ID" = "ubuntu" ]; then + if ! command -v dpkg-architecture &>/dev/null; then + echo -e "$0: dpkg-architecture not found.\nInstall dpkg-dev then re-run the plugin." + exit 1 + fi +fi + +if command -v pkgconf > /dev/null; then + PKG_CONFIG="pkgconf" +elif command -v pkg-config > /dev/null; then + PKG_CONFIG="pkg-config" +else + echo "$0: pkg-config/pkgconf not found in PATH, aborting" + exit 1 +fi + +# GTK's library path *must not* have a trailing slash for later parameter substitution to work properly +LD_GTK_LIBRARY_PATH="$(realpath "${LD_GTK_LIBRARY_PATH:-$(search_library_path)}")" + +if ! command -v find &>/dev/null && ! type find &>/dev/null; then + echo -e "$0: find not found.\nInstall findutils then re-run the plugin." + exit 1 +fi + +if [ -z "$LINUXDEPLOY" ]; then + echo -e "$0: LINUXDEPLOY environment variable is not set.\nDownload a suitable linuxdeploy AppImage, set the environment variable and re-run the plugin." + exit 1 +fi + +gtk_versions=0 # Count major versions of GTK when auto-detect GTK version +if [ "$DEPLOY_GTK_VERSION" -eq 0 ]; then + echo "Determining which GTK version to deploy" + while IFS= read -r -d '' file; do + if [ "$DEPLOY_GTK_VERSION" -ne 2 ] && ldd "$file" | grep -q "libgtk-x11-2.0.so"; then + DEPLOY_GTK_VERSION=2 + gtk_versions="$((gtk_versions+1))" + fi + if [ "$DEPLOY_GTK_VERSION" -ne 3 ] && ldd "$file" | grep -q "libgtk-3.so"; then + DEPLOY_GTK_VERSION=3 + gtk_versions="$((gtk_versions+1))" + fi + if [ "$DEPLOY_GTK_VERSION" -ne 4 ] && ldd "$file" | grep -q "libgtk-4.so"; then + DEPLOY_GTK_VERSION=4 + gtk_versions="$((gtk_versions+1))" + fi + done < <(find "$APPDIR/usr/bin" -executable -type f -print0) +fi + +if [ "$gtk_versions" -gt 1 ]; then + echo "$0: can not deploy multiple GTK versions at the same time." + echo "Please set DEPLOY_GTK_VERSION to {2, 3, 4}." + exit 1 +elif [ "$DEPLOY_GTK_VERSION" -eq 0 ]; then + echo "$0: failed to auto-detect GTK version." + echo "Please set DEPLOY_GTK_VERSION to {2, 3, 4}." + exit 1 +fi + +echo "Installing AppRun hook" +HOOKSDIR="$APPDIR/apprun-hooks" +HOOKFILE="$HOOKSDIR/linuxdeploy-plugin-gtk.sh" +mkdir -p "$HOOKSDIR" +cat > "$HOOKFILE" <<\EOF +#! /usr/bin/env bash + +COLOR_SCHEME="$(dbus-send --session --dest=org.freedesktop.portal.Desktop --type=method_call --print-reply --reply-timeout=1000 /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read 'string:org.freedesktop.appearance' 'string:color-scheme' 2> /dev/null | tail -n1 | cut -b35- | cut -d' ' -f2 || printf '')" +if [ -z "$COLOR_SCHEME" ]; then + COLOR_SCHEME="$(gsettings get org.gnome.desktop.interface color-scheme 2> /dev/null || printf '')" +fi +case "$COLOR_SCHEME" in + "1"|"'prefer-dark'") GTK_THEME_VARIANT="dark";; + "2"|"'prefer-light'") GTK_THEME_VARIANT="light";; + *) GTK_THEME_VARIANT="light";; +esac +APPIMAGE_GTK_THEME="${APPIMAGE_GTK_THEME:-"Adwaita:$GTK_THEME_VARIANT"}" # Allow user to override theme (discouraged) + +export APPDIR="${APPDIR:-"$(dirname "$(realpath "$0")")"}" # Workaround to run extracted AppImage +export GTK_DATA_PREFIX="$APPDIR" +export GTK_THEME="$APPIMAGE_GTK_THEME" # Custom themes are broken +export GDK_BACKEND=x11 # Crash with Wayland backend on Wayland +export XDG_DATA_DIRS="$APPDIR/usr/share:/usr/share:$XDG_DATA_DIRS" # g_get_system_data_dirs() from GLib +EOF + +echo "Installing GLib schemas" +# Note: schemasdir is undefined on Ubuntu 16.04 +glib_schemasdir="$(get_pkgconf_variable "schemasdir" "gio-2.0" "/usr/share/glib-2.0/schemas")" +copy_tree "$glib_schemasdir" "$APPDIR/" +glib-compile-schemas "$APPDIR/$glib_schemasdir" +cat >> "$HOOKFILE" <> "$HOOKFILE" <> "$HOOKFILE" < "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" + else + echo "WARNING: gtk-query-immodules-3.0 not found" + fi + if [ ! -f "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" ]; then + echo "WARNING: immodules.cache file is missing" + fi + sed -i "s|$gtk3_libdir/3.0.0/immodules/||g" "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" + ;; + 4) + echo "Installing GTK 4.0 modules" + gtk4_exec_prefix="$(get_pkgconf_variable "exec_prefix" "gtk4" "/usr")" + gtk4_libdir="$(get_pkgconf_variable "libdir" "gtk4")/gtk-4.0" + gtk4_path="$gtk4_libdir" + copy_lib_tree "$gtk4_libdir" "$APPDIR/" + cat >> "$HOOKFILE" <> "$HOOKFILE" < "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" +else + echo "WARNING: gdk-pixbuf-query-loaders not found" +fi +if [ ! -f "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" ]; then + echo "WARNING: loaders.cache file is missing" +fi +sed -i "s|$gdk_pixbuf_moduledir/||g" "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" + +echo "Copying more libraries" +gobject_libdir="$(get_pkgconf_variable "libdir" "gobject-2.0" "$LD_GTK_LIBRARY_PATH")" +gio_libdir="$(get_pkgconf_variable "libdir" "gio-2.0" "$LD_GTK_LIBRARY_PATH")" +librsvg_libdir="$(get_pkgconf_variable "libdir" "librsvg-2.0" "$LD_GTK_LIBRARY_PATH")" +pango_libdir="$(get_pkgconf_variable "libdir" "pango" "$LD_GTK_LIBRARY_PATH")" +pangocairo_libdir="$(get_pkgconf_variable "libdir" "pangocairo" "$LD_GTK_LIBRARY_PATH")" +pangoft2_libdir="$(get_pkgconf_variable "libdir" "pangoft2" "$LD_GTK_LIBRARY_PATH")" +FIND_ARRAY=( + "$gdk_libdir" "libgdk_pixbuf-*.so*" + "$gobject_libdir" "libgobject-*.so*" + "$gio_libdir" "libgio-*.so*" + "$librsvg_libdir" "librsvg-*.so*" + "$pango_libdir" "libpango-*.so*" + "$pangocairo_libdir" "libpangocairo-*.so*" + "$pangoft2_libdir" "libpangoft2-*.so*" +) +LIBRARIES=() +for (( i=0; i<${#FIND_ARRAY[@]}; i+=2 )); do + directory=${FIND_ARRAY[i]} + library=${FIND_ARRAY[i+1]} + while IFS= read -r -d '' file; do + LIBRARIES+=( "--library=$file" ) + done < <(find "$directory" \( -type l -o -type f \) -name "$library" -print0) +done + +env LINUXDEPLOY_PLUGIN_MODE=1 "$LINUXDEPLOY" --appdir="$APPDIR" "${LIBRARIES[@]}" + +# Create symbolic links as a workaround +# Details: https://github.com/linuxdeploy/linuxdeploy-plugin-gtk/issues/24#issuecomment-1030026529 +echo "Manually setting rpath for GTK modules" +PATCH_ARRAY=( + "$gtk3_immodulesdir" + "$gtk3_printbackendsdir" + "$gdk_pixbuf_moduledir" +) +for directory in "${PATCH_ARRAY[@]}"; do + while IFS= read -r -d '' file; do + ln $verbose -sf "${file/$LD_GTK_LIBRARY_PATH\//}" "$APPDIR/usr/lib" + done < <(find "$directory" -name '*.so' -print0) +done \ No newline at end of file diff --git a/v3/internal/commands/task.go b/v3/internal/commands/task.go index 5725d4db..e11608d7 100644 --- a/v3/internal/commands/task.go +++ b/v3/internal/commands/task.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "github.com/go-task/task/v3/errors" - "log" "os" "path/filepath" "strings" @@ -21,6 +20,11 @@ import ( // BuildSettings contains the CLI build settings var BuildSettings = map[string]string{} +func fatal(message string) { + pterm.Error.Println(message) + os.Exit(1) +} + type RunTaskOptions struct { Name string `pos:"1"` Help bool `name:"h" description:"shows Task usage"` @@ -111,7 +115,7 @@ func RunTask(options *RunTaskOptions, otherArgs []string) error { var listOptions = task.NewListOptions(options.List, options.ListAll, options.ListJSON) if err := listOptions.Validate(); err != nil { - log.Fatal(err) + fatal(err.Error()) } if (listOptions.ShouldListTasks()) && options.Silent { @@ -120,7 +124,7 @@ func RunTask(options *RunTaskOptions, otherArgs []string) error { } if err := e.Setup(); err != nil { - log.Fatal(err) + fatal(err.Error()) } if listOptions.ShouldListTasks() { diff --git a/v3/internal/s/s.go b/v3/internal/s/s.go new file mode 100644 index 00000000..82966aed --- /dev/null +++ b/v3/internal/s/s.go @@ -0,0 +1,417 @@ +package s + +import ( + "crypto/md5" + "fmt" + "github.com/google/shlex" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "strings" +) + +var ( + Output io.Writer = io.Discard + IndentSize int + originalOutput io.Writer + currentIndent int + dryRun bool + deferred []func() +) + +func checkError(err error) { + if err != nil { + println("\nERROR:", err.Error()) + os.Exit(1) + } +} + +func mute() { + originalOutput = Output + Output = io.Discard +} + +func unmute() { + Output = originalOutput +} + +func indent() { + currentIndent += IndentSize +} + +func unindent() { + currentIndent -= IndentSize +} + +func log(message string, args ...interface{}) { + indent := strings.Repeat(" ", currentIndent) + _, err := fmt.Fprintf(Output, indent+message+"\n", args...) + checkError(err) +} + +// RENAME a file or directory +func RENAME(source string, target string) { + log("RENAME %s -> %s", source, target) + err := os.Rename(source, target) + checkError(err) +} + +// MUSTDELETE a file. +func MUSTDELETE(filename string) { + log("DELETE %s", filename) + err := os.Remove(filepath.Join(CWD(), filename)) + checkError(err) +} + +// DELETE a file. +func DELETE(filename string) { + log("DELETE %s", filename) + _ = os.Remove(filepath.Join(CWD(), filename)) +} + +func CONTAINS(list string, item string) bool { + result := strings.Contains(list, item) + listTrimmed := list + if len(listTrimmed) > 30 { + listTrimmed = listTrimmed[:30] + "..." + } + log("CONTAINS %s in %s: %t", item, listTrimmed, result) + return result +} + +func SETENV(key string, value string) { + log("SETENV %s=%s", key, value) + err := os.Setenv(key, value) + checkError(err) +} + +func CD(dir string) { + err := os.Chdir(dir) + checkError(err) + log("CD %s", dir) +} +func MKDIR(path string, mode ...os.FileMode) { + var perms os.FileMode + perms = 0755 + if len(mode) == 1 { + perms = mode[0] + } + log("MKDIR %s (perms: %v)", path, perms) + err := os.MkdirAll(path, perms) + checkError(err) +} + +// ENDIR ensures that the path gets created if it doesn't exist +func ENDIR(path string, mode ...os.FileMode) { + var perms os.FileMode + perms = 0755 + if len(mode) == 1 { + perms = mode[0] + } + _ = os.MkdirAll(path, perms) +} + +// COPYDIR recursively copies a directory tree, attempting to preserve permissions. +// Source directory must exist, destination directory must *not* exist. +// Symlinks are ignored and skipped. +// Credit: https://gist.github.com/r0l1/92462b38df26839a3ca324697c8cba04 +func COPYDIR(src string, dst string) { + log("COPYDIR %s -> %s", src, dst) + src = filepath.Clean(src) + dst = filepath.Clean(dst) + + si, err := os.Stat(src) + checkError(err) + if !si.IsDir() { + checkError(fmt.Errorf("source is not a directory")) + } + + _, err = os.Stat(dst) + if err != nil && !os.IsNotExist(err) { + checkError(err) + } + if err == nil { + checkError(fmt.Errorf("destination already exists")) + } + + indent() + MKDIR(dst) + + entries, err := os.ReadDir(src) + checkError(err) + + for _, entry := range entries { + srcPath := filepath.Join(src, entry.Name()) + dstPath := filepath.Join(dst, entry.Name()) + + if entry.IsDir() { + COPYDIR(srcPath, dstPath) + } else { + // Skip symlinks. + if entry.Type()&os.ModeSymlink != 0 { + continue + } + + COPY(srcPath, dstPath) + } + } + unindent() +} + +func SYMLINK(source string, target string) { + // trim string to first 30 chars + var trimTarget = target + if len(trimTarget) > 30 { + trimTarget = trimTarget[:30] + "..." + } + log("SYMLINK %s -> %s", source, trimTarget) + err := os.Symlink(source, target) + checkError(err) +} + +// COPY file from source to target +func COPY(source string, target string) { + log("COPY %s -> %s", source, target) + src, err := os.Open(source) + checkError(err) + defer closefile(src) + if ISDIR(target) { + target = filepath.Join(target, filepath.Base(source)) + } + d, err := os.Create(target) + checkError(err) + _, err = io.Copy(d, src) + checkError(err) +} + +// Move file from source to target +func MOVE(source string, target string) { + // If target is a directory, append the source filename + if ISDIR(target) { + target = filepath.Join(target, filepath.Base(source)) + } + log("MOVE %s -> %s", source, target) + err := os.Rename(source, target) + checkError(err) +} + +func CWD() string { + result, err := os.Getwd() + checkError(err) + log("CWD %s", result) + return result +} + +func RMDIR(target string) { + log("RMDIR %s", target) + err := os.RemoveAll(target) + checkError(err) +} + +func RM(target string) { + log("RM %s", target) + err := os.Remove(target) + checkError(err) +} + +func ECHO(message string) { + println(message) +} + +func TOUCH(filepath string) { + log("TOUCH %s", filepath) + f, err := os.Create(filepath) + checkError(err) + closefile(f) +} + +func EXEC(command string) ([]byte, error) { + log("EXEC %s", command) + + // Split input using shlex + args, err := shlex.Split(command) + checkError(err) + // Execute command + cmd := exec.Command(args[0], args[1:]...) + cmd.Dir = CWD() + cmd.Env = os.Environ() + return cmd.CombinedOutput() +} + +func CHMOD(path string, mode os.FileMode) { + log("CHMOD %s %v", path, mode) + err := os.Chmod(path, mode) + checkError(err) +} + +// EXISTS - Returns true if the given path exists +func EXISTS(path string) bool { + _, err := os.Lstat(path) + log("EXISTS %s -> %t", path, err == nil) + return err == nil +} + +// ISDIR returns true if the given directory exists +func ISDIR(path string) bool { + fi, err := os.Lstat(path) + if err != nil { + return false + } + + return fi.Mode().IsDir() +} + +// ISDIREMPTY returns true if the given directory is empty +func ISDIREMPTY(dir string) bool { + + // CREDIT: https://stackoverflow.com/a/30708914/8325411 + f, err := os.Open(dir) + checkError(err) + defer closefile(f) + + _, err = f.Readdirnames(1) // Or f.Readdir(1) + if err == io.EOF { + return true + } + return false +} + +// ISFILE returns true if the given file exists +func ISFILE(path string) bool { + fi, err := os.Lstat(path) + if err != nil { + return false + } + + return fi.Mode().IsRegular() +} + +// SUBDIRS returns a list of subdirectories for the given directory +func SUBDIRS(rootDir string) []string { + var result []string + + // Iterate root dir + err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error { + checkError(err) + // If we have a directory, save it + if info.IsDir() { + result = append(result, path) + } + return nil + }) + checkError(err) + return result +} + +// SAVESTRING will create a file with the given string +func SAVESTRING(filename string, data string) { + log("SAVESTRING %s", filename) + mute() + SAVEBYTES(filename, []byte(data)) + unmute() +} + +// LOADSTRING returns the contents of the given filename as a string +func LOADSTRING(filename string) string { + log("LOADSTRING %s", filename) + mute() + data := LOADBYTES(filename) + unmute() + return string(data) +} + +// SAVEBYTES will create a file with the given string +func SAVEBYTES(filename string, data []byte) { + log("SAVEBYTES %s", filename) + err := os.WriteFile(filename, data, 0755) + checkError(err) +} + +// LOADBYTES returns the contents of the given filename as a string +func LOADBYTES(filename string) []byte { + log("LOADBYTES %s", filename) + data, err := os.ReadFile(filename) + checkError(err) + return data +} + +func closefile(f *os.File) { + err := f.Close() + checkError(err) +} + +// MD5FILE returns the md5sum of the given file +func MD5FILE(filename string) string { + f, err := os.Open(filename) + checkError(err) + defer closefile(f) + + h := md5.New() + _, err = io.Copy(h, f) + checkError(err) + + return fmt.Sprintf("%x", h.Sum(nil)) +} + +// Sub is the substitution type +type Sub map[string]string + +// REPLACEALL replaces all substitution keys with associated values in the given file +func REPLACEALL(filename string, substitutions Sub) { + log("REPLACEALL %s (%v)", filename, substitutions) + data := LOADSTRING(filename) + for old, newText := range substitutions { + data = strings.ReplaceAll(data, old, newText) + } + SAVESTRING(filename, data) +} + +func DOWNLOAD(url string, target string) { + log("DOWNLOAD %s -> %s", url, target) + // create HTTP client + resp, err := http.Get(url) + checkError(err) + defer resp.Body.Close() + + out, err := os.Create(target) + checkError(err) + defer out.Close() + + // Write the body to file + _, err = io.Copy(out, resp.Body) + checkError(err) +} + +func FINDFILES(root string, filenames ...string) []string { + var result []string + // Walk the root directory trying to find all the files + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + checkError(err) + // If we have a file, check if it is in the list + if info.Mode().IsRegular() { + for _, filename := range filenames { + if info.Name() == filename { + result = append(result, path) + } + } + } + return nil + }) + checkError(err) + log("FINDFILES in %s -> [%v]", root, strings.Join(result, ", ")) + return result +} + +func DEFER(fn func()) { + log("DEFER") + deferred = append(deferred, fn) +} + +func CALLDEFER() { + log("CALLDEFER") + for _, fn := range deferred { + fn() + } +} diff --git a/v3/internal/templates/_common/Taskfile.tmpl.yml b/v3/internal/templates/_common/Taskfile.tmpl.yml index d91458f0..8d2d6b96 100644 --- a/v3/internal/templates/_common/Taskfile.tmpl.yml +++ b/v3/internal/templates/_common/Taskfile.tmpl.yml @@ -287,6 +287,7 @@ tasks: create:appimage: summary: Creates an AppImage + dir: build/appimage platforms: [ linux ] deps: - task: build:linux @@ -294,44 +295,44 @@ tasks: PRODUCTION: "true" - task: generate:linux:dotdesktop cmds: - - chmod +x {{ "{{.BIN_DIR}}" }}/{{ "{{.APP_NAME}}" }} - - chmod +x build/appimage/build.sh - - sh: build/appimage/build.sh - env: - - APP_NAME: {{ "'{{.APP_NAME}}'" }} - - APP_BINARY: '{{ "{{.ROOT_DIR}}"}}/{{ "{{.BIN_DIR}}" }}/{{ "{{.APP_NAME}}" }}' - - ICON_PATH: '{{ "{{.ROOT_DIR}}"}}/build/appicon.png' - - DESKTOP_FILE: '{{ "{{.ROOT_DIR}}"}}/build/{{ "{{.APP_NAME}}" }}.desktop' + # Copy binary + icon to appimage dir + - cp {{ "{{.APP_BINARY}}" }} {{ "{{.APP_NAME}}" }} + - cp ../appicon.png appicon.png + # Generate AppImage + - wails3 generate appimage -binary {{ "{{.APP_NAME}}" }} -icon {{ "{{.ICON}}" }} -desktopfile {{ "{{.DESKTOP_FILE}}" }} -outputdir {{ "{{.OUTPUT_DIR}}" }} -builddir {{ "{{.ROOT_DIR}}" }}/build/appimage + vars: + APP_NAME: '{{ "{{.APP_NAME}}" }}' + APP_BINARY: '../../bin/{{ "{{.APP_NAME}}" }}' + ICON: '../appicon.png' + DESKTOP_FILE: '{{ "{{.APP_NAME}}" }}.desktop' + OUTPUT_DIR: '../../bin' - generate:linux:dotdesktop: - summary: Generates a `.desktop` file - dir: build - sources: - - "appicon.png" - generates: - - "{{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop" - cmds: - # Run `wails3 generate .desktop -help` for all the options - - | - wails3 generate .desktop - -name "{{ "{{.APP_NAME}}" }}" - -exec "{{ "{{.EXEC}}" }}" - -icon "{{ "{{.ICON}}" }}" - -outputfile {{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop - # -categories "Development;Graphics;" - # -comment "A comment" - # -terminal "true" - # -version "1.0" - # -genericname "Generic Name" - # -keywords "keyword1;keyword2;" - # -startupnotify "true" - # -mimetype "application/x-extension1;application/x-extension2;" + generate:linux:dotdesktop: + summary: Generates a `.desktop` file + dir: build + sources: + - "appicon.png" + generates: + - '{{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop' + cmds: + - mkdir -p {{ "{{.ROOT_DIR}}"}}/build/appimage + # Run `wails3 generate .desktop -help` for all the options + - wails3 generate .desktop -name "{{ "{{.APP_NAME}}" }}" -exec "{{ "{{.EXEC}}" }}" -icon "{{ "{{.ICON}}" }}" -outputfile {{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop -categories "{{ "{{.CATEGORIES}}" }}" + # -comment "A comment" + # -terminal "true" + # -version "1.0" + # -genericname "Generic Name" + # -keywords "keyword1;keyword2;" + # -startupnotify "true" + # -mimetype "application/x-extension1;application/x-extension2;" + + vars: + APP_NAME: '{{ "{{.APP_NAME}}" }}' + EXEC: '{{ "{{.APP_NAME}}" }}' + ICON: 'appicon' + CATEGORIES: 'Development;' + OUTPUTFILE: '{{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop' - vars: - APP_NAME: '-name \"{{ "{{.APP_NAME}}" }}\"' - EXEC: '{{ "{{.ROOT_DIR}}"}}/{{ "{{.BIN_DIR}}" }}/{{ "{{.APP_NAME}}" }}' - ICON: '{{ "{{.ROOT_DIR}}"}}/build/appicon.png' - OUTPUTFILE: '-outputfile {{ "{{.ROOT_DIR}}"}}/build/appimage/{{ "{{.APP_NAME}}" }}.desktop' ## -------------------------- Misc -------------------------- ##