embedded stdlib
This PR embeds the stdlib into the dagger binary itself for convenience. Long term we will want to source the stdlib directly from git. - Updated go to 1.16 to use the new built-in embedding functionality - The `stdlib` go package now contains an embed of the stdlib Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
49
stdlib/stdlib.go
Normal file
49
stdlib/stdlib.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package stdlib
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"path"
|
||||
"path/filepath"
|
||||
|
||||
cueload "cuelang.org/go/cue/load"
|
||||
)
|
||||
|
||||
// FS contains the filesystem of the stdlib.
|
||||
//go:embed **/*.cue
|
||||
var FS embed.FS
|
||||
|
||||
const (
|
||||
stdlibPackageName = "dagger.cloud"
|
||||
)
|
||||
|
||||
func Overlay(prefixPath string) (map[string]cueload.Source, error) {
|
||||
overlay := map[string]cueload.Source{}
|
||||
|
||||
err := fs.WalkDir(FS, ".", func(p string, entry fs.DirEntry, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !entry.Type().IsRegular() {
|
||||
return nil
|
||||
}
|
||||
|
||||
if filepath.Ext(entry.Name()) != ".cue" {
|
||||
return nil
|
||||
}
|
||||
|
||||
contents, err := FS.ReadFile(p)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", p, err)
|
||||
}
|
||||
|
||||
overlayPath := path.Join(prefixPath, "cue.mod", "pkg", stdlibPackageName, p)
|
||||
|
||||
overlay[overlayPath] = cueload.FromBytes(contents)
|
||||
return nil
|
||||
})
|
||||
|
||||
return overlay, err
|
||||
}
|
Reference in New Issue
Block a user