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