-
Notifications
You must be signed in to change notification settings - Fork 8
/
embed.go
87 lines (73 loc) · 1.69 KB
/
embed.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
}