-
Notifications
You must be signed in to change notification settings - Fork 11
/
release_creator.go
64 lines (51 loc) · 1.58 KB
/
release_creator.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
package winfsinjector
import (
"log"
"os"
"path/filepath"
"code.cloudfoundry.org/hydrator/imagefetcher"
"github.com/cloudfoundry/bosh-cli/v7/cmd"
"github.com/cloudfoundry/bosh-cli/v7/cmd/opts"
"github.com/cloudfoundry/bosh-cli/v7/ui"
"github.com/cloudfoundry/bosh-utils/logger"
)
type ReleaseCreator struct{}
func (rc ReleaseCreator) CreateRelease(releaseName, imageName, releaseDir, tarballPath, imageTag, registry, version string) error {
hLogger := log.New(os.Stdout, "", 0)
releaseBlob := filepath.Join(releaseDir, "blobs", releaseName)
h := imagefetcher.New(hLogger, releaseBlob, imageName, imageTag, registry, false)
if err := h.Run(); err != nil {
return err
}
releaseVersion := opts.VersionArg{}
if err := releaseVersion.UnmarshalFlag(version); err != nil {
return err
}
l := logger.NewLogger(logger.LevelInfo)
u := ui.NewConfUI(l)
defer u.Flush()
deps := cmd.NewBasicDeps(u, l)
createReleaseOpts := &opts.CreateReleaseOpts{
Directory: opts.DirOrCWDArg{Path: releaseDir},
Version: releaseVersion,
}
if tarballPath != "" {
expanded, err := filepath.Abs(tarballPath)
if err != nil {
return err
}
createReleaseOpts.Tarball = opts.FileArg{FS: deps.FS, ExpandedPath: expanded}
}
// bosh create-release adds ~7GB of temp files that should be cleaned up
tmpDir, err := os.MkdirTemp("", "winfs-create-release")
if err != nil {
return err
}
defer os.RemoveAll(tmpDir)
os.Setenv("HOME", tmpDir)
createReleaseCommand := cmd.NewCmd(opts.BoshOpts{}, createReleaseOpts, deps)
if err := createReleaseCommand.Execute(); err != nil {
return err
}
return nil
}