github.com/triarius/goreleaser@v1.12.5/internal/pipe/sign/sign_docker.go (about) 1 package sign 2 3 import ( 4 "fmt" 5 6 "github.com/triarius/goreleaser/internal/artifact" 7 "github.com/triarius/goreleaser/internal/ids" 8 "github.com/triarius/goreleaser/internal/pipe" 9 "github.com/triarius/goreleaser/internal/semerrgroup" 10 "github.com/triarius/goreleaser/pkg/context" 11 ) 12 13 // Pipe that signs docker images and manifests. 14 type DockerPipe struct{} 15 16 func (DockerPipe) String() string { return "signing docker images" } 17 18 func (DockerPipe) Skip(ctx *context.Context) bool { 19 return ctx.SkipSign || len(ctx.Config.DockerSigns) == 0 20 } 21 22 // Default sets the Pipes defaults. 23 func (DockerPipe) Default(ctx *context.Context) error { 24 ids := ids.New("docker_signs") 25 for i := range ctx.Config.DockerSigns { 26 cfg := &ctx.Config.DockerSigns[i] 27 if cfg.Cmd == "" { 28 cfg.Cmd = "cosign" 29 } 30 if len(cfg.Args) == 0 { 31 cfg.Args = []string{"sign", "--key=cosign.key", "$artifact"} 32 } 33 if cfg.Artifacts == "" { 34 cfg.Artifacts = "none" 35 } 36 if cfg.ID == "" { 37 cfg.ID = "default" 38 } 39 ids.Inc(cfg.ID) 40 } 41 return ids.Validate() 42 } 43 44 // Publish signs and pushes the docker images signatures. 45 func (DockerPipe) Publish(ctx *context.Context) error { 46 g := semerrgroup.New(ctx.Parallelism) 47 for i := range ctx.Config.DockerSigns { 48 cfg := ctx.Config.DockerSigns[i] 49 g.Go(func() error { 50 var filters []artifact.Filter 51 switch cfg.Artifacts { 52 case "images": 53 filters = append(filters, artifact.ByType(artifact.DockerImage)) 54 case "manifests": 55 filters = append(filters, artifact.ByType(artifact.DockerManifest)) 56 case "all": 57 filters = append(filters, artifact.Or( 58 artifact.ByType(artifact.DockerImage), 59 artifact.ByType(artifact.DockerManifest), 60 )) 61 case "none": // TODO(caarlos0): remove this 62 return pipe.ErrSkipSignEnabled 63 default: 64 return fmt.Errorf("invalid list of artifacts to sign: %s", cfg.Artifacts) 65 } 66 67 if len(cfg.IDs) > 0 { 68 filters = append(filters, artifact.ByIDs(cfg.IDs...)) 69 } 70 return sign(ctx, cfg, ctx.Artifacts.Filter(artifact.And(filters...)).List()) 71 }) 72 } 73 return g.Wait() 74 }