github.com/triarius/goreleaser@v1.12.5/internal/pipeline/pipeline.go (about)

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