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  )