@@ -288,8 +288,13 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
288
288
if err != nil {
289
289
return nil , nil , err
290
290
}
291
+ // we also need to place ready file
292
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromOther )
293
+ if err != nil {
294
+ return nil , nil , err
295
+ }
291
296
292
- l = []Layer {* layer }
297
+ l = []Layer {* layer , * layerReady }
293
298
return l , manifest , nil
294
299
}
295
300
return s .getSnapshotContentLayer (ctx , gis )
@@ -301,8 +306,14 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
301
306
if err != nil {
302
307
return nil , nil , err
303
308
}
309
+ // we also need to place ready file
310
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromPrebuild )
311
+ if err != nil {
312
+ return nil , nil , err
313
+ }
314
+
315
+ l = []Layer {* layer , * layerReady }
304
316
305
- l = []Layer {* layer }
306
317
return l , manifest , nil
307
318
}
308
319
l , manifest , err = s .getPrebuildContentLayer (ctx , pis , true )
@@ -513,6 +524,8 @@ git log --pretty=%H -n 1 > /.workspace/prestophookdata/git_log_2.txt
513
524
cp /workspace/.gitpod/prebuild-log* /.workspace/prestophookdata/
514
525
`
515
526
527
+ var pvcEnabledFile = `PVC`
528
+
516
529
// version of this function for persistent volume claim feature
517
530
// we cannot use /workspace folder as when mounting /workspace folder through PVC
518
531
// it will mask anything that was in container layer, hence we are using /.workspace instead here
@@ -521,6 +534,7 @@ func contentDescriptorToLayerPVC(cdesc []byte) (*Layer, error) {
521
534
layers := []fileInLayer {
522
535
{& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
523
536
{& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace/.gitpod" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
537
+ {& tar.Header {Typeflag : tar .TypeReg , Name : "/.workspace/.gitpod/pvc" , Uid : 0 , Gid : 0 , Mode : 0775 , Size : int64 (len (pvcEnabledFile ))}, []byte (pvcEnabledFile )},
524
538
{& tar.Header {Typeflag : tar .TypeReg , Name : "/.supervisor/prestophook.sh" , Uid : 0 , Gid : 0 , Mode : 0775 , Size : int64 (len (prestophookScript ))}, []byte (prestophookScript )},
525
539
}
526
540
if len (cdesc ) > 0 {
@@ -530,6 +544,23 @@ func contentDescriptorToLayerPVC(cdesc []byte) (*Layer, error) {
530
544
return layerFromContent (layers ... )
531
545
}
532
546
547
+ func workspaceReadyLayerPVC (src csapi.WorkspaceInitSource ) (* Layer , error ) {
548
+ log .Infof ("workspaceReadyLayerPVC: %v" , src )
549
+ msg := csapi.WorkspaceReadyMessage {
550
+ Source : src ,
551
+ }
552
+ ctnt , err := json .Marshal (msg )
553
+ if err != nil {
554
+ return nil , err
555
+ }
556
+
557
+ return layerFromContent (
558
+ fileInLayer {& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
559
+ fileInLayer {& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace/.gitpod" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
560
+ fileInLayer {& tar.Header {Typeflag : tar .TypeReg , Name : "/.workspace/.gitpod/ready" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 , Size : int64 (len (ctnt ))}, []byte (ctnt )},
561
+ )
562
+ }
563
+
533
564
func workspaceReadyLayer (src csapi.WorkspaceInitSource ) (* Layer , error ) {
534
565
log .Infof ("workspaceReadyLayer: %v" , src )
535
566
msg := csapi.WorkspaceReadyMessage {
0 commit comments