@@ -49,23 +49,29 @@ type UIItem struct {
4949
5050
5151func main () {
52- appliances , err := getApplianceVersions ()
53- if err != nil {
54- fmt .Printf ("Error reading appliance versions: %v\n " , err )
55- return
56- }
57- uiState , err := getUIStateConfig ()
58- if err != nil {
59- fmt .Printf ("Error reading UI update config: %v\n " , err )
60- return
61- }
62- edited := checkAndUpdateContainers (appliances , & uiState )
63- if edited {
64- if err := saveUIStateConfig (uiState ); err != nil {
65- fmt .Printf ("Error writing UI update config: %v\n " , err )
66- }
52+ exists := checkBinaryExists ("podman" )
53+
54+ if ! exists {
55+ fmt .Printf ("You need to install podman to use this tool." )
6756 } else {
68- fmt .Println ("No changes." )
57+ appliances , err := getApplianceVersions ()
58+ if err != nil {
59+ fmt .Printf ("Error reading appliance versions: %v\n " , err )
60+ return
61+ }
62+ uiState , err := getUIStateConfig ()
63+ if err != nil {
64+ fmt .Printf ("Error reading UI update config: %v\n " , err )
65+ return
66+ }
67+ edited := checkAndUpdateContainers (appliances , & uiState )
68+ if edited {
69+ if err := saveUIStateConfig (uiState ); err != nil {
70+ fmt .Printf ("Error writing UI update config: %v\n " , err )
71+ }
72+ } else {
73+ fmt .Println ("No changes." )
74+ }
6975 }
7076}
7177
@@ -234,18 +240,13 @@ func insertUpgradeOption(index int, uiState *UIState, item UIItem, appliance str
234240 scriptPath = filepath .Join (homeDir , ".ipv6rs" , "upgrade.sh" )
235241 }
236242
237- var upgradeCommand string
238- if runtime .GOOS == "windows" {
239- upgradeCommand = fmt .Sprintf ("'%s', '%s', '%s', '%d'" , scriptPath , item .Title , appliance , newVersion )
240- } else {
241- upgradeCommand = fmt .Sprintf ("'%s' '%s' '%s' '%d'" , scriptPath , item .Title , appliance , newVersion )
242- }
243+ upgradeCommand := fmt .Sprintf ("'%s' '%s' '%s' '%d'" , scriptPath , item .Title , appliance , newVersion )
243244 terminalCommand := getShellCommand (upgradeCommand )
244-
245245 upgradeItem := UIItem {
246246 Title : "Upgrade" ,
247247 Exec : terminalCommand ,
248248 Icon : "UploadIcon" ,
249+ Hide : true ,
249250 }
250251
251252 if index >= 0 && index < len (uiState .Items ) {
@@ -259,28 +260,69 @@ func insertUpgradeOption(index int, uiState *UIState, item UIItem, appliance str
259260func getShellCommand (command string ) string {
260261 switch runtime .GOOS {
261262 case "windows" :
262- return fmt .Sprintf ("Start-Process powershell -ArgumentList '-NoExit', '-File', %s" , command )
263+ return fmt .Sprintf (`& '%s/viewer.exe' %s` , getConfigPath (), command )
263264 case "darwin" :
264- return fmt .Sprintf ("osascript -e 'tell application \" Terminal \" to do script \" %s \" '" , command )
265+ return fmt .Sprintf (`'%s/viewer' "%s"` , getConfigPath () , command )
265266 case "linux" :
266- return fmt .Sprintf ("gnome-terminal -- bash -c '%s; exec bash'" , command )
267+ return fmt .Sprintf (` '%s/viewer' "%s ; exec bash"` , getConfigPath () , command )
267268 default :
268269 fmt .Println ("Unsupported platform" )
269270 return ""
270271 }
271272}
272273
274+ func checkBinaryExists (binaryName string ) bool {
275+ if runtime .GOOS == "windows" && filepath .Ext (binaryName ) != ".exe" {
276+ binaryName += ".exe"
277+ }
278+
279+ _ , err := exec .LookPath (binaryName )
280+ if err != nil {
281+ commonPaths := []string {
282+ "/usr/local/bin/" ,
283+ "/usr/bin/" ,
284+ "/bin/" ,
285+ "/usr/local/bin/" ,
286+ "/opt/homebrew/bin/" ,
287+ "/opt/podman/bin/" ,
288+ "C:\\ Program Files (x86)\\ Podman\\ " ,
289+ "C:\\ Program Files\\ RedHat\\ Podman\\ " ,
290+ }
291+ for _ , path := range commonPaths {
292+ fullPath := filepath .Join (path , binaryName )
293+ if _ , err := os .Stat (fullPath ); err == nil {
294+ addPath (path )
295+ fmt .Printf ("Found '%s' at '%s'\n " , binaryName , fullPath )
296+ return true
297+ }
298+ }
299+
300+ return false
301+ }
302+ return true
303+ }
304+
273305func getPodmanExecutable () string {
274306 switch runtime .GOOS {
275307 case "windows" :
276308 return "podman.exe"
277309 case "linux" :
278310 return "podman"
279311 case "darwin" :
280- return "/opt/podman/bin/ podman"
312+ return "podman"
281313 default :
282314 fmt .Println ("Unsupported" )
283315 return ""
284316 }
285317}
286318
319+ func addPath (dirs ... string ) error {
320+ originalPath := os .Getenv ("PATH" )
321+ additionalPath := strings .Join (dirs , string (os .PathListSeparator ))
322+ newPath := originalPath + string (os .PathListSeparator ) + additionalPath
323+ if err := os .Setenv ("PATH" , newPath ); err != nil {
324+ return err
325+ }
326+ return nil
327+ }
328+
0 commit comments