Skip to content

Commit

Permalink
fix: decouple project_name guessing from the release pipe (#4335)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
caarlos0 committed Oct 14, 2023
1 parent 95c990b commit 3cfefcc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
13 changes: 13 additions & 0 deletions internal/pipe/project/project.go
Expand Up @@ -6,6 +6,7 @@ import (
"os/exec"
"strings"

"github.com/goreleaser/goreleaser/internal/git"
"github.com/goreleaser/goreleaser/pkg/context"
)

Expand All @@ -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
Expand Down Expand Up @@ -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
}
17 changes: 17 additions & 0 deletions internal/pipe/project/project_test.go
Expand Up @@ -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{
Expand Down

0 comments on commit 3cfefcc

Please sign in to comment.