@@ -20,6 +20,7 @@ import (
2020func updateNode (ctx * cli.Context ) error {
2121 name := ctx .Args ().First ()
2222 tags := ctx .String ("tags" )
23+ force := ctx .Bool ("downgrade" )
2324 version := strings .TrimSpace (ctx .String ("version" ))
2425 nodes , err := util .ParseNodesFromNameAndTags (name , tags )
2526 if err != nil {
@@ -43,13 +44,13 @@ func updateNode(ctx *cli.Context) error {
4344 color .Green ("Updating darknodes..." )
4445 errs := make ([]error , len (nodes ))
4546 phi .ParForAll (nodes , func (i int ) {
46- errs [i ] = updateSingleNode (nodes [i ], version )
47+ errs [i ] = updateSingleNode (nodes [i ], version , force )
4748 })
4849 return util .HandleErrs (errs )
4950}
5051
51- func updateSingleNode (name , ver string ) error {
52- v , _ := util .Version (name )
52+ func updateSingleNode (name , ver string , force bool ) error {
53+ v := util .Version (name )
5354 curVersion , err := version .NewVersion (strings .TrimSpace (v ))
5455 if err != nil {
5556 return err
@@ -60,10 +61,28 @@ func updateSingleNode(name, ver string) error {
6061 case 0 :
6162 color .Green ("darknode [%v] is running version [%v] already." , name , ver )
6263 case 1 :
63- color .Red ("darknode [%v] is running with version %v, you cannot downgrade to a lower version %v" , name , curVersion .String (), newVersion .String ())
64+ if ! force {
65+ color .Red ("darknode [%v] is running with version %v, you cannot downgrade to a lower version %v" , name , curVersion .String (), newVersion .String ())
66+ return nil
67+ }
68+ if err := update (name , ver ); err != nil {
69+ color .Red ("cannot downgrade darknode %v, error = %v" , name , err )
70+ } else {
71+ color .Green ("[%s] has been downgraded to version %v" , name , ver )
72+ }
6473 default :
65- url := fmt .Sprintf ("https://github.com/renproject/darknode-release/releases/download/%v" , ver )
66- script := fmt .Sprintf (`mv ~/.darknode/bin/darknode ~/.darknode/bin/darknode-backup &&
74+ if err := update (name , ver ); err != nil {
75+ color .Red ("cannot update darknode %v, error = %v" , name , err )
76+ } else {
77+ color .Green ("[%s] has been updated to version %v" , name , ver )
78+ }
79+ }
80+ return nil
81+ }
82+
83+ func update (name , ver string ) error {
84+ url := fmt .Sprintf ("https://github.com/renproject/darknode-release/releases/download/%v" , ver )
85+ script := fmt .Sprintf (`mv ~/.darknode/bin/darknode ~/.darknode/bin/darknode-backup &&
6786curl -sL %v/darknode > ~/.darknode/bin/darknode &&
6887chmod +x ~/.darknode/bin/darknode &&
6988systemctl --user stop darknode &&
@@ -72,14 +91,7 @@ rm -rf ~/.darknode/db &&
7291mv ~/.darknode/db_bak ~/.darknode/db &&
7392echo %v > ~/.darknode/version &&
7493systemctl --user restart darknode` , url , ver )
75- err = util .RemoteRun (name , script )
76- if err != nil {
77- color .Red ("cannot update darknode %v, error = %v" , name , err )
78- } else {
79- color .Green ("[%s] has been updated to version %v" , name , ver )
80- }
81- }
82- return nil
94+ return util .RemoteRun (name , script )
8395}
8496
8597func validateVersion (version string ) error {
0 commit comments