1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-11-29 23:07:42 +02:00

fix: decouple project_name guessing from the release pipe (#4335)

the release's defaults run before the project's does, so, usually the
github/gitlab/gitea names are set.

however, in some cases, the release's defaults might be skipped, in
which case they'll be empty.

this breaks things like `goreleaser changelog`, especially on non-go
repositories.

this pr tries to extract the project name from the git remote url in the
project's defaulter.

it might be possible now to move it to run before the release defaulter,
even.

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos Alexandro Becker
2023-10-14 18:59:07 -03:00
committed by GitHub
parent 95c990b166
commit 3cfefcc4ce
2 changed files with 30 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ import (
"os/exec"
"strings"
"github.com/goreleaser/goreleaser/internal/git"
"github.com/goreleaser/goreleaser/pkg/context"
)
@@ -27,6 +28,7 @@ func (Pipe) Default(ctx *context.Context) error {
ctx.Config.Release.GitLab.Name,
ctx.Config.Release.Gitea.Name,
moduleName(),
gitRemote(ctx),
} {
if candidate == "" {
continue
@@ -55,3 +57,14 @@ func moduleName() string {
parts := strings.Split(mod, "/")
return strings.TrimSpace(parts[len(parts)-1])
}
func gitRemote(ctx *context.Context) string {
repo, err := git.ExtractRepoFromConfig(ctx)
if err != nil {
return ""
}
if err := repo.CheckSCM(); err != nil {
return ""
}
return repo.Name
}

View File

@@ -76,6 +76,23 @@ func TestEmptyProjectName_DefaultsToGoModPath(t *testing.T) {
require.Equal(t, "bar", ctx.Config.ProjectName)
}
func TestEmptyProjectName_DefaultsToGitURL(t *testing.T) {
_ = testlib.Mktmp(t)
ctx := testctx.New()
testlib.GitInit(t)
testlib.GitRemoteAdd(t, "git@github.com:foo/bar.git")
require.NoError(t, Pipe{}.Default(ctx))
require.Equal(t, "bar", ctx.Config.ProjectName)
}
func TestEmptyProjectName_DefaultsToNonSCMGitURL(t *testing.T) {
_ = testlib.Mktmp(t)
ctx := testctx.New()
testlib.GitInit(t)
testlib.GitRemoteAdd(t, "git@myhost.local:bar.git")
require.EqualError(t, Pipe{}.Default(ctx), "couldn't guess project_name, please add it to your config")
}
func TestEmptyProjectNameAndRelease(t *testing.T) {
_ = testlib.Mktmp(t)
ctx := testctx.NewWithCfg(config.Project{