mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 07:10:40 +08:00

* feat: attempt to support Zorin * chore: bump version * Add support for Gentoo * docs: update contributors * feat: test support for Fedora * chore: version bump * Update README.md * feat: major refactor * fix: config errors * fix: capitalisation and binding fix * fix: lint * fix: linting * config: eslint * fix: more lint fixes * fix: linting for hound * Even more fixes * chore: bump version * fix: eslintrc config * fix: renamed global logger * fix: Print stdout on error :rolleyes: * fix: add promises polyfill for the windows target * style: replace double quotes with single quotes * Update contributors * feat: significant overhaul of runtime * chore: Version Bump * Fix Masterminds/semver reference import path (case-sensitivity) * drop lsb_release Signed-off-by: Chronophylos <nikolai@chronophylos.com> * change DistributionID to NAME= Signed-off-by: Chronophylos <nikolai@chronophylos.com> * show distro id when creating a issue Signed-off-by: Chronophylos <nikolai@chronophylos.com> * fix assumption Signed-off-by: Chronophylos <nikolai@chronophylos.com> * docs: updated contributors * fix: add support back for ubuntu, redhat * chore: version bump * fix(linux): fedora & centos support * feat: gcc,npm,node versions on issues * linux working * darwin working * feat: show gcc, node, npm version on issue report * Delete npm-debug.log * fix: crashing typo * trim gcc string * chore: version bump * fix: gitbash fixes * chore: hotfix * fix: issue report * fix: typo * chore: hotfix version bump * 179 parrot distributionsupport (#181) * feat: parrot support && git push * feat: parrot support * feat: parrot support * fix: arch support * fix: gentoos support * Update README.md * Update README.md * chore: bump version * Linux db (#182) * feat: refactor linux distro detection * linux db updates * feat: add gccversioncommand + windows support * fix: build-essential * chore: linter fixes (#185) * 182 linux bd (#183) * fix: linuxdb.yaml entries * fix: typo * fix: yaml syntax error * 188 support distribution linux mint (#189) * chore: update linux db * chore: bump version * chore: merge webview back in * chore: rename webview for clarity * chore: add stale issue bot config * chore: add inprogress label * Azure Pipelines (#192) * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * chore: remove unused mewn file * chore: deduplicate library verificaation code * Update contributors * fix: undefined: webview during build * feat: VoidLinux support * Yaml bug (#207) * test: azure pipeline * fix: azure pipeline yaml * feat: elementary support * feat: opensuse support * fix: 0_setup.go line 27 * fix: 0_setup.go line 27 * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: yaml * fix: yaml * fix: yaml * fix: opensuse yaml * fix: opensuse * fix: opensuse * fix: opensuse * fix: opensuse * fix: string trim os osRelease field NAME * fix: 0_setup.go if err typo * test * test * fix: typo in linux.go * test: remove quotes from opensuse case * test: revert * test: "" * test: "" * test: "" * test: "" * fix: replace trim with replace * fix: drop 0_setup.go and run checks by system.go * fix: elementary os yaml name * fix: open suse yaml entry * fix: commented out result.Release = version * fix: commented out result.Release = version * fix: revert Replace to Trim * fix: Linux Mint yaml entry * fix: capitalize distros entries * fix: capitalize distros entries * fix: capitalize distros entries * test * test * fix: open suse yaml entry * fix: yaml entris * test * test * test * test * test * test * branch changing * fix: bug in setup process * debugging * debugging * debugging * debugging * fix: yaml entries & err == nil bug * Update prerequisites.go * fix: bug * fix: 0_setup.go * fix: yaml bug * fix: yaml bug * chore: bump version * Elementary support + readme update (#210) * test: azure pipeline * fix: azure pipeline yaml * feat: elementary support+readme udpate * fix: upgrade eslint * 215 support distribution kali (#219) * test: azure pipeline * fix: azure pipeline yaml * feat: kali linux support * feat: kali linux support * fix: allow 0 return types * duplicate code spotted (#221) * fix: duplicate code * chore: release v0.17.14-pre * chore: remove debug output * (FIX) 215 support distribution kali (#224) * fix: kali support * docs: add Mattn * feat: KDE neon support (#234) * chore: version bump * chore: remove some debug output * fix: binding more than one struct method (#245) * feat: add runtime typings * fix: multiple runtime fixes * manjaro (#248) * manjaro * Update go.mod * chore: version bump * fix: update runtime * chore: version bump * cmd/wails: report error status code to OS (#252) Fixes #251. * Update CONTRIBUTORS.md * chore: version bump * fix: importing runtime (#254) * chore: supress warnings * Patch for file dialog on OSX (#258) * Patch for file dialog on OSX * Update CONTRIBUTORS.md * 262 add wails shutdown method (#264) * feat: support close in bridge mode * feat: WailsShutdown callback Now handles proper shutdown through: * runtime.Window.Close() * Killing the main window * Ctrl-C * chore: version bump * fix: force install when node_modules missing (#268) * fix: detect encoding on windows (#266) * fix: linting * chore: bump version * Migrate tool (#270) Experimental migration tool for projects < v1.0.0 * chore: version bump * fix: add flag to fix windows builds (#272) * Bump version to v0.18.9-pre * 261 korean fonts (#273) * fix: linting * chore: bump version * fix: unicode text for Windows * release v0.18.10-pre * 274 support spaces in windows paths (#275) * fix: escape windows commands * fix: allow spaces in path to windres * Update go.mod * release v0.18.11-pre * 261 korean fonts (#276) * fix: linting * chore: bump version * fix: unicode text for Windows * fix: re-add webview_set_title * release v0.18.12-pre * hotfix: build issue for windows * fix: npm/node version reporting * fix: debug build should use terminal * fix: make binary name more os specific * Backport (#283) * Develop (#265) * Patch for file dialog on OSX * Update CONTRIBUTORS.md * 262 add wails shutdown method (#264) * feat: support close in bridge mode * feat: WailsShutdown callback Now handles proper shutdown through: * runtime.Window.Close() * Killing the main window * Ctrl-C * chore: version bump * chore: version bump * feat: adjust binary name for OS * fix: allow spaces in gcc path * feat: migrate command * fix: npm/node versions * fix: allow IE for serve * feat: go build script * fix: make runtime ES2015 compliant * fix: remove invoke patch * fix: allow any line endings * chore: remove legacy bridge files * chore: latest assets * v0.18.15-pre * fix: remove unicode flag * chore: bump version * release v0.19.0
146 lines
3.6 KiB
Go
146 lines
3.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
// ProgramHelper - Utility functions around installed applications
|
|
type ProgramHelper struct {
|
|
shell *ShellHelper
|
|
}
|
|
|
|
// NewProgramHelper - Creates a new ProgramHelper
|
|
func NewProgramHelper() *ProgramHelper {
|
|
return &ProgramHelper{
|
|
shell: NewShellHelper(),
|
|
}
|
|
}
|
|
|
|
// IsInstalled tries to determine if the given binary name is installed
|
|
func (p *ProgramHelper) IsInstalled(programName string) bool {
|
|
_, err := exec.LookPath(programName)
|
|
return err == nil
|
|
}
|
|
|
|
// Program - A struct to define an installed application/binary
|
|
type Program struct {
|
|
Name string `json:"name"`
|
|
Path string `json:"path"`
|
|
}
|
|
|
|
// FindProgram attempts to find the given program on the system.FindProgram
|
|
// Returns a struct with the name and path to the program
|
|
func (p *ProgramHelper) FindProgram(programName string) *Program {
|
|
path, err := exec.LookPath(programName)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
path, err = filepath.Abs(path)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return &Program{
|
|
Name: programName,
|
|
Path: path,
|
|
}
|
|
}
|
|
|
|
// GetFullPathToBinary returns the full path the the current binary
|
|
func (p *Program) GetFullPathToBinary() (string, error) {
|
|
return filepath.Abs(p.Path)
|
|
}
|
|
|
|
// Run will execute the program with the given parameters
|
|
// Returns stdout + stderr as strings and an error if one occurred
|
|
func (p *Program) Run(vars ...string) (stdout, stderr string, exitCode int, err error) {
|
|
command, err := p.GetFullPathToBinary()
|
|
if err != nil {
|
|
return "", "", 1, err
|
|
}
|
|
cmd := exec.Command(command, vars...)
|
|
var stdo, stde bytes.Buffer
|
|
cmd.Stdout = &stdo
|
|
cmd.Stderr = &stde
|
|
err = cmd.Run()
|
|
stdout = string(stdo.Bytes())
|
|
stderr = string(stde.Bytes())
|
|
|
|
// https://stackoverflow.com/questions/10385551/get-exit-code-go
|
|
if err != nil {
|
|
// try to get the exit code
|
|
if exitError, ok := err.(*exec.ExitError); ok {
|
|
ws := exitError.Sys().(syscall.WaitStatus)
|
|
exitCode = ws.ExitStatus()
|
|
} else {
|
|
exitCode = 1
|
|
if stderr == "" {
|
|
stderr = err.Error()
|
|
}
|
|
}
|
|
} else {
|
|
// success, exitCode should be 0 if go is ok
|
|
ws := cmd.ProcessState.Sys().(syscall.WaitStatus)
|
|
exitCode = ws.ExitStatus()
|
|
}
|
|
return
|
|
}
|
|
|
|
// InstallGoPackage installs the given Go package
|
|
func (p *ProgramHelper) InstallGoPackage(packageName string) error {
|
|
args := strings.Split("get "+packageName, " ")
|
|
_, stderr, err := p.shell.Run("go", args...)
|
|
if err != nil {
|
|
fmt.Println(stderr)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// InstallNPMPackage installs the given npm package
|
|
func (p *ProgramHelper) InstallNPMPackage(packageName string, save bool) error {
|
|
args := strings.Split("install "+packageName, " ")
|
|
if save {
|
|
args = append(args, "--save")
|
|
}
|
|
_, stderr, err := p.shell.Run("npm", args...)
|
|
if err != nil {
|
|
fmt.Println(stderr)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// RunCommand runs the given command
|
|
func (p *ProgramHelper) RunCommand(command string) error {
|
|
args := strings.Split(command, " ")
|
|
return p.RunCommandArray(args)
|
|
}
|
|
|
|
// RunCommandArray runs the command specified in the array
|
|
func (p *ProgramHelper) RunCommandArray(args []string, dir ...string) error {
|
|
program := args[0]
|
|
// TODO: Run FindProgram here and get the full path to the exe
|
|
program, err := exec.LookPath(program)
|
|
if err != nil {
|
|
fmt.Printf("ERROR: Looks like '%s' isn't installed. Please install and try again.", program)
|
|
return err
|
|
}
|
|
|
|
args = args[1:]
|
|
var stderr string
|
|
var stdout string
|
|
if len(dir) > 0 {
|
|
stdout, stderr, err = p.shell.RunInDirectory(dir[0], program, args...)
|
|
} else {
|
|
stdout, stderr, err = p.shell.Run(program, args...)
|
|
}
|
|
if err != nil {
|
|
fmt.Println(stderr)
|
|
fmt.Println(stdout)
|
|
}
|
|
return err
|
|
}
|