Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 49 additions & 18 deletions packages/orchestrator/cmd/copy-build/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/google/uuid"
"golang.org/x/sync/errgroup"

"github.com/e2b-dev/infra/packages/orchestrator/pkg/template/metadata"
Comment thread
arkamar marked this conversation as resolved.
"github.com/e2b-dev/infra/packages/shared/pkg/id"
"github.com/e2b-dev/infra/packages/shared/pkg/storage"
"github.com/e2b-dev/infra/packages/shared/pkg/storage/header"
Expand Down Expand Up @@ -221,32 +222,66 @@ func main() {

var filesToCopy []string

// Extract all files referenced by the build memfile header
buildMemfileHeaderPath := paths.MemfileHeader()

var memfileHeader *header.Header
// Metadata is the source of truth for whether the build is a
// filesystem-only snapshot (no memfile, no snapfile).
var meta metadata.Template
if strings.HasPrefix(*from, "gs://") {
bucketName, _ := strings.CutPrefix(*from, "gs://")

h, err := NewHeaderFromObject(ctx, bucketName, buildMemfileHeaderPath)
provider, err := storage.NewGCP(ctx, bucketName, nil)
if err != nil {
log.Fatalf("failed to create header from object: %s", err)
log.Fatalf("failed to create GCS bucket storage provider: %s", err)
}

m, err := metadata.FromBuildID(ctx, provider, *buildId)
if err != nil {
log.Fatalf("failed to read build metadata: %s", err)
}

memfileHeader = h
meta = m
} else {
h, err := NewHeaderFromPath(ctx, *from, buildMemfileHeaderPath)
m, err := metadata.FromFile(path.Join(*from, "templates", paths.Metadata()))
if err != nil {
log.Fatalf("failed to create header from path: %s", err)
log.Fatalf("failed to read build metadata: %s", err)
}

memfileHeader = h
meta = m
}
Comment thread
arkamar marked this conversation as resolved.

dataReferences := getReferencedData(memfileHeader, storage.MemfileName)
if meta.IsFilesystemOnly() {
Comment thread
arkamar marked this conversation as resolved.
fmt.Fprintf(os.Stderr, "Build is a filesystem-only snapshot; skipping memfile and snapfile\n")
} else {
// Extract all files referenced by the build memfile header
buildMemfileHeaderPath := paths.MemfileHeader()

filesToCopy = append(filesToCopy, buildMemfileHeaderPath)
filesToCopy = append(filesToCopy, dataReferences...)
var memfileHeader *header.Header
if strings.HasPrefix(*from, "gs://") {
bucketName, _ := strings.CutPrefix(*from, "gs://")

h, err := NewHeaderFromObject(ctx, bucketName, buildMemfileHeaderPath)
if err != nil {
log.Fatalf("failed to create header from object: %s", err)
}

memfileHeader = h
} else {
h, err := NewHeaderFromPath(ctx, *from, buildMemfileHeaderPath)
if err != nil {
log.Fatalf("failed to create header from path: %s", err)
}

memfileHeader = h
}

dataReferences := getReferencedData(memfileHeader, storage.MemfileName)

filesToCopy = append(filesToCopy, buildMemfileHeaderPath)
filesToCopy = append(filesToCopy, dataReferences...)

// Add the snapfile to the list of files to copy
snapfilePath := paths.Snapfile()
filesToCopy = append(filesToCopy, snapfilePath)
}

// Extract all files referenced by the build rootfs header
buildRootfsHeaderPath := paths.RootfsHeader()
Expand All @@ -269,15 +304,11 @@ func main() {
rootfsHeader = h
}

dataReferences = getReferencedData(rootfsHeader, storage.RootfsName)
dataReferences := getReferencedData(rootfsHeader, storage.RootfsName)

filesToCopy = append(filesToCopy, buildRootfsHeaderPath)
filesToCopy = append(filesToCopy, dataReferences...)

// Add the snapfile to the list of files to copy
snapfilePath := paths.Snapfile()
filesToCopy = append(filesToCopy, snapfilePath)

metadataPath := paths.Metadata()
filesToCopy = append(filesToCopy, metadataPath)

Expand Down
2 changes: 0 additions & 2 deletions packages/orchestrator/pkg/sandbox/block/prefetch_tracker.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:build linux

package block

import (
Expand Down
2 changes: 0 additions & 2 deletions packages/orchestrator/pkg/template/metadata/prefetch.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:build linux

package metadata

import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:build linux

package metadata

import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:build linux

package metadata

import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:build linux

package metadata

import (
Expand Down
Loading