@@ -24,6 +24,17 @@ interface CLIUpgradeOptions {
24
24
params : Record < string , any > ;
25
25
}
26
26
27
+ interface UpgradeControllerOptions {
28
+ /** The repo or url */
29
+ repoUrl ?: string ;
30
+ /** If downgrades are allowed */
31
+ forceDowngrade : boolean ;
32
+ /** If controller is currently running */
33
+ controllerRunning : boolean ;
34
+ /** Version to upgrade controller too */
35
+ version ?: string ;
36
+ }
37
+
27
38
export class Upgrade {
28
39
private readonly hostname = tools . getHostName ( ) ;
29
40
private readonly upload : Upload ;
@@ -652,23 +663,11 @@ export class Upgrade {
652
663
/**
653
664
* Upgrade the js-controller
654
665
*
655
- * @param repoUrl the repo or url
656
- * @param forceDowngrade if downgrades are allowed
657
- * @param controllerRunning if controller is currently running
666
+ * @param options additional information like if controller running, optional url, version
658
667
*/
659
- async upgradeController ( repoUrl : string , forceDowngrade : boolean , controllerRunning : boolean ) : Promise < void > {
660
- let sources : Record < string , any > ;
661
-
662
- try {
663
- const result = await getRepository ( { repoName : repoUrl , objects : this . objects } ) ;
664
- if ( ! result ) {
665
- return console . warn ( `Cannot get repository under "${ repoUrl } "` ) ;
666
- }
667
- sources = result ;
668
- } catch ( e ) {
669
- console . error ( e . message ) ;
670
- return this . processExit ( e instanceof IoBrokerError ? e . code : e ) ;
671
- }
668
+ async upgradeController ( options : UpgradeControllerOptions ) : Promise < void > {
669
+ const { repoUrl, forceDowngrade, controllerRunning, version } = options ;
670
+ let targetVersion = version ;
672
671
673
672
const installed = fs . readJSONSync ( `${ tools . getControllerDir ( ) } /io-package.json` ) ;
674
673
if ( ! installed || ! installed . common || ! installed . common . version ) {
@@ -680,63 +679,47 @@ export class Upgrade {
680
679
}
681
680
682
681
const controllerName = installed . common . name ;
683
- /** Repository entry of the controller */
684
- const repoController = sources [ controllerName ] ;
682
+ let sources : Record < string , ioBroker . RepositoryJsonAdapterContent > | undefined ;
685
683
686
- if ( ! repoController ) {
684
+ if ( targetVersion === undefined ) {
685
+ try {
686
+ const result = await getRepository ( { repoName : repoUrl , objects : this . objects } ) ;
687
+ if ( ! result ) {
688
+ return console . warn ( `Cannot get repository under "${ repoUrl } "` ) ;
689
+ }
690
+ sources = result ;
691
+ } catch ( e ) {
692
+ console . error ( e . message ) ;
693
+ return this . processExit ( e instanceof IoBrokerError ? e . code : e ) ;
694
+ }
695
+
696
+ /** Repository entry of the controller */
697
+ const repoController = sources [ controllerName ] ;
698
+ targetVersion = version ?? repoController . version ;
699
+ }
700
+
701
+ if ( ! targetVersion ) {
687
702
// no info for controller
688
703
return console . error ( `Cannot find this controller "${ controllerName } " in repository.` ) ;
689
704
}
690
705
691
- if ( repoController . version ) {
692
- if (
693
- ! forceDowngrade &&
694
- ( repoController . version === installed . common . version ||
695
- tools . upToDate ( repoController . version , installed . common . version ) )
696
- ) {
697
- console . log (
698
- `Host "${ this . hostname } "${
699
- this . hostname . length < 15 ? new Array ( 15 - this . hostname . length ) . join ( ' ' ) : ''
700
- } is up to date.`,
701
- ) ;
702
- } else if ( controllerRunning ) {
703
- console . warn ( `Controller is running. Please stop ioBroker first.` ) ;
704
- } else {
705
- console . log ( `Update ${ controllerName } from @${ installed . common . version } to @${ repoController . version } ` ) ;
706
- // Get the controller from website
707
- await this . install . downloadPacket ( sources , `${ controllerName } @${ repoController . version } ` , {
708
- stopDb : true ,
709
- } ) ;
710
- }
706
+ if (
707
+ ! forceDowngrade &&
708
+ ( targetVersion === installed . common . version || tools . upToDate ( targetVersion , installed . common . version ) )
709
+ ) {
710
+ console . log (
711
+ `Host "${ this . hostname } "${
712
+ this . hostname . length < 15 ? new Array ( 15 - this . hostname . length ) . join ( ' ' ) : ''
713
+ } is up to date.`,
714
+ ) ;
715
+ } else if ( controllerRunning ) {
716
+ console . warn ( `Controller is running. Please stop ioBroker first.` ) ;
711
717
} else {
712
- const ioPack = await tools . getJsonAsync ( repoController . meta ) ;
713
- if ( ( ! ioPack || ! ioPack . common ) && ! forceDowngrade ) {
714
- return console . warn (
715
- `Cannot read version. Write "${ tools . appName } upgrade self --force" to upgrade controller anyway.` ,
716
- ) ;
717
- }
718
- let version = ioPack ?. common ? ioPack . common . version : '' ;
719
- if ( version ) {
720
- version = `@${ version } ` ;
721
- }
722
-
723
- if (
724
- ( ioPack ?. common && ioPack . common . version === installed . common . version ) ||
725
- ( ! forceDowngrade && ioPack ?. common && tools . upToDate ( ioPack . common . version , installed . common . version ) )
726
- ) {
727
- console . log (
728
- `Host "${ this . hostname } "${
729
- this . hostname . length < 15 ? new Array ( 15 - this . hostname . length ) . join ( ' ' ) : ''
730
- } is up to date.`,
731
- ) ;
732
- } else if ( controllerRunning ) {
733
- console . warn ( `Controller is running. Please stop ioBroker first.` ) ;
734
- } else {
735
- const name = ioPack ?. common ?. name || controllerName ;
736
- console . log ( `Update ${ name } from @${ installed . common . version } to ${ version } ` ) ;
737
- // Get the controller from website
738
- await this . install . downloadPacket ( sources , name + version , { stopDb : true } ) ;
739
- }
718
+ console . log ( `Update ${ controllerName } from @${ installed . common . version } to @${ targetVersion } ` ) ;
719
+ // Get the controller from website
720
+ await this . install . downloadPacket ( sources , `${ controllerName } @${ targetVersion } ` , {
721
+ stopDb : true ,
722
+ } ) ;
740
723
}
741
724
}
742
725
}
0 commit comments