gittuf/internal/cmd/verifyref/verifyref.go
Aditya Sirish A Yelgundhalli eda8a89e2a
repository -> gittuf: Expose a gittuf Go API
Signed-off-by: Aditya Sirish A Yelgundhalli <ayelgundhall@bloomberg.net>
2024-10-23 13:30:35 -04:00

79 lines
1.8 KiB
Go

// Copyright The gittuf Authors
// SPDX-License-Identifier: Apache-2.0
package verifyref
import (
"fmt"
"github.com/gittuf/gittuf/experimental/gittuf"
verifyopts "github.com/gittuf/gittuf/experimental/gittuf/options/verify"
"github.com/gittuf/gittuf/internal/dev"
"github.com/spf13/cobra"
)
type options struct {
latestOnly bool
fromEntry string
remoteRefName string
}
func (o *options) AddFlags(cmd *cobra.Command) {
cmd.Flags().BoolVar(
&o.latestOnly,
"latest-only",
false,
"perform verification against latest entry in the RSL",
)
cmd.Flags().StringVar(
&o.fromEntry,
"from-entry",
"",
fmt.Sprintf("perform verification from specified RSL entry (developer mode only, set %s=1)", dev.DevModeKey),
)
cmd.MarkFlagsMutuallyExclusive("latest-only", "from-entry")
cmd.Flags().StringVar(
&o.remoteRefName,
"remote-ref-name",
"",
"name of remote reference, if it differs from the local name",
)
}
func (o *options) Run(cmd *cobra.Command, args []string) error {
repo, err := gittuf.LoadRepository()
if err != nil {
return err
}
if o.fromEntry != "" {
if !dev.InDevMode() {
return dev.ErrNotInDevMode
}
return repo.VerifyRefFromEntry(cmd.Context(), args[0], o.fromEntry, verifyopts.WithOverrideRefName(o.remoteRefName))
}
opts := []verifyopts.Option{verifyopts.WithOverrideRefName(o.remoteRefName)}
if o.latestOnly {
opts = append(opts, verifyopts.WithLatestOnly())
}
return repo.VerifyRef(cmd.Context(), args[0], opts...)
}
func New() *cobra.Command {
o := &options{}
cmd := &cobra.Command{
Use: "verify-ref",
Short: "Tools for verifying gittuf policies",
Args: cobra.ExactArgs(1),
RunE: o.Run,
DisableAutoGenTag: true,
}
o.AddFlags(cmd)
return cmd
}