@@ -38,8 +38,8 @@ const DevSpaceHelperBaseURL = "https://github.com/loft-sh/devspace/releases"
3838// DevSpaceHelperTempFolder is the local folder where we store the sync helper
3939const DevSpaceHelperTempFolder = "devspacehelper"
4040
41- // HelperBinaryRegEx is the regexp that finds the correct download link for the sync helper binary
42- var HelperBinaryRegEx = regexp . MustCompile ( `href="(\/loft-sh\/devspace\/releases\/download\/[^\/]*\/devspacehelper )"` )
41+ // helperBinaryRegEx is the regexp that finds the correct download link for the sync helper binary
42+ var helperBinaryRegEx = `href="(\/loft-sh\/devspace\/releases\/download\/[^\/]*\/%s )"`
4343
4444// DevSpaceHelperContainerPath is the path of the devspace helper in the container
4545const DevSpaceHelperContainerPath = "/tmp/devspacehelper"
@@ -247,7 +247,7 @@ func (serviceClient *client) isFatalSyncError(err error) bool {
247247}
248248
249249func (serviceClient * client ) startSync (pod * v1.Pod , container string , syncConfig * latest.SyncConfig , verbose bool , syncDone chan bool , customLog logpkg.Logger ) (* sync.Sync , error ) {
250- err := InjectDevSpaceHelper (serviceClient .client , pod , container , serviceClient .log )
250+ err := InjectDevSpaceHelper (serviceClient .client , pod , container , string ( syncConfig . Arch ), serviceClient .log )
251251 if err != nil {
252252 return nil , err
253253 }
@@ -441,18 +441,26 @@ func (serviceClient *client) startStream(pod *v1.Pod, container string, command
441441 return nil
442442}
443443
444- func InjectDevSpaceHelper (client kubectl.Client , pod * v1.Pod , container string , log logpkg.Logger ) error {
444+ func InjectDevSpaceHelper (client kubectl.Client , pod * v1.Pod , container string , arch string , log logpkg.Logger ) error {
445445 // Compare sync versions
446446 version := upgrade .GetRawVersion ()
447447 if version == "" {
448448 version = "latest"
449449 }
450+ if arch != "" {
451+ if latest .ContainerArchitecture (arch ) == latest .ContainerArchitectureAmd64 {
452+ arch = ""
453+ } else {
454+ arch = "-" + arch
455+ }
456+ }
450457
451458 // Check if sync is already in pod
459+ localHelperName := "devspacehelper" + arch
452460 stdout , _ , err := client .ExecBuffered (pod , container , []string {DevSpaceHelperContainerPath , "version" }, nil )
453461 if err != nil || version != string (stdout ) {
454462 // check if we can find it in the assets
455- helperBytes , err := assets .Asset ("release/" + DevSpaceHelperTempFolder )
463+ helperBytes , err := assets .Asset ("release/" + localHelperName )
456464 if err == nil {
457465 return injectSyncHelperFromBytes (client , pod , container , helperBytes )
458466 }
@@ -463,15 +471,15 @@ func InjectDevSpaceHelper(client kubectl.Client, pod *v1.Pod, container string,
463471 }
464472
465473 syncBinaryFolder := filepath .Join (homedir , constants .DefaultHomeDevSpaceFolder , DevSpaceHelperTempFolder , version )
466- filepath := filepath .Join (syncBinaryFolder , "devspacehelper" )
467474
468475 // Download sync helper if necessary
469- err = downloadSyncHelper (filepath , syncBinaryFolder , version , log )
476+ err = downloadSyncHelper (localHelperName , syncBinaryFolder , version , log )
470477 if err != nil {
471478 return errors .Wrap (err , "download devspace helper" )
472479 }
473480
474481 // Inject sync helper
482+ filepath := filepath .Join (syncBinaryFolder , localHelperName )
475483 err = injectSyncHelper (client , pod , container , filepath )
476484 if err != nil {
477485 return errors .Wrap (err , "inject devspace helper" )
@@ -481,7 +489,9 @@ func InjectDevSpaceHelper(client kubectl.Client, pod *v1.Pod, container string,
481489 return nil
482490}
483491
484- func downloadSyncHelper (filepath , syncBinaryFolder , version string , log logpkg.Logger ) error {
492+ func downloadSyncHelper (helperName , syncBinaryFolder , version string , log logpkg.Logger ) error {
493+ filepath := filepath .Join (syncBinaryFolder , helperName )
494+
485495 // Check if file exists
486496 _ , err := os .Stat (filepath )
487497 if err == nil {
@@ -491,7 +501,7 @@ func downloadSyncHelper(filepath, syncBinaryFolder, version string, log logpkg.L
491501 }
492502
493503 // download sha256 html
494- url := fmt .Sprintf ("https://github.com/loft-sh/devspace/releases/download/%s/devspacehelper .sha256" , version )
504+ url := fmt .Sprintf ("https://github.com/loft-sh/devspace/releases/download/%s/%s .sha256" , version , helperName )
495505 resp , err := http .Get (url )
496506 if err != nil {
497507 log .Warnf ("Couldn't retrieve helper sha256: %v" , err )
@@ -524,16 +534,16 @@ func downloadSyncHelper(filepath, syncBinaryFolder, version string, log logpkg.L
524534 }
525535
526536 // Make sync binary
527- log .Info ("Couldn't find devspacehelper , will try to download it now" )
537+ log .Infof ("Couldn't find %s , will try to download it now" , helperName )
528538 err = os .MkdirAll (syncBinaryFolder , 0755 )
529539 if err != nil {
530540 return errors .Wrap (err , "mkdir helper binary folder" )
531541 }
532542
533- return downloadFile (version , filepath )
543+ return downloadFile (version , filepath , helperName )
534544}
535545
536- func downloadFile (version string , filepath string ) error {
546+ func downloadFile (version string , filepath string , filename string ) error {
537547 // Create download url
538548 url := ""
539549 if version == "latest" {
@@ -553,9 +563,14 @@ func downloadFile(version string, filepath string) error {
553563 return errors .Wrap (err , "read body" )
554564 }
555565
556- matches := HelperBinaryRegEx .FindStringSubmatch (string (body ))
566+ regEx , err := regexp .Compile (fmt .Sprintf (helperBinaryRegEx , filename ))
567+ if err != nil {
568+ return err
569+ }
570+
571+ matches := regEx .FindStringSubmatch (string (body ))
557572 if len (matches ) != 2 {
558- return errors .Errorf ("Couldn 't find devspace helper in github release %s at url %s" , version , url )
573+ return errors .Errorf ("couldn 't find %s in github release %s at url %s" , filename , version , url )
559574 }
560575
561576 out , err := os .Create (filepath )
0 commit comments