github.com/goreleaser/goreleaser@v1.25.1/internal/pipeline/pipeline.go (about) 1 // Package pipeline provides generic errors for pipes to use. 2 package pipeline 3 4 import ( 5 "fmt" 6 7 "github.com/goreleaser/goreleaser/internal/pipe/announce" 8 "github.com/goreleaser/goreleaser/internal/pipe/archive" 9 "github.com/goreleaser/goreleaser/internal/pipe/aur" 10 "github.com/goreleaser/goreleaser/internal/pipe/before" 11 "github.com/goreleaser/goreleaser/internal/pipe/brew" 12 "github.com/goreleaser/goreleaser/internal/pipe/build" 13 "github.com/goreleaser/goreleaser/internal/pipe/changelog" 14 "github.com/goreleaser/goreleaser/internal/pipe/checksums" 15 "github.com/goreleaser/goreleaser/internal/pipe/chocolatey" 16 "github.com/goreleaser/goreleaser/internal/pipe/defaults" 17 "github.com/goreleaser/goreleaser/internal/pipe/dist" 18 "github.com/goreleaser/goreleaser/internal/pipe/docker" 19 "github.com/goreleaser/goreleaser/internal/pipe/effectiveconfig" 20 "github.com/goreleaser/goreleaser/internal/pipe/env" 21 "github.com/goreleaser/goreleaser/internal/pipe/git" 22 "github.com/goreleaser/goreleaser/internal/pipe/gomod" 23 "github.com/goreleaser/goreleaser/internal/pipe/krew" 24 "github.com/goreleaser/goreleaser/internal/pipe/metadata" 25 "github.com/goreleaser/goreleaser/internal/pipe/nfpm" 26 "github.com/goreleaser/goreleaser/internal/pipe/nix" 27 "github.com/goreleaser/goreleaser/internal/pipe/partial" 28 "github.com/goreleaser/goreleaser/internal/pipe/prebuild" 29 "github.com/goreleaser/goreleaser/internal/pipe/publish" 30 "github.com/goreleaser/goreleaser/internal/pipe/reportsizes" 31 "github.com/goreleaser/goreleaser/internal/pipe/sbom" 32 "github.com/goreleaser/goreleaser/internal/pipe/scoop" 33 "github.com/goreleaser/goreleaser/internal/pipe/semver" 34 "github.com/goreleaser/goreleaser/internal/pipe/sign" 35 "github.com/goreleaser/goreleaser/internal/pipe/snapcraft" 36 "github.com/goreleaser/goreleaser/internal/pipe/snapshot" 37 "github.com/goreleaser/goreleaser/internal/pipe/sourcearchive" 38 "github.com/goreleaser/goreleaser/internal/pipe/universalbinary" 39 "github.com/goreleaser/goreleaser/internal/pipe/upx" 40 "github.com/goreleaser/goreleaser/internal/pipe/winget" 41 "github.com/goreleaser/goreleaser/pkg/context" 42 ) 43 44 // Piper defines a pipe, which can be part of a pipeline (a series of pipes). 45 type Piper interface { 46 fmt.Stringer 47 48 // Run the pipe 49 Run(ctx *context.Context) error 50 } 51 52 // BuildPipeline contains all build-related pipe implementations in order. 53 // nolint:gochecknoglobals 54 var BuildPipeline = []Piper{ 55 // load and validate environment variables 56 env.Pipe{}, 57 // get and validate git repo state 58 git.Pipe{}, 59 // parse current tag to a semver 60 semver.Pipe{}, 61 // load default configs 62 defaults.Pipe{}, 63 // setup things for partial builds/releases 64 partial.Pipe{}, 65 // snapshot version handling 66 snapshot.Pipe{}, 67 // run global hooks before build 68 before.Pipe{}, 69 // ensure ./dist is clean 70 dist.Pipe{}, 71 // setup metadata options 72 metadata.Pipe{}, 73 // creates a metadta.json files in the dist directory 74 metadata.MetaPipe{}, 75 // setup gomod-related stuff 76 gomod.Pipe{}, 77 // run prebuild stuff 78 prebuild.Pipe{}, 79 // proxy gomod if needed 80 gomod.CheckGoModPipe{}, 81 // proxy gomod if needed 82 gomod.ProxyPipe{}, 83 // writes the actual config (with defaults et al set) to dist 84 effectiveconfig.Pipe{}, 85 // build 86 build.Pipe{}, 87 // universal binary handling 88 universalbinary.Pipe{}, 89 // upx 90 upx.Pipe{}, 91 } 92 93 // BuildCmdPipeline is the pipeline run by goreleaser build. 94 // nolint:gochecknoglobals 95 var BuildCmdPipeline = append( 96 BuildPipeline, 97 reportsizes.Pipe{}, 98 metadata.ArtifactsPipe{}, 99 ) 100 101 // Pipeline contains all pipe implementations in order. 102 // nolint: gochecknoglobals 103 var Pipeline = append( 104 BuildPipeline, 105 // builds the release changelog 106 changelog.Pipe{}, 107 // archive in tar.gz, zip or binary (which does no archiving at all) 108 archive.Pipe{}, 109 // archive the source code using git-archive 110 sourcearchive.Pipe{}, 111 // archive via fpm (deb, rpm) using "native" go impl 112 nfpm.Pipe{}, 113 // archive via snapcraft (snap) 114 snapcraft.Pipe{}, 115 // create SBOMs of artifacts 116 sbom.Pipe{}, 117 // checksums of the files 118 checksums.Pipe{}, 119 // sign artifacts 120 sign.Pipe{}, 121 // create arch linux aur pkgbuild 122 aur.Pipe{}, 123 // create nixpkgs 124 nix.NewBuild(), 125 // winget installers 126 winget.Pipe{}, 127 // create brew tap 128 brew.Pipe{}, 129 // krew plugins 130 krew.Pipe{}, 131 // create scoop buckets 132 scoop.Pipe{}, 133 // create chocolatey pkg and publish 134 chocolatey.Pipe{}, 135 // reports artifacts sizes to the log and to artifacts.json 136 reportsizes.Pipe{}, 137 // create and push docker images 138 docker.Pipe{}, 139 // publishes artifacts 140 publish.New(), 141 // creates a artifacts.json files in the dist directory 142 metadata.ArtifactsPipe{}, 143 // announce releases 144 announce.Pipe{}, 145 )