@@ -11,21 +11,29 @@ import (
1111 "github.com/flatrun/agent/internal/api"
1212 "github.com/flatrun/agent/internal/watcher"
1313 "github.com/flatrun/agent/pkg/config"
14+ "github.com/flatrun/agent/pkg/updater"
1415 "github.com/flatrun/agent/pkg/version"
1516)
1617
1718func main () {
19+ if len (os .Args ) > 1 {
20+ switch os .Args [1 ] {
21+ case "update" :
22+ handleUpdate (os .Args [2 :])
23+ return
24+ case "version" :
25+ printVersion ()
26+ return
27+ }
28+ }
29+
1830 configPath := flag .String ("config" , "config.yml" , "Path to configuration file" )
1931 showVersion := flag .Bool ("version" , false , "Print version information" )
2032 flag .Parse ()
2133
2234 if * showVersion {
23- info := version .Get ()
24- fmt .Printf ("Flatrun Agent\n " )
25- fmt .Printf ("Version: %s\n " , info .Version )
26- fmt .Printf ("Build Time: %s\n " , info .BuildTime )
27- fmt .Printf ("Git Commit: %s\n " , info .GitCommit )
28- os .Exit (0 )
35+ printVersion ()
36+ return
2937 }
3038
3139 cfg , err := config .Load (* configPath )
@@ -59,3 +67,91 @@ func main() {
5967 log .Println ("Shutting down Flatrun Agent..." )
6068 _ = apiServer .Stop ()
6169}
70+
71+ func printVersion () {
72+ info := version .Get ()
73+ fmt .Printf ("Flatrun Agent\n " )
74+ fmt .Printf ("Version: %s\n " , info .Version )
75+ fmt .Printf ("Build Time: %s\n " , info .BuildTime )
76+ fmt .Printf ("Git Commit: %s\n " , info .GitCommit )
77+ }
78+
79+ func handleUpdate (args []string ) {
80+ updateFlags := flag .NewFlagSet ("update" , flag .ExitOnError )
81+ checkOnly := updateFlags .Bool ("check" , false , "Check for updates without installing" )
82+ force := updateFlags .Bool ("force" , false , "Force update even if on latest version" )
83+ restart := updateFlags .Bool ("restart" , false , "Restart service after update" )
84+ rollback := updateFlags .Bool ("rollback" , false , "Rollback to previous version" )
85+
86+ updateFlags .Usage = func () {
87+ fmt .Println ("Usage: flatrun-agent update [options]" )
88+ fmt .Println ()
89+ fmt .Println ("Options:" )
90+ updateFlags .PrintDefaults ()
91+ fmt .Println ()
92+ fmt .Println ("Examples:" )
93+ fmt .Println (" flatrun-agent update --check Check for available updates" )
94+ fmt .Println (" flatrun-agent update Download and install latest version" )
95+ fmt .Println (" flatrun-agent update --restart Update and restart the service" )
96+ fmt .Println (" flatrun-agent update --rollback Rollback to previous version" )
97+ }
98+
99+ if err := updateFlags .Parse (args ); err != nil {
100+ os .Exit (1 )
101+ }
102+
103+ if * rollback {
104+ fmt .Println ("Rolling back to previous version..." )
105+ if err := updater .Rollback (); err != nil {
106+ fmt .Printf ("Error: %v\n " , err )
107+ os .Exit (1 )
108+ }
109+ fmt .Println ("Rollback successful" )
110+ fmt .Println ("Restart the service to apply: sudo systemctl restart flatrun-agent" )
111+ return
112+ }
113+
114+ if * checkOnly {
115+ result , err := updater .CheckForUpdate ()
116+ if err != nil {
117+ fmt .Printf ("Error: %v\n " , err )
118+ os .Exit (1 )
119+ }
120+ fmt .Printf ("Current version: %s\n " , result .CurrentVersion )
121+ fmt .Printf ("Latest version: %s\n " , result .LatestVersion )
122+ if result .UpdateAvailable {
123+ fmt .Println ("Update available!" )
124+ fmt .Println ("Run 'flatrun-agent update' to install" )
125+ } else {
126+ fmt .Println ("Already up to date" )
127+ }
128+ return
129+ }
130+
131+ result , err := updater .Update (* force )
132+ if err != nil {
133+ fmt .Printf ("Error: %v\n " , err )
134+ os .Exit (1 )
135+ }
136+
137+ if ! result .UpdateAvailable && ! * force {
138+ fmt .Printf ("Already up to date (v%s)\n " , result .CurrentVersion )
139+ return
140+ }
141+
142+ if result .Installed {
143+ fmt .Printf ("Successfully updated to v%s\n " , result .LatestVersion )
144+
145+ if * restart {
146+ fmt .Println ("Restarting service..." )
147+ if err := updater .RestartService (); err != nil {
148+ fmt .Printf ("Failed to restart service: %v\n " , err )
149+ fmt .Println ("Please restart manually: sudo systemctl restart flatrun-agent" )
150+ os .Exit (1 )
151+ }
152+ fmt .Println ("Service restarted successfully" )
153+ } else {
154+ fmt .Println ("Restart the service to apply: sudo systemctl restart flatrun-agent" )
155+ }
156+ }
157+ }
0 commit comments