Files
grafana/pkg/build/daggerbuild/targz/build.go
2025-05-20 10:48:00 -05:00

62 lines
1.4 KiB
Go

package targz
import (
"path"
"dagger.io/dagger"
)
func NewMappedDir(path string, directory *dagger.Directory) MappedDirectory {
return MappedDirectory{path: path, directory: directory}
}
type MappedDirectory struct {
path string
directory *dagger.Directory
}
type MappedFile struct {
path string
file *dagger.File
}
func NewMappedFile(path string, file *dagger.File) MappedFile {
return MappedFile{path: path, file: file}
}
type Opts struct {
// Root is the root folder that holds all of the packaged data.
// It is common for targz packages to have a root folder.
// This should equal something like `grafana-9.4.1`.
Root string
// A map of directory paths relative to the root, like 'bin', 'public', 'npm-artifacts'
// to dagger directories.
Directories []MappedDirectory
Files []MappedFile
}
func Build(packager *dagger.Container, opts *Opts) *dagger.File {
root := opts.Root
packager = packager.
WithWorkdir("/src")
paths := []string{}
for _, v := range opts.Files {
path := path.Join(root, v.path)
packager = packager.WithMountedFile(path, v.file)
paths = append(paths, path)
}
for _, v := range opts.Directories {
path := path.Join(root, v.path)
packager = packager.WithMountedDirectory(path, v.directory)
paths = append(paths, path)
}
packager = packager.WithExec(append([]string{"tar", "-czf", "/package.tar.gz"}, paths...))
return packager.File("/package.tar.gz")
}