Skip to content

Commit b6ac9b3

Browse files
committed
Improve flag filename completions
Be more consistent across with extensions accepted/filtered, add some. Also, mark and comment out cases where there are no known typical filename extensions for flags taking filename arguments, to make it obvious that they have not been inadvertently omitted. Marking a flag as filename without specifying extensions is a no-op, and actually considered a bug per commentary in cobra sources: https://github.com/spf13/cobra/blob/41b26ec8bb59dfba580f722201bf371c4f5703dd/completions.go#L387-L390 Closes sigstore/community#538 Signed-off-by: Ville Skyttä <[email protected]>
1 parent b43f6bc commit b6ac9b3

20 files changed

+104
-40
lines changed

cmd/cosign/cli/options/attach.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (o *AttachSBOMOptions) AddFlags(cmd *cobra.Command) {
8080

8181
cmd.Flags().StringVar(&o.SBOM, "sbom", "",
8282
"path to the sbom, or {-} for stdin")
83-
_ = cmd.Flags().SetAnnotation("sbom", cobra.BashCompFilenameExt, []string{})
83+
_ = cmd.MarkFlagFilename("sbom", sbomExts...)
8484

8585
cmd.Flags().StringVar(&o.SBOMType, "type", "spdx",
8686
"type of sbom (spdx|cyclonedx|syft)")

cmd/cosign/cli/options/attest.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,18 @@ func (o *AttestOptions) AddFlags(cmd *cobra.Command) {
5454

5555
cmd.Flags().StringVar(&o.Key, "key", "",
5656
"path to the private key file, KMS URI or Kubernetes Secret")
57-
_ = cmd.MarkFlagFilename("key", "key")
57+
_ = cmd.MarkFlagFilename("key", privateKeyExts...)
5858

5959
cmd.Flags().StringVar(&o.Cert, "certificate", "",
6060
"path to the X.509 certificate in PEM format to include in the OCI Signature")
61-
_ = cmd.MarkFlagFilename("certificate", "cert")
61+
_ = cmd.MarkFlagFilename("certificate", certificateExts...)
6262

6363
cmd.Flags().StringVar(&o.CertChain, "certificate-chain", "",
6464
"path to a list of CA X.509 certificates in PEM format which will be needed "+
6565
"when building the certificate chain for the signing certificate. "+
6666
"Must start with the parent intermediate CA certificate of the "+
6767
"signing certificate and end with the root certificate. Included in the OCI Signature")
68-
_ = cmd.MarkFlagFilename("certificate-chain", "cert")
68+
_ = cmd.MarkFlagFilename("certificate-chain", certificateExts...)
6969

7070
cmd.Flags().BoolVar(&o.NoUpload, "no-upload", false,
7171
"do not upload the generated attestation")

cmd/cosign/cli/options/attest_blob.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,33 +58,34 @@ func (o *AttestBlobOptions) AddFlags(cmd *cobra.Command) {
5858

5959
cmd.Flags().StringVar(&o.Key, "key", "",
6060
"path to the private key file, KMS URI or Kubernetes Secret")
61-
_ = cmd.MarkFlagFilename("key", "key")
61+
_ = cmd.MarkFlagFilename("key", privateKeyExts...)
6262

6363
cmd.Flags().StringVar(&o.Cert, "certificate", "",
6464
"path to the X.509 certificate in PEM format to include in the OCI Signature")
65-
_ = cmd.MarkFlagFilename("certificate", "cert")
65+
_ = cmd.MarkFlagFilename("certificate", certificateExts...)
6666

6767
cmd.Flags().StringVar(&o.CertChain, "certificate-chain", "",
6868
"path to a list of CA X.509 certificates in PEM format which will be needed "+
6969
"when building the certificate chain for the signing certificate. "+
7070
"Must start with the parent intermediate CA certificate of the "+
7171
"signing certificate and end with the root certificate. Included in the OCI Signature")
72-
_ = cmd.MarkFlagFilename("certificate-chain", "cert")
72+
_ = cmd.MarkFlagFilename("certificate-chain", certificateExts...)
7373

7474
cmd.Flags().StringVar(&o.OutputSignature, "output-signature", "",
7575
"write the signature to FILE")
76-
_ = cmd.MarkFlagFilename("output-signature")
76+
_ = cmd.MarkFlagFilename("output-signature", signatureExts...)
7777

7878
cmd.Flags().StringVar(&o.OutputAttestation, "output-attestation", "",
7979
"write the attestation to FILE")
80+
// _ = cmd.MarkFlagFilename("output-attestation") // no typical extensions
8081

8182
cmd.Flags().StringVar(&o.OutputCertificate, "output-certificate", "",
8283
"write the certificate to FILE")
83-
_ = cmd.MarkFlagFilename("key")
84+
_ = cmd.MarkFlagFilename("key", certificateExts...)
8485

8586
cmd.Flags().StringVar(&o.BundlePath, "bundle", "",
8687
"write everything required to verify the blob to a FILE")
87-
_ = cmd.MarkFlagFilename("bundle")
88+
_ = cmd.MarkFlagFilename("bundle", bundleExts...)
8889

8990
// TODO: have this default to true as a breaking change
9091
cmd.Flags().BoolVar(&o.NewBundleFormat, "new-bundle-format", false,
@@ -107,5 +108,5 @@ func (o *AttestBlobOptions) AddFlags(cmd *cobra.Command) {
107108

108109
cmd.Flags().StringVar(&o.RFC3161TimestampPath, "rfc3161-timestamp-bundle", "",
109110
"path to an RFC 3161 timestamp bundle FILE")
110-
_ = cmd.MarkFlagFilename("rfc3161-timestamp-bundle")
111+
// _ = cmd.MarkFlagFilename("rfc3161-timestamp-bundle") // no typical extensions
111112
}

cmd/cosign/cli/options/bundle.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,33 +39,41 @@ var _ Interface = (*BundleCreateOptions)(nil)
3939
func (o *BundleCreateOptions) AddFlags(cmd *cobra.Command) {
4040
cmd.Flags().StringVar(&o.Artifact, "artifact", "",
4141
"path to artifact FILE")
42+
// _ = cmd.MarkFlagFilename("artifact") // no typical extensions
4243

4344
cmd.Flags().StringVar(&o.AttestationPath, "attestation", "",
4445
"path to attestation FILE")
46+
// _ = cmd.MarkFlagFilename("attestation") // no typical extensions
4547

4648
cmd.Flags().StringVar(&o.BundlePath, "bundle", "",
4749
"path to old format bundle FILE")
50+
_ = cmd.MarkFlagFilename("bundle", bundleExts...)
4851

4952
cmd.Flags().StringVar(&o.CertificatePath, "certificate", "",
5053
"path to the signing certificate, likely from Fulco.")
54+
_ = cmd.MarkFlagFilename("certificate", certificateExts...)
5155

5256
cmd.Flags().BoolVar(&o.IgnoreTlog, "ignore-tlog", false,
5357
"ignore transparency log verification, to be used when an artifact "+
5458
"signature has not been uploaded to the transparency log.")
5559

5660
cmd.Flags().StringVar(&o.KeyRef, "key", "",
5761
"path to the public key file, KMS URI or Kubernetes Secret")
62+
_ = cmd.MarkFlagFilename("key", publicKeyExts...)
5863

5964
cmd.Flags().StringVar(&o.Out, "out", "", "path to output bundle")
65+
_ = cmd.MarkFlagFilename("out", bundleExts...)
6066

6167
cmd.Flags().StringVar(&o.RekorURL, "rekor-url", "https://rekor.sigstore.dev",
6268
"address of rekor STL server")
6369

6470
cmd.Flags().StringVar(&o.RFC3161TimestampPath, "rfc3161-timestamp", "",
6571
"path to RFC3161 timestamp FILE")
72+
// _ = cmd.MarkFlagFilename("rfc3161-timestamp") // no typical extensions
6673

6774
cmd.Flags().StringVar(&o.SignaturePath, "signature", "",
6875
"path to base64-encoded signature over attestation in DSSE format")
76+
_ = cmd.MarkFlagFilename("signature", signatureExts...)
6977

7078
cmd.Flags().BoolVar(&o.Sk, "sk", false,
7179
"whether to use a hardware security key")

cmd/cosign/cli/options/certificate.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ var _ Interface = (*RekorOptions)(nil)
4646
func (o *CertVerifyOptions) AddFlags(cmd *cobra.Command) {
4747
cmd.Flags().StringVar(&o.Cert, "certificate", "",
4848
"path to the public certificate. The certificate will be verified against the Fulcio roots if the --certificate-chain option is not passed.")
49-
_ = cmd.MarkFlagFilename("certificate", "cert")
49+
_ = cmd.MarkFlagFilename("certificate", certificateExts...)
5050

5151
cmd.Flags().StringVar(&o.CertIdentity, "certificate-identity", "",
5252
"The identity expected in a valid Fulcio certificate. Valid values include email address, DNS names, IP addresses, and URIs. Either --certificate-identity or --certificate-identity-regexp must be set for keyless flows.")
@@ -82,24 +82,25 @@ func (o *CertVerifyOptions) AddFlags(cmd *cobra.Command) {
8282
"when building the certificate chains for the signing certificate. "+
8383
"The flag is optional and must be used together with --ca-roots, conflicts with "+
8484
"--certificate-chain.")
85-
_ = cmd.MarkFlagFilename("ca-intermediates", "cert")
85+
_ = cmd.MarkFlagFilename("ca-intermediates", certificateExts...)
8686
cmd.Flags().StringVar(&o.CARoots, "ca-roots", "",
8787
"path to a bundle file of CA certificates in PEM format which will be needed "+
8888
"when building the certificate chains for the signing certificate. Conflicts with --certificate-chain.")
89-
_ = cmd.MarkFlagFilename("ca-roots", "cert")
89+
_ = cmd.MarkFlagFilename("ca-roots", certificateExts...)
9090

9191
cmd.Flags().StringVar(&o.CertChain, "certificate-chain", "",
9292
"path to a list of CA certificates in PEM format which will be needed "+
9393
"when building the certificate chain for the signing certificate. "+
9494
"Must start with the parent intermediate CA certificate of the "+
9595
"signing certificate and end with the root certificate. Conflicts with --ca-roots and --ca-intermediates.")
96-
_ = cmd.MarkFlagFilename("certificate-chain", "cert")
96+
_ = cmd.MarkFlagFilename("certificate-chain", certificateExts...)
9797
cmd.MarkFlagsMutuallyExclusive("ca-roots", "certificate-chain")
9898
cmd.MarkFlagsMutuallyExclusive("ca-intermediates", "certificate-chain")
9999

100100
cmd.Flags().StringVar(&o.SCT, "sct", "",
101101
"path to a detached Signed Certificate Timestamp, formatted as a RFC6962 AddChainResponse struct. "+
102102
"If a certificate contains an SCT, verification will check both the detached and embedded SCTs.")
103+
// _ = cmd.MarkFlagFilename("sct") // no typical extensions
103104
cmd.Flags().BoolVar(&o.IgnoreSCT, "insecure-ignore-sct", false,
104105
"when set, verification will not check that a certificate contains an embedded SCT, a proof of "+
105106
"inclusion in a certificate transparency log")

cmd/cosign/cli/options/files.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,5 @@ func (o *FilesOptions) String() string {
5454
func (o *FilesOptions) AddFlags(cmd *cobra.Command) {
5555
cmd.Flags().StringSliceVarP(&o.Files, "files", "f", nil,
5656
"<filepath>:[platform/arch]")
57-
_ = cmd.MarkFlagFilename("files")
57+
// _ = cmd.MarkFlagFilename("files") // no typical extensions
5858
}

cmd/cosign/cli/options/fulcio.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func (o *FulcioOptions) AddFlags(cmd *cobra.Command) {
3939

4040
cmd.Flags().StringVar(&o.IdentityToken, "identity-token", "",
4141
"identity token to use for certificate from fulcio. the token or a path to a file containing the token is accepted.")
42+
// _ = cmd.MarkFlagFilename("identity-token") // no typical extensions
4243

4344
cmd.Flags().StringVar(&o.AuthFlow, "fulcio-auth-flow", "",
4445
"fulcio interactive oauth2 flow to use for certificate from fulcio. Defaults to determining the flow based on the runtime environment. (options) normal|device|token|client_credentials")

cmd/cosign/cli/options/import_key_pair.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ var _ Interface = (*ImportKeyPairOptions)(nil)
3636
func (o *ImportKeyPairOptions) AddFlags(cmd *cobra.Command) {
3737
cmd.Flags().StringVarP(&o.Key, "key", "k", "",
3838
"import key pair to use for signing")
39-
_ = cmd.MarkFlagFilename("key")
39+
_ = cmd.MarkFlagFilename("key", privateKeyExts...)
4040

4141
cmd.Flags().StringVarP(&o.OutputKeyPrefix, "output-key-prefix", "o", "import-cosign",
4242
"name used for outputted key pairs")
43-
_ = cmd.MarkFlagFilename("output-key-prefix")
43+
// _ = cmd.MarkFlagFilename("output-key-prefix") // no typical extensions
4444

4545
cmd.Flags().BoolVarP(&o.SkipConfirmation, "yes", "y", false,
4646
"skip confirmation prompts for overwriting existing key")

cmd/cosign/cli/options/oidc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (o *OIDCOptions) AddFlags(cmd *cobra.Command) {
6464

6565
cmd.Flags().StringVar(&o.clientSecretFile, "oidc-client-secret-file", "",
6666
"Path to file containing OIDC client secret for application")
67-
_ = cmd.MarkFlagFilename("oidc-client-secret-file")
67+
// _ = cmd.MarkFlagFilename("oidc-client-secret-file") // no typical extensions
6868

6969
cmd.Flags().StringVar(&o.RedirectURL, "oidc-redirect-url", "",
7070
"OIDC redirect URL (Optional). The default oidc-redirect-url is 'http://localhost:0/auth/callback'.")

cmd/cosign/cli/options/options.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,37 @@ type Interface interface {
2121
// AddFlags adds this options' flags to the cobra command.
2222
AddFlags(cmd *cobra.Command)
2323
}
24+
25+
var bundleExts = []string{
26+
"bundle",
27+
}
28+
var certificateExts = []string{
29+
"cert",
30+
"crt",
31+
"pem",
32+
}
33+
var logExts = []string{
34+
"log",
35+
}
36+
var moduleExts = []string{
37+
"dll",
38+
"dylib",
39+
"so",
40+
}
41+
var privateKeyExts = []string{
42+
"key",
43+
}
44+
var publicKeyExts = []string{
45+
"pub",
46+
}
47+
var sbomExts = []string{
48+
"json",
49+
"xml",
50+
"spdx",
51+
}
52+
var signatureExts = []string{
53+
"sig",
54+
}
55+
var wasmExts = []string{
56+
"wasm",
57+
}

0 commit comments

Comments
 (0)