diff --git a/internal/pipe/checksums/checksums.go b/internal/pipe/checksums/checksums.go index 8ac6923de..a28eb47a9 100644 --- a/internal/pipe/checksums/checksums.go +++ b/internal/pipe/checksums/checksums.go @@ -40,14 +40,17 @@ func (Pipe) Run(ctx *context.Context) (err error) { if ctx.Config.Checksum.Disable { return pipe.Skip("checksum.disable is set") } - artifactList := ctx.Artifacts.Filter( - artifact.Or( - artifact.ByType(artifact.UploadableArchive), - artifact.ByType(artifact.UploadableBinary), - artifact.ByType(artifact.UploadableSourceArchive), - artifact.ByType(artifact.LinuxPackage), - ), - ).List() + filter := artifact.Or( + artifact.ByType(artifact.UploadableArchive), + artifact.ByType(artifact.UploadableBinary), + artifact.ByType(artifact.UploadableSourceArchive), + artifact.ByType(artifact.LinuxPackage), + ) + if len(ctx.Config.Checksum.IDs) > 0 { + filter = artifact.And(filter, artifact.ByIDs(ctx.Config.Checksum.IDs...)) + } + + artifactList := ctx.Artifacts.Filter(filter).List() if len(artifactList) == 0 { return nil } diff --git a/internal/pipe/checksums/checksums_test.go b/internal/pipe/checksums/checksums_test.go index ce34f5242..7b15deb9b 100644 --- a/internal/pipe/checksums/checksums_test.go +++ b/internal/pipe/checksums/checksums_test.go @@ -17,44 +17,90 @@ func TestDescription(t *testing.T) { } func TestPipe(t *testing.T) { - var binary = "binary" - var checksums = binary + "_bar_checksums.txt" - folder, err := ioutil.TempDir("", "goreleasertest") - require.NoError(t, err) - var file = filepath.Join(folder, binary) - require.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0644)) - var ctx = context.New( - config.Project{ - Dist: folder, - ProjectName: binary, - Checksum: config.Checksum{ - NameTemplate: "{{ .ProjectName }}_{{ .Env.FOO }}_checksums.txt", - Algorithm: "sha256", + const binary = "binary" + const archive = binary + ".tar.gz" + const linuxPackage = binary + ".rpm" + const checksums = binary + "_bar_checksums.txt" + + tests := map[string]struct { + ids []string + want []string + }{ + "default": { + want: []string{ + binary, + archive, + linuxPackage, + }, + }, + "select ids": { + ids: []string{ + "id-1", + "id-2", + }, + want: []string{ + binary, + archive, }, }, - ) - ctx.Git.CurrentTag = "1.2.3" - ctx.Env = map[string]string{"FOO": "bar"} - ctx.Artifacts.Add(&artifact.Artifact{ - Name: binary, - Path: file, - Type: artifact.UploadableBinary, - }) - ctx.Artifacts.Add(&artifact.Artifact{ - Name: binary + ".tar.gz", - Path: file, - Type: artifact.UploadableArchive, - }) - require.NoError(t, Pipe{}.Run(ctx)) - var artifacts []string - for _, a := range ctx.Artifacts.List() { - artifacts = append(artifacts, a.Name) } - require.Contains(t, artifacts, checksums, binary) - bts, err := ioutil.ReadFile(filepath.Join(folder, checksums)) - require.NoError(t, err) - require.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc binary") - require.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc binary.tar.gz") + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + folder, err := ioutil.TempDir("", "goreleasertest") + require.NoError(t, err) + var file = filepath.Join(folder, binary) + require.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0644)) + var ctx = context.New( + config.Project{ + Dist: folder, + ProjectName: binary, + Checksum: config.Checksum{ + NameTemplate: "{{ .ProjectName }}_{{ .Env.FOO }}_checksums.txt", + Algorithm: "sha256", + IDs: tt.ids, + }, + }, + ) + ctx.Git.CurrentTag = "1.2.3" + ctx.Env = map[string]string{"FOO": "bar"} + ctx.Artifacts.Add(&artifact.Artifact{ + Name: binary, + Path: file, + Type: artifact.UploadableBinary, + Extra: map[string]interface{}{ + "ID": "id-1", + }, + }) + ctx.Artifacts.Add(&artifact.Artifact{ + Name: archive, + Path: file, + Type: artifact.UploadableArchive, + Extra: map[string]interface{}{ + "ID": "id-2", + }, + }) + ctx.Artifacts.Add(&artifact.Artifact{ + Name: linuxPackage, + Path: file, + Type: artifact.LinuxPackage, + Extra: map[string]interface{}{ + "ID": "id-3", + }, + }) + require.NoError(t, Pipe{}.Run(ctx)) + var artifacts []string + for _, a := range ctx.Artifacts.List() { + artifacts = append(artifacts, a.Name) + } + require.Contains(t, artifacts, checksums, binary) + bts, err := ioutil.ReadFile(filepath.Join(folder, checksums)) + require.NoError(t, err) + for _, want := range tt.want { + require.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc "+want) + } + }) + } + } func TestPipeSkipTrue(t *testing.T) { diff --git a/pkg/config/config.go b/pkg/config/config.go index 9d331057e..513a21cdc 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -473,9 +473,10 @@ type Snapshot struct { // Checksum config. type Checksum struct { - NameTemplate string `yaml:"name_template,omitempty"` - Algorithm string `yaml:"algorithm,omitempty"` - Disable bool `yaml:"disable,omitempty"` + NameTemplate string `yaml:"name_template,omitempty"` + Algorithm string `yaml:"algorithm,omitempty"` + IDs []string `yaml:"ids,omitempty"` + Disable bool `yaml:"disable,omitempty"` } // Docker image config. diff --git a/www/docs/customization/checksum.md b/www/docs/customization/checksum.md index 3aeaf2bfb..0dfe84f00 100644 --- a/www/docs/customization/checksum.md +++ b/www/docs/customization/checksum.md @@ -19,6 +19,14 @@ checksum: # Default is sha256. algorithm: sha256 + # IDs of artifacts to include in the checksums file. + # If left empty, all published binaries, archives, linux packages and source archives + # are included in the checksums file. + # Default is an empty list. + ids: + - foo + - bar + # Disable the generation/upload of the checksum file. # Default is false. disable: true