mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-01-08 03:31:59 +02:00
5eb1e4ad0d
Extract the digest (sha256) of docker images from the `docker push` command for dockers published to the docker registry. Outputting the digest is required to avoid a race condition when referencing the image, where the image tag is being modified before the reference is done. See this [blog post](https://github.com/goreleaser/goreleaser/issues/3496) for more info. This PR fixes https://github.com/goreleaser/goreleaser/issues/3496. Note that the 'publish' pipe now must run before the 'metadata' pipe, so that the information extracted during the 'publish' pipe would appear in the metadata. Previously, the published docker images metadata wasn't printed (because of the order). It made sense because the content of the published image was just a subset of the local one. Now that it is printed to the metadata, it should have a different name to avoid confusion. As I mentioned, it wasn't printed before - so there shouldn't be any backward-compatibility issues. --- Local tests: ``` go test -v . === RUN TestVersion === RUN TestVersion/only_version === RUN TestVersion/version_and_date === RUN TestVersion/version,_date,_built_by === RUN TestVersion/all_empty === RUN TestVersion/complete --- PASS: TestVersion (0.00s) --- PASS: TestVersion/only_version (0.00s) --- PASS: TestVersion/version_and_date (0.00s) --- PASS: TestVersion/version,_date,_built_by (0.00s) --- PASS: TestVersion/all_empty (0.00s) --- PASS: TestVersion/complete (0.00s) PASS ok github.com/goreleaser/goreleaser 0.764s ``` Output example: ``` { "name": "gallegit/hello-world:latest", "path": "gallegit/hello-world:latest", "goos": "linux", "goarch": "amd64", "internal_type": 10, "type": "Published Docker Image", "extra": { "digest": "sha256:c3f7dd196a046dc061236d3c6ae1e2946269e90da30b0a959240ca799750e632" } } ``` Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
121 lines
3.8 KiB
Go
121 lines
3.8 KiB
Go
// Package pipeline provides generic erros for pipes to use.
|
|
package pipeline
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/goreleaser/goreleaser/internal/pipe/announce"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/archive"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/aur"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/before"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/brew"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/build"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/changelog"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/checksums"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/chocolatey"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/defaults"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/dist"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/docker"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/effectiveconfig"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/env"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/git"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/gomod"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/krew"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/metadata"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/nfpm"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/prebuild"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/publish"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/sbom"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/scoop"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/semver"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/sign"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/snapcraft"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/snapshot"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/sourcearchive"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/universalbinary"
|
|
"github.com/goreleaser/goreleaser/pkg/context"
|
|
)
|
|
|
|
// Piper defines a pipe, which can be part of a pipeline (a series of pipes).
|
|
type Piper interface {
|
|
fmt.Stringer
|
|
|
|
// Run the pipe
|
|
Run(ctx *context.Context) error
|
|
}
|
|
|
|
// BuildPipeline contains all build-related pipe implementations in order.
|
|
// nolint:gochecknoglobals
|
|
var BuildPipeline = []Piper{
|
|
// load and validate environment variables
|
|
env.Pipe{},
|
|
// get and validate git repo state
|
|
git.Pipe{},
|
|
// parse current tag to a semver
|
|
semver.Pipe{},
|
|
// load default configs
|
|
defaults.Pipe{},
|
|
// run global hooks before build
|
|
before.Pipe{},
|
|
// snapshot version handling
|
|
snapshot.Pipe{},
|
|
// ensure ./dist is clean
|
|
dist.Pipe{},
|
|
// setup gomod-related stuff
|
|
gomod.Pipe{},
|
|
// run prebuild stuff
|
|
prebuild.Pipe{},
|
|
// proxy gomod if needed
|
|
gomod.ProxyPipe{},
|
|
// writes the actual config (with defaults et al set) to dist
|
|
effectiveconfig.Pipe{},
|
|
// build
|
|
build.Pipe{},
|
|
// universal binary handling
|
|
universalbinary.Pipe{},
|
|
}
|
|
|
|
// BuildCmdPipeline is the pipeline run by goreleaser build.
|
|
// nolint:gochecknoglobals
|
|
var BuildCmdPipeline = append(BuildPipeline, metadata.Pipe{})
|
|
|
|
// Pipeline contains all pipe implementations in order.
|
|
// nolint: gochecknoglobals
|
|
var Pipeline = append(
|
|
BuildPipeline,
|
|
// builds the release changelog
|
|
changelog.Pipe{},
|
|
// archive in tar.gz, zip or binary (which does no archiving at all)
|
|
archive.Pipe{},
|
|
// archive the source code using git-archive
|
|
sourcearchive.Pipe{},
|
|
// archive via fpm (deb, rpm) using "native" go impl
|
|
nfpm.Pipe{},
|
|
// archive via snapcraft (snap)
|
|
snapcraft.Pipe{},
|
|
// create SBOMs of artifacts
|
|
sbom.Pipe{},
|
|
// checksums of the files
|
|
checksums.Pipe{},
|
|
// sign artifacts
|
|
sign.Pipe{},
|
|
// create arch linux aur pkgbuild
|
|
aur.Pipe{},
|
|
// create brew tap
|
|
brew.Pipe{},
|
|
// krew plugins
|
|
krew.Pipe{},
|
|
// create scoop buckets
|
|
scoop.Pipe{},
|
|
// create chocolatey pkg and publish
|
|
chocolatey.Pipe{},
|
|
// create and push docker images
|
|
docker.Pipe{},
|
|
// publishes artifacts
|
|
publish.Pipe{},
|
|
// creates a metadata.json and an artifacts.json files in the dist folder
|
|
metadata.Pipe{},
|
|
// announce releases
|
|
announce.Pipe{},
|
|
)
|