11import json
22import time
3+ from typing import List
34from util .constants import SERVICE_VERSIONS
45from util .docker_helper import is_uvicorn_application_started , exec_command_on_container
56from util .postgres_helper import get_db_versions , wait_until_postgres_is_ready
@@ -13,22 +14,29 @@ def is_any_service_version_changed() -> bool:
1314
1415 any_service_updated = False
1516 for service , version in db_versions .items ():
16- db_version_int = _version_number_to_int (version )
17- current_version_int = _version_number_to_int (current_versions [service ])
18-
19- if db_version_int < current_version_int :
17+ if is_newer (version , current_versions [service ].lstrip ("v" )):
18+ print (service , flush = True )
2019 any_service_updated = True
21- elif db_version_int > current_version_int :
22- print (
23- f"Last version of { service } is newer than current version! Cannot update!" ,
24- flush = True ,
25- )
26- return False
20+ break
2721 return any_service_updated
2822
2923
30- def _version_number_to_int (version_number : str ) -> int :
31- return int (version_number .lstrip ("v" ).replace ("." , "" ))
24+ # v1 newer than v2 (e.g. 1.1.2 > 1.1.1)
25+ def is_newer (v1 : str , v2 : str ) -> bool :
26+ a = [int (x ) for x in v1 .split ("." )]
27+ b = [int (x ) for x in v2 .split ("." )]
28+ if len (a ) != len (b ) and len (a ) != 3 :
29+ raise Exception ("invalid version format" )
30+ return __is_newer_int (a , b )
31+
32+
33+ def __is_newer_int (v1 : List [int ], v2 : List [int ]) -> bool :
34+ for idx , _ in enumerate (v1 ):
35+ if v2 [idx ] > v1 [idx ]:
36+ return False
37+ elif v2 [idx ] < v1 [idx ]:
38+ return True
39+ return False
3240
3341
3442def updater_service_update_to_newest ():
0 commit comments