From 433d02f66bfee1d7c65f67ab23136ad1dcd055de Mon Sep 17 00:00:00 2001 From: zaihaoyin <30316518+chloeyin@users.noreply.github.com> Date: Fri, 29 Jul 2022 01:32:15 +0800 Subject: [PATCH] remove docker-generate and docker-notation code (#269) * remove docker-generate and docker-notation code * clean cicd file and makefile Signed-off-by: zaihaoyin --- .goreleaser.yml | 34 ------- Makefile | 9 +- building.md | 4 - cmd/docker-generate/generate.go | 13 --- cmd/docker-generate/generate_test.go | 11 -- cmd/docker-generate/main.go | 17 ---- cmd/docker-generate/manifest.go | 78 --------------- cmd/docker-generate/manifest_test.go | 77 -------------- cmd/docker-generate/metadata.go | 29 ------ cmd/docker-generate/metadata_test.go | 40 -------- cmd/docker-notation/docker/client.go | 54 ---------- cmd/docker-notation/docker/manifest.go | 53 ---------- cmd/docker-notation/docker/signature.go | 15 --- cmd/docker-notation/main.go | 21 ---- cmd/docker-notation/metadata.go | 27 ----- cmd/docker-notation/notation.go | 15 --- cmd/docker-notation/pull.go | 128 ------------------------ cmd/docker-notation/push.go | 114 --------------------- cmd/docker-notation/sign.go | 78 --------------- cmd/docker-notation/util.go | 36 ------- go.mod | 9 -- go.sum | 25 ----- internal/cmd/flags.go | 47 +-------- 23 files changed, 3 insertions(+), 931 deletions(-) delete mode 100644 cmd/docker-generate/generate.go delete mode 100644 cmd/docker-generate/generate_test.go delete mode 100644 cmd/docker-generate/main.go delete mode 100644 cmd/docker-generate/manifest.go delete mode 100644 cmd/docker-generate/manifest_test.go delete mode 100644 cmd/docker-generate/metadata.go delete mode 100644 cmd/docker-generate/metadata_test.go delete mode 100644 cmd/docker-notation/docker/client.go delete mode 100644 cmd/docker-notation/docker/manifest.go delete mode 100644 cmd/docker-notation/docker/signature.go delete mode 100644 cmd/docker-notation/main.go delete mode 100644 cmd/docker-notation/metadata.go delete mode 100644 cmd/docker-notation/notation.go delete mode 100644 cmd/docker-notation/pull.go delete mode 100644 cmd/docker-notation/push.go delete mode 100644 cmd/docker-notation/sign.go delete mode 100644 cmd/docker-notation/util.go diff --git a/.goreleaser.yml b/.goreleaser.yml index 77695c535..65c17bd88 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -16,40 +16,6 @@ builds: goarch: arm64 ldflags: - -s -w -X {{.ModulePath}}/internal/version.Version={{.Version}} -X {{.ModulePath}}/internal/version.BuildMetadata= - - main: ./cmd/docker-notation - id: docker-notation - binary: docker-notation - env: - - CGO_ENABLED=0 - goos: - - linux - - darwin - - windows - goarch: - - amd64 - - arm64 - ignore: - - goos: windows - goarch: arm64 - ldflags: - - -s -w -X {{.ModulePath}}/internal/version.Version={{.Version}} -X {{.ModulePath}}/internal/version.BuildMetadata= - - main: ./cmd/docker-generate - id: docker-generate - binary: docker-generate - env: - - CGO_ENABLED=0 - goos: - - linux - - darwin - - windows - goarch: - - amd64 - - arm64 - ignore: - - goos: windows - goarch: arm64 - ldflags: - - -s -w archives: - format: tar.gz format_overrides: diff --git a/Makefile b/Makefile index 6b5bd9aba..eab1eb709 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ MODULE = github.com/notaryproject/notation -DOCKER_PLUGINS = docker-generate docker-notation -COMMANDS = notation $(DOCKER_PLUGINS) +COMMANDS = notation GIT_TAG = $(shell git describe --tags --abbrev=0 --exact-match 2>/dev/null) BUILD_METADATA = ifeq ($(GIT_TAG),) # unreleased build @@ -52,7 +51,7 @@ vendor: ## vendores the go modules GO111MODULE=on go mod vendor .PHONY: install -install: install-notation install-docker-plugins ## install the notation cli and docker plugins +install: install-notation ## install the notation cli .PHONY: install-notation install-notation: bin/notation ## installs the notation cli @@ -61,7 +60,3 @@ install-notation: bin/notation ## installs the notation cli .PHONY: install-docker-% install-docker-%: bin/docker-% cp $< ~/.docker/cli-plugins/ - -.PHONY: install-docker-plugins -install-docker-plugins: $(addprefix install-,$(DOCKER_PLUGINS)) ## installs the docker plugins - cp $(addprefix bin/,$(DOCKER_PLUGINS)) ~/.docker/cli-plugins/ diff --git a/building.md b/building.md index 65d54b6b5..d1f07137f 100644 --- a/building.md +++ b/building.md @@ -3,8 +3,6 @@ The notation repo contains the following: - `notation` - A CLI for signing and verifying artifacts with Notation -- `docker-generate` - Extends docker with `docker generate` to create locally persisted manifest for signing, without having to push to a registry. -- `docker-notation` - Extends docker with `docker notation` to enable, sign and verify Notation signatures. Building above binaries require [golang](https://golang.org/dl/) with version `>= 1.17`. @@ -12,8 +10,6 @@ Building above binaries require [golang](https://golang.org/dl/) with version `> - Build the binaries, installing them to: - `~/bin/notation` - - `~/.docker/cli-plugins/docker-generate` - - `~/.docker/cli-plugins/docker-notation` ```sh git clone https://github.com/notaryproject/notation.git cd notation diff --git a/cmd/docker-generate/generate.go b/cmd/docker-generate/generate.go deleted file mode 100644 index b72150275..000000000 --- a/cmd/docker-generate/generate.go +++ /dev/null @@ -1,13 +0,0 @@ -package main - -import ( - "github.com/spf13/cobra" -) - -func generateCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "generate", - } - cmd.AddCommand(generateManifestCommand(nil)) - return cmd -} diff --git a/cmd/docker-generate/generate_test.go b/cmd/docker-generate/generate_test.go deleted file mode 100644 index 085ed9dd2..000000000 --- a/cmd/docker-generate/generate_test.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import "testing" - -func TestGenerateCommand(t *testing.T) { - cmd := generateCommand() - subCmds := cmd.Commands() - if len(subCmds) != 1 { - t.Fatalf("Expect generate command have 1 subcommand, got: %v", len(subCmds)) - } -} diff --git a/cmd/docker-generate/main.go b/cmd/docker-generate/main.go deleted file mode 100644 index 1ba2aa06a..000000000 --- a/cmd/docker-generate/main.go +++ /dev/null @@ -1,17 +0,0 @@ -package main - -import ( - "log" - - "github.com/spf13/cobra" -) - -func main() { - cmd := &cobra.Command{ - Use: "docker", - } - cmd.AddCommand(generateCommand(), metadataCommand()) - if err := cmd.Execute(); err != nil { - log.Fatal(err) - } -} diff --git a/cmd/docker-generate/manifest.go b/cmd/docker-generate/manifest.go deleted file mode 100644 index 661e7dbe9..000000000 --- a/cmd/docker-generate/manifest.go +++ /dev/null @@ -1,78 +0,0 @@ -package main - -import ( - "io" - "os" - "os/exec" - - "github.com/notaryproject/notation/pkg/docker" - "github.com/spf13/cobra" -) - -type generateManifestOpts struct { - output string - reference string -} - -func generateManifestCommand(opts *generateManifestOpts) *cobra.Command { - if opts == nil { - opts = &generateManifestOpts{} - } - cmd := &cobra.Command{ - Use: "manifest [reference]", - Short: "generates the manifest of a docker image", - Args: cobra.MaximumNArgs(1), - PreRun: func(cmd *cobra.Command, args []string) { - if len(args) > 0 { - opts.reference = args[0] - } - }, - RunE: func(cmd *cobra.Command, args []string) error { - return generateManifest(cmd, opts) - }, - } - cmd.Flags().StringVarP(&opts.output, "output", "o", "", "write to a file instead of stdout") - return cmd -} - -func generateManifest(cmd *cobra.Command, opts *generateManifestOpts) error { - var reader io.Reader - if opts.reference != "" { - cmd := exec.Command("docker", "save", opts.reference) - cmd.Stderr = os.Stderr - stdout, err := cmd.StdoutPipe() - if err != nil { - return err - } - reader = stdout - if err := cmd.Start(); err != nil { - return err - } - } else { - reader = os.Stdin - } - - var writer io.Writer - if opts.output != "" { - file, err := os.Create(opts.output) - if err != nil { - return err - } - defer file.Close() - writer = file - } else { - writer = os.Stdout - } - - manifest, err := docker.GenerateSchema2FromDockerSave(reader) - if err != nil { - return err - } - _, payload, err := manifest.Payload() - if err != nil { - return err - } - - _, err = writer.Write(payload) - return err -} diff --git a/cmd/docker-generate/manifest_test.go b/cmd/docker-generate/manifest_test.go deleted file mode 100644 index 30e9924b0..000000000 --- a/cmd/docker-generate/manifest_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "testing" -) - -func TestGenerateManifestCmd(t *testing.T) { - tests := []struct { - generateManifestOpts - args []string - expectedErr bool - }{ - { - generateManifestOpts{ - reference: "reference", - output: "output", - }, - []string{"-o", "output", "reference"}, - false, - }, - { - generateManifestOpts{ - reference: "", - output: "output", - }, - []string{"-o", "output"}, - false, - }, - { - generateManifestOpts{ - reference: "reference", - output: "", - }, - []string{"reference"}, - false, - }, - { - generateManifestOpts{ - reference: "", - output: "", - }, - []string{}, - false, - }, - { - generateManifestOpts{ - reference: "reference", - output: "output", - }, - []string{"reference", "--output", "output"}, - false, - }, - { - args: []string{"-o", "output", "-n", "reference"}, - expectedErr: true, - }, - } - for _, test := range tests { - opts := &generateManifestOpts{} - cmd := generateManifestCommand(opts) - err := cmd.ParseFlags(test.args) - if err != nil && !test.expectedErr { - t.Fatalf("Test failed with error: %v", err) - } - if err == nil && test.expectedErr { - t.Fatalf("Expect test to error but it didn't: %v", test.args) - } - if err != nil { - continue - } - cmd.PreRun(cmd, cmd.Flags().Args()) - if *opts != test.generateManifestOpts { - t.Fatalf("Expect generate manifest opts: %v, got: %v", test.generateManifestOpts, *opts) - } - } - -} diff --git a/cmd/docker-generate/metadata.go b/cmd/docker-generate/metadata.go deleted file mode 100644 index 87ef63aa0..000000000 --- a/cmd/docker-generate/metadata.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "encoding/json" - "os" - - "github.com/notaryproject/notation/internal/docker" - "github.com/spf13/cobra" -) - -func metadataCommand() *cobra.Command { - return &cobra.Command{ - Use: docker.PluginMetadataCommandName, - RunE: func(cmd *cobra.Command, args []string) error { - writer := json.NewEncoder(os.Stdout) - return writer.Encode(pluginMetadata) - }, - Hidden: true, - } -} - -var pluginMetadata = docker.PluginMetadata{ - SchemaVersion: "0.1.0", - Vendor: "CNCF Notary Project", - Version: "0.1.1", - ShortDescription: "Generate artifacts", - URL: "https://github.com/notaryproject/notation", - Experimental: true, -} diff --git a/cmd/docker-generate/metadata_test.go b/cmd/docker-generate/metadata_test.go deleted file mode 100644 index 5e51dc89e..000000000 --- a/cmd/docker-generate/metadata_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package main - -import ( - "encoding/json" - "io" - "os" - "testing" - - "github.com/notaryproject/notation/internal/docker" -) - -func TestMetdaDatCommand(t *testing.T) { - oldStdOut := os.Stdout - r, w, err := os.Pipe() - if err != nil { - t.Fatalf("Create pipe for metadata cmd failed: %v", err) - - } - os.Stdout = w - cmd := metadataCommand() - if err := cmd.RunE(cmd, []string{}); err != nil { - t.Fatalf("Running metadata cmd failed: %v", err) - } - w.Close() - data, err := io.ReadAll(r) - if err != nil { - t.Fatalf("Read metadata from stdout failed: %v", err) - } - var got docker.PluginMetadata - if err := json.Unmarshal(data, &got); err != nil { - t.Fatalf("Unmarshal metadata failed: %v", err) - } - if got != pluginMetadata { - t.Fatalf("Expect Metadata: %v, got: %v", data, pluginMetadata) - } - defer func() { - os.Stdout = oldStdOut - r.Close() - }() -} diff --git a/cmd/docker-notation/docker/client.go b/cmd/docker-notation/docker/client.go deleted file mode 100644 index bf526699d..000000000 --- a/cmd/docker-notation/docker/client.go +++ /dev/null @@ -1,54 +0,0 @@ -package docker - -import ( - "context" - "net" - - dockerconfig "github.com/docker/cli/cli/config" - "github.com/docker/cli/cli/config/credentials" - notationregistry "github.com/notaryproject/notation-go/registry" - "github.com/notaryproject/notation/internal/version" - "github.com/notaryproject/notation/pkg/config" - "oras.land/oras-go/v2/registry" - "oras.land/oras-go/v2/registry/remote/auth" -) - -func getRepositoryClient(ref registry.Reference) (*notationregistry.RepositoryClient, error) { - plainHTTP := config.IsRegistryInsecure(ref.Registry) - if host, _, _ := net.SplitHostPort(ref.Registry); host == "localhost" { - plainHTTP = true - } - - cfg, err := dockerconfig.Load(dockerconfig.Dir()) - if err != nil { - return nil, err - } - if !cfg.ContainsAuth() { - cfg.CredentialsStore = credentials.DetectDefaultStore(cfg.CredentialsStore) - } - authConfig, err := cfg.GetAuthConfig(ref.Host()) - if err != nil { - return nil, err - } - cred := auth.Credential{ - Username: authConfig.Username, - Password: authConfig.Password, - RefreshToken: authConfig.IdentityToken, - AccessToken: authConfig.RegistryToken, - } - authClient := &auth.Client{ - Credential: func(ctx context.Context, registry string) (auth.Credential, error) { - switch registry { - case ref.Host(): - return cred, nil - default: - return auth.EmptyCredential, nil - } - }, - Cache: auth.NewCache(), - ClientID: "docker-notation", - } - authClient.SetUserAgent("docker-notation/" + version.GetVersion()) - - return notationregistry.NewRepositoryClient(authClient, ref, plainHTTP), nil -} diff --git a/cmd/docker-notation/docker/manifest.go b/cmd/docker-notation/docker/manifest.go deleted file mode 100644 index 921aa48c5..000000000 --- a/cmd/docker-notation/docker/manifest.go +++ /dev/null @@ -1,53 +0,0 @@ -package docker - -import ( - "context" - "os/exec" - - "github.com/distribution/distribution/v3/manifest/schema2" - "github.com/notaryproject/notation-go" - "github.com/notaryproject/notation/pkg/docker" - "github.com/opencontainers/go-digest" - "oras.land/oras-go/v2/registry" -) - -// GenerateManifest generate manifest from docker save -func GenerateManifest(reference string) ([]byte, error) { - cmd := exec.Command("docker", "save", reference) - reader, err := cmd.StdoutPipe() - if err != nil { - return nil, err - } - if err := cmd.Start(); err != nil { - return nil, err - } - - manifest, err := docker.GenerateSchema2FromDockerSave(reader) - if err != nil { - return nil, err - } - _, payload, err := manifest.Payload() - return payload, err -} - -// GenerateManifestDescriptor generate manifest descriptor from docker save -func GenerateManifestDescriptor(reference string) (notation.Descriptor, error) { - manifest, err := GenerateManifest(reference) - if err != nil { - return notation.Descriptor{}, err - } - return notation.Descriptor{ - MediaType: schema2.MediaTypeManifest, - Digest: digest.FromBytes(manifest), - Size: int64(len(manifest)), - }, nil -} - -// GetManifestDescriptor get manifest descriptor from remote registry -func GetManifestDescriptor(ctx context.Context, ref registry.Reference) (notation.Descriptor, error) { - client, err := getRepositoryClient(ref) - if err != nil { - return notation.Descriptor{}, err - } - return client.Resolve(ctx, ref.ReferenceOrDefault()) -} diff --git a/cmd/docker-notation/docker/signature.go b/cmd/docker-notation/docker/signature.go deleted file mode 100644 index 68ff0c893..000000000 --- a/cmd/docker-notation/docker/signature.go +++ /dev/null @@ -1,15 +0,0 @@ -package docker - -import ( - notationregistry "github.com/notaryproject/notation-go/registry" - "oras.land/oras-go/v2/registry" -) - -// GetSignatureRepository returns a signature repository -func GetSignatureRepository(reference string) (notationregistry.SignatureRepository, error) { - ref, err := registry.ParseReference(reference) - if err != nil { - return nil, err - } - return getRepositoryClient(ref) -} diff --git a/cmd/docker-notation/main.go b/cmd/docker-notation/main.go deleted file mode 100644 index cf38128a1..000000000 --- a/cmd/docker-notation/main.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "log" - "os" - - "github.com/urfave/cli/v2" -) - -func main() { - app := &cli.App{ - Name: "docker", - Commands: []*cli.Command{ - notationCommand, - metadataCommand, - }, - } - if err := app.Run(os.Args); err != nil { - log.Fatal(err) - } -} diff --git a/cmd/docker-notation/metadata.go b/cmd/docker-notation/metadata.go deleted file mode 100644 index e5421067f..000000000 --- a/cmd/docker-notation/metadata.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import ( - "encoding/json" - "os" - - "github.com/notaryproject/notation/internal/docker" - "github.com/notaryproject/notation/internal/version" - "github.com/urfave/cli/v2" -) - -var pluginMetadata = docker.PluginMetadata{ - SchemaVersion: "0.1.0", - Vendor: "CNCF Notary Project", - Version: version.GetVersion(), - ShortDescription: "Manage signatures on Docker images", - URL: "https://github.com/notaryproject/notation", -} - -var metadataCommand = &cli.Command{ - Name: docker.PluginMetadataCommandName, - Action: func(ctx *cli.Context) error { - writer := json.NewEncoder(os.Stdout) - return writer.Encode(pluginMetadata) - }, - Hidden: true, -} diff --git a/cmd/docker-notation/notation.go b/cmd/docker-notation/notation.go deleted file mode 100644 index 7cbb396b2..000000000 --- a/cmd/docker-notation/notation.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import ( - "github.com/urfave/cli/v2" -) - -var notationCommand = &cli.Command{ - Name: "notation", - Usage: pluginMetadata.ShortDescription, - Subcommands: []*cli.Command{ - pullCommand, - pushCommand, - signCommand, - }, -} diff --git a/cmd/docker-notation/pull.go b/cmd/docker-notation/pull.go deleted file mode 100644 index 025ab8079..000000000 --- a/cmd/docker-notation/pull.go +++ /dev/null @@ -1,128 +0,0 @@ -package main - -import ( - "context" - "errors" - "fmt" - "os" - - "github.com/notaryproject/notation-go" - "github.com/notaryproject/notation/cmd/docker-notation/docker" - "github.com/notaryproject/notation/pkg/cache" - "github.com/notaryproject/notation/pkg/config" - "github.com/opencontainers/go-digest" - "github.com/urfave/cli/v2" - "oras.land/oras-go/v2/registry" -) - -var pullCommand = &cli.Command{ - Name: "pull", - Usage: "Verify and pull an image from a registry", - ArgsUsage: "", - Action: pullImage, -} - -func pullImage(ctx *cli.Context) error { - originalRef := ctx.Args().First() - ref, err := verifyRemoteImage(ctx.Context, originalRef) - if err != nil { - return err - } - - if err := runCommand("docker", "pull", ref); err != nil { - return err - } - return runCommand("docker", "tag", ref, originalRef) -} - -func verifyRemoteImage(ctx context.Context, ref string) (string, error) { - manifestRef, err := registry.ParseReference(ref) - if err != nil { - return "", err - } - - verifier, err := getVerifier() - if err != nil { - return "", err - } - - manifestDesc, err := docker.GetManifestDescriptor(ctx, manifestRef) - if err != nil { - return "", err - } - fmt.Printf("%s: digest: %v size: %v\n", manifestRef.ReferenceOrDefault(), manifestDesc.Digest, manifestDesc.Size) - - fmt.Println("Looking up for signatures") - sigDigests, err := downloadSignatures(ctx, ref, manifestDesc.Digest) - if err != nil { - return "", err - } - switch n := len(sigDigests); n { - case 0: - return "", errors.New("no signature found") - default: - fmt.Println("Found", n, "signatures") - } - - sigDigest, originRef, err := verifySignatures(ctx, verifier, sigDigests, manifestDesc) - if err != nil { - return "", fmt.Errorf("none of the signatures are valid: %v", err) - } - fmt.Println("Found valid signature:", sigDigest) - if originRef != "" { - fmt.Println("The image is originated from:", originRef) - } - - manifestRef.Reference = manifestDesc.Digest.String() - return manifestRef.String(), nil -} - -func downloadSignatures(ctx context.Context, ref string, manifestDigest digest.Digest) ([]digest.Digest, error) { - client, err := docker.GetSignatureRepository(ref) - if err != nil { - return nil, err - } - sigManifests, err := client.ListSignatureManifests(ctx, manifestDigest) - if err != nil { - return nil, err - } - sigDigests := make([]digest.Digest, 0) - - for _, sigManifest := range sigManifests { - if err := cache.PullSignature(ctx, client, manifestDigest, sigManifest.Blob.Digest); err != nil { - return nil, err - } - sigDigests = append(sigDigests, sigManifest.Blob.Digest) - } - - return sigDigests, nil -} - -func verifySignatures( - ctx context.Context, - verifier notation.Verifier, - sigDigests []digest.Digest, - desc notation.Descriptor, -) (digest.Digest, string, error) { - var opts notation.VerifyOptions - var lastErr error - for _, sigDigest := range sigDigests { - path := config.SignaturePath(desc.Digest, sigDigest) - sig, err := os.ReadFile(path) - if err != nil { - return "", "", err - } - - actualDesc, err := verifier.Verify(ctx, sig, opts) - if err != nil { - lastErr = err - continue - } - if !actualDesc.Equal(desc) { - lastErr = fmt.Errorf("verification failure: digest mismatch: %v: %v", desc.Digest, actualDesc.Digest) - continue - } - return sigDigest, actualDesc.Annotations["identity"], nil - } - return "", "", lastErr -} diff --git a/cmd/docker-notation/push.go b/cmd/docker-notation/push.go deleted file mode 100644 index bed7ea5ec..000000000 --- a/cmd/docker-notation/push.go +++ /dev/null @@ -1,114 +0,0 @@ -package main - -import ( - "bufio" - "errors" - "fmt" - "io" - "os" - "os/exec" - "strconv" - "strings" - - "github.com/distribution/distribution/v3/manifest/schema2" - "github.com/notaryproject/notation-go" - "github.com/notaryproject/notation/cmd/docker-notation/docker" - "github.com/notaryproject/notation/pkg/cache" - "github.com/notaryproject/notation/pkg/config" - "github.com/opencontainers/go-digest" - "github.com/urfave/cli/v2" -) - -var pushCommand = &cli.Command{ - Name: "push", - Usage: "Push an image to a registry with its signatures", - ArgsUsage: "", - Action: pushImage, -} - -func pushImage(ctx *cli.Context) error { - desc, err := pushImageAndGetDescriptor(ctx) - if err != nil { - return err - } - - fmt.Println("Pushing signature") - sigDigests, err := cache.SignatureDigests(desc.Digest) - if err != nil { - return err - } - if len(sigDigests) == 0 { - return errors.New("no signatures found") - } - - client, err := docker.GetSignatureRepository(ctx.Args().First()) - if err != nil { - return err - } - pushSignature := func(sigDigest digest.Digest) error { - sigPath := config.SignaturePath(desc.Digest, sigDigest) - sig, err := os.ReadFile(sigPath) - if err != nil { - return err - } - - // pass in nonempty annotations if needed - sigDesc, _, err := client.PutSignatureManifest(ctx.Context, sig, desc, make(map[string]string)) - if err != nil { - return err - } - fmt.Println("signature manifest digest:", sigDesc.Digest, "size:", sigDesc.Size) - return nil - } - for _, sigDigest := range sigDigests { - if err := pushSignature(sigDigest); err != nil { - return err - } - } - - return nil -} - -func pushImageAndGetDescriptor(ctx *cli.Context) (notation.Descriptor, error) { - args := append([]string{"push"}, ctx.Args().Slice()...) - cmd := exec.Command("docker", args...) - cmd.Stdin = os.Stdin - cmd.Stderr = os.Stderr - stdout, err := cmd.StdoutPipe() - if err != nil { - return notation.Descriptor{}, err - } - scanner := bufio.NewScanner(io.TeeReader(stdout, os.Stdout)) - if err := cmd.Start(); err != nil { - return notation.Descriptor{}, err - } - var lastLine string - for scanner.Scan() { - lastLine = scanner.Text() - } - if err := scanner.Err(); err != nil { - return notation.Descriptor{}, err - } - if err := cmd.Wait(); err != nil { - return notation.Descriptor{}, err - } - - parts := strings.Split(lastLine, " ") - if len(parts) != 5 { - return notation.Descriptor{}, fmt.Errorf("invalid docker pull result: %s", lastLine) - } - digest, err := digest.Parse(parts[2]) - if err != nil { - return notation.Descriptor{}, fmt.Errorf("invalid digest: %s", lastLine) - } - size, err := strconv.ParseInt(parts[4], 10, 64) - if err != nil { - return notation.Descriptor{}, fmt.Errorf("invalid size: %s", lastLine) - } - - return notation.Descriptor{ - MediaType: schema2.MediaTypeManifest, - Digest: digest, - Size: size, - }, nil -} diff --git a/cmd/docker-notation/sign.go b/cmd/docker-notation/sign.go deleted file mode 100644 index 54e9a04d4..000000000 --- a/cmd/docker-notation/sign.go +++ /dev/null @@ -1,78 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/notaryproject/notation-go" - "github.com/notaryproject/notation/cmd/docker-notation/docker" - "github.com/notaryproject/notation/internal/cmd" - "github.com/notaryproject/notation/internal/osutil" - "github.com/notaryproject/notation/pkg/config" - "github.com/opencontainers/go-digest" - "github.com/urfave/cli/v2" -) - -var signCommand = &cli.Command{ - Name: "sign", - Usage: "Sign a image", - ArgsUsage: "", - Flags: []cli.Flag{ - cmd.FlagKey, - cmd.FlagKeyFile, - cmd.FlagCertFile, - cmd.FlagTimestamp, - cmd.FlagExpiry, - cmd.FlagReference, - &cli.BoolFlag{ - Name: "origin", - Usage: "mark the current reference as a original reference", - }, - }, - Action: signImage, -} - -func signImage(ctx *cli.Context) error { - // TODO: make this change only to make sure the code can be compiled - // According to the https://github.com/notaryproject/notation/discussions/251, - // we can update/deprecate it later - signerOpts := &cmd.SignerFlagOpts{ - Key: ctx.String(cmd.FlagKey.Name), - KeyFile: ctx.String(cmd.FlagKeyFile.Name), - CertFile: ctx.String(cmd.FlagCertFile.Name), - } - signer, err := cmd.GetSigner(signerOpts) - if err != nil { - return err - } - - reference := ctx.Args().First() - fmt.Println("Generating Docker mainfest:", reference) - desc, err := docker.GenerateManifestDescriptor(reference) - if err != nil { - return err - } - - fmt.Println("Signing", desc.Digest) - identity := ctx.String(cmd.FlagReference.Name) - if ctx.Bool("origin") { - identity = reference - } - if identity != "" { - desc.Annotations = map[string]string{ - "identity": identity, - } - } - sig, err := signer.Sign(ctx.Context, desc, notation.SignOptions{ - Expiry: cmd.GetExpiry(ctx.Duration(cmd.FlagExpiry.Name)), - }) - if err != nil { - return err - } - sigPath := config.SignaturePath(desc.Digest, digest.FromBytes(sig)) - if err := osutil.WriteFile(sigPath, sig); err != nil { - return err - } - fmt.Println("Signature saved to", sigPath) - - return nil -} diff --git a/cmd/docker-notation/util.go b/cmd/docker-notation/util.go deleted file mode 100644 index 03ea95fe6..000000000 --- a/cmd/docker-notation/util.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "os" - "os/exec" - - "github.com/notaryproject/notation-go" - "github.com/notaryproject/notation-go/signature" - "github.com/notaryproject/notation/pkg/config" -) - -func runCommand(command string, args ...string) error { - cmd := exec.Command(command, args...) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - if err, ok := err.(*exec.ExitError); ok { - os.Exit(err.ExitCode()) - } - return err - } - return nil -} - -func getVerifier() (notation.Verifier, error) { - cfg, err := config.LoadOrDefaultOnce() - if err != nil { - return nil, err - } - var certPaths []string - for _, cert := range cfg.VerificationCertificates.Certificates { - certPaths = append(certPaths, cert.Path) - } - return signature.NewVerifierFromFiles(certPaths) -} diff --git a/go.mod b/go.mod index 3c0c9d125..9e18edeef 100644 --- a/go.mod +++ b/go.mod @@ -4,30 +4,21 @@ go 1.18 require ( github.com/distribution/distribution/v3 v3.0.0-20210804104954-38ab4c606ee3 - github.com/docker/cli v20.10.17+incompatible github.com/docker/docker-credential-helpers v0.6.4 github.com/notaryproject/notation-core-go v0.0.0-20220712013708-3c4b3efa03c5 github.com/notaryproject/notation-go v0.9.0-alpha.1.0.20220727090134-7af715044cfd github.com/opencontainers/go-digest v1.0.0 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 - github.com/urfave/cli/v2 v2.11.0 oras.land/oras-go/v2 v2.0.0-rc.1.0.20220727034506-eb13fdfeefa6 ) require ( - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/docker/docker v20.10.8+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/opencontainers/distribution-spec/specs-go v0.0.0-20220620172159-4ab4752c3b86 // indirect github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect github.com/oras-project/artifacts-spec v1.0.0-rc.2 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect - github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect - gotest.tools/v3 v3.0.3 // indirect ) diff --git a/go.sum b/go.sum index 9cdae0729..c6ae25817 100644 --- a/go.sum +++ b/go.sum @@ -14,21 +14,15 @@ github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/distribution/distribution/v3 v3.0.0-20210804104954-38ab4c606ee3 h1:rEK0juuU5idazw//KzUcL3yYwUU3DIe2OnfJwjDBqno= github.com/distribution/distribution/v3 v3.0.0-20210804104954-38ab4c606ee3/go.mod h1:gt38b7cvVKazi5XkHvINNytZXgTEntyhtyM3HQz46Nk= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v20.10.8+incompatible h1:RVqD337BgQicVCzYrrlhLDWhq6OAD2PJDUg2LsEUvKM= -github.com/docker/docker v20.10.8+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= @@ -48,8 +42,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -88,10 +80,7 @@ github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod github.com/oras-project/artifacts-spec v1.0.0-rc.2 h1:9SMCNSxkJEHqWGDiMCuy6TXHgvjgwXGdXZZGXLKQvVE= github.com/oras-project/artifacts-spec v1.0.0-rc.2/go.mod h1:Xch2aLzSwtkhbFFN6LUzTfLtukYvMMdXJ4oZ8O7BOdc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -103,11 +92,9 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= @@ -119,12 +106,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/urfave/cli/v2 v2.11.0 h1:c6bD90aLd2iEsokxhxkY5Er0zA2V9fId2aJfwmrF+do= -github.com/urfave/cli/v2 v2.11.0/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= @@ -134,14 +116,12 @@ golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -154,8 +134,6 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= @@ -165,9 +143,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= oras.land/oras-go/v2 v2.0.0-rc.1.0.20220727034506-eb13fdfeefa6 h1:fbJtzJbpZCtdaAvjPvjlTf8CGsUE1+mClxyh/MPne6I= oras.land/oras-go/v2 v2.0.0-rc.1.0.20220727034506-eb13fdfeefa6/go.mod h1:IZRIoIJqkAH6x0pL3tVnpyPUyZgthjSyPcH2kgJvBMo= diff --git a/internal/cmd/flags.go b/internal/cmd/flags.go index 475dc4be4..81e57d4dc 100644 --- a/internal/cmd/flags.go +++ b/internal/cmd/flags.go @@ -8,51 +8,6 @@ import ( "time" "github.com/spf13/pflag" - "github.com/urfave/cli/v2" -) - -var ( - FlagKey = &cli.StringFlag{ - Name: "key", - Aliases: []string{"k"}, - Usage: "signing key name", - } - - FlagKeyFile = &cli.StringFlag{ - Name: "key-file", - Usage: "signing key file", - TakesFile: true, - } - - FlagCertFile = &cli.StringFlag{ - Name: "cert-file", - Usage: "signing certificate file", - TakesFile: true, - } - - FlagTimestamp = &cli.StringFlag{ - Name: "timestamp", - Aliases: []string{"t"}, - Usage: "timestamp the signed signature via the remote TSA", - } - - FlagExpiry = &cli.DurationFlag{ - Name: "expiry", - Aliases: []string{"e"}, - Usage: "expire duration", - } - - FlagReference = &cli.StringFlag{ - Name: "reference", - Aliases: []string{"r"}, - Usage: "original reference", - } - - FlagPluginConfig = &cli.StringFlag{ - Name: "pluginConfig", - Aliases: []string{"pc"}, - Usage: "list of comma-separated {key}={value} pairs that are passed as is to the plugin, refer plugin documentation to set appropriate values", - } ) var ( @@ -127,7 +82,7 @@ type KeyValueSlice interface { func ParseFlagPluginConfig(config string) (map[string]string, error) { pluginConfig, err := ParseKeyValueListFlag(config) if err != nil { - return nil, fmt.Errorf("could not parse %q as value for flag %s: %s", pluginConfig, FlagPluginConfig.Name, err) + return nil, fmt.Errorf("could not parse %q as value for flag %s: %s", pluginConfig, PflagPluginConfig.Name, err) } return pluginConfig, nil }