embed.go (71 lines of code) (raw):
package main
import (
"embed"
"io/fs"
"path/filepath"
"dagger.io/dagger"
)
var (
//go:embed hack/cross
hackCrossFS embed.FS
//go:embed packages
packagesFS embed.FS
)
func packageDir(client *dagger.Client, name string) *dagger.Directory {
root := client.Directory()
dir, err := fs.Sub(packagesFS, filepath.Join("packages", name))
if err != nil {
panic(err)
}
err = fs.WalkDir(dir, ".", func(path string, entry fs.DirEntry, err error) error {
if err != nil {
return err
}
info, err := entry.Info()
if err != nil {
return err
}
if entry.IsDir() {
root = root.WithNewDirectory(path, dagger.DirectoryWithNewDirectoryOpts{Permissions: int(info.Mode().Perm())})
return nil
}
dt, err := fs.ReadFile(dir, path)
if err != nil {
return err
}
root = root.WithNewFile(path, string(dt), dagger.DirectoryWithNewFileOpts{Permissions: int(info.Mode().Perm())})
return nil
})
if err != nil {
panic(err)
}
return root
}
func hackCrossDir(client *dagger.Client) *dagger.Directory {
root := client.Directory()
dir, err := fs.Sub(hackCrossFS, "hack/cross")
if err != nil {
panic(err)
}
err = fs.WalkDir(dir, ".", func(path string, entry fs.DirEntry, err error) error {
if err != nil {
return err
}
info, err := entry.Info()
if err != nil {
return err
}
if entry.IsDir() {
root = root.WithNewDirectory(path, dagger.DirectoryWithNewDirectoryOpts{Permissions: int(info.Mode().Perm())})
return nil
}
dt, err := fs.ReadFile(dir, path)
if err != nil {
return err
}
root = root.WithNewFile(path, string(dt), dagger.DirectoryWithNewFileOpts{Permissions: int(info.Mode().Perm())})
return nil
})
if err != nil {
panic(err)
}
return root
}