-
Notifications
You must be signed in to change notification settings - Fork 12
/
init.go
114 lines (92 loc) · 2.32 KB
/
init.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package app
import (
"fmt"
"io/fs"
"os"
"strings"
"github.com/aserto-dev/scc-lib/generators"
"github.com/magefile/mage/sh"
"github.com/opcr-io/policy/templates"
"github.com/pkg/errors"
)
const (
ciTemplateOrganization = "aserto-content"
ctTemplateRepo = "policy-template"
ciTemplateTag = "latest"
)
// Init: path is rootpath of project.
func (c *PolicyApp) Init(path, user, server, repo, scc, token string, overwrite, noSrc bool) error {
defer c.Cancel()
if !strings.EqualFold(scc, "github") && !strings.EqualFold(scc, "gitlab") {
return errors.Errorf("not supported source code provider '%s'", scc)
}
names := strings.Split(repo, "/")
if len(names) < 2 {
return errors.New("invalid repo name, not org/repo")
}
err := c.validatePath(path)
if err != nil {
return err
}
generatorConfig := &generators.Config{
Server: server,
Repo: repo,
Token: token,
User: user,
}
err = c.generateContent(
generatorConfig,
path,
scc,
overwrite)
if err != nil {
return err
}
if !noSrc {
return c.generateContent(
generatorConfig,
path,
fmt.Sprintf("%s/%s:%s", ciTemplateOrganization, ctTemplateRepo, ciTemplateTag),
overwrite)
}
return nil
}
func (c *PolicyApp) generateContent(generatorConf *generators.Config, outPath, scc string, overwrite bool) error {
prog := c.UI.Progressf("Generating files")
prog.Start()
templateRoot, err := fs.Sub(templates.Assets(), scc)
if err != nil {
return errors.Wrapf(err, "failed tog get sub fs %s", scc)
}
generator, err := generators.NewGenerator(
generatorConf,
c.Logger,
templateRoot,
)
if err != nil {
return errors.Wrap(err, "failed to initialize generator")
}
err = generator.Generate(outPath, overwrite)
if err != nil {
return errors.Wrap(err, "failed to generate ci files")
}
prog.Stop()
c.UI.Normal().Msg("The template was generated successfully.")
return nil
}
func (c *PolicyApp) validatePath(path string) error {
if exist, _ := generators.DirExist(path); !exist {
if err := os.MkdirAll(path, 0700); err != nil {
return errors.Errorf("root path not a directory '%s'", path)
}
}
if err := generators.IsGitRepo(path); err != nil {
if err := sh.RunV("git", "init", "--quiet", path); err != nil {
return err
}
if err := generators.IsGitRepo(path); err != nil {
return err
}
}
return nil
}