...

Source file src/edge-infra.dev/pkg/f8n/warehouse/release/cmd/lock/lock.go

Documentation: edge-infra.dev/pkg/f8n/warehouse/release/cmd/lock

     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  			// Shared config flag used in Releaser creation
    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