...
1 package lock
2
3 import (
4 "context"
5 "os"
6
7 "gopkg.in/yaml.v3"
8
9 "edge-infra.dev/pkg/f8n/warehouse/packagelock"
10 "edge-infra.dev/pkg/f8n/warehouse/release"
11 "edge-infra.dev/pkg/lib/cli/rags"
12 "edge-infra.dev/pkg/lib/cli/sink"
13 )
14
15 func New() *sink.Command {
16 var (
17 configPath string
18 outputPath string
19 )
20 cmd := &sink.Command{
21 Use: "lock [flags]",
22 Short: "lock a Release OCI artifact into a packagelock",
23 Flags: []*rags.Rag{
24
25 {
26 Name: "output",
27 Short: "o",
28 Usage: "output path for packagelock.yaml file",
29 Value: &rags.String{Var: &outputPath},
30 },
31 {
32 Name: "config",
33 Short: "c",
34 Usage: "config path for the release information",
35 Value: &rags.String{Var: &configPath},
36 },
37 },
38 Exec: func(_ context.Context, r sink.Run) error {
39 envBytes, err := os.ReadFile(configPath)
40 if err != nil {
41 r.Log.Error(err, "couldn't open config")
42 return err
43 }
44 environment := &release.Environment{Log: r.Log}
45
46 err = yaml.Unmarshal(envBytes, environment)
47 if err != nil {
48 return err
49 }
50
51 releases, err := environment.PullReleases()
52 if err != nil {
53 r.Log.Error(err, "pull")
54 return err
55 }
56
57 pl, err := environment.LockReleases(releases)
58 if err != nil {
59 r.Log.Error(err, "lock")
60 return err
61 }
62
63 plr, err := packagelock.NewRules()
64 if err != nil {
65 r.Log.Error(err, "rules")
66 return err
67 }
68
69 plBytes, err := plr.MarshalPackageLockYAML(pl)
70 if err != nil {
71 r.Log.Error(err, "marshal")
72 return err
73 }
74
75 if outputPath == "" {
76 _, err = r.Out().Write(plBytes)
77 if err != nil {
78 return err
79 }
80 return nil
81 }
82
83 err = os.WriteFile(outputPath, plBytes, 0644)
84 if err != nil {
85 return err
86 }
87
88 return nil
89 },
90 }
91 return cmd
92 }
93
View as plain text