mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-02-03 13:11:48 +02:00
refactor: using os.Stat to decide wether it is a file or a dir
This should avoid some failures.
This commit is contained in:
parent
03aec11c60
commit
dba83bff60
@ -45,30 +45,34 @@ func (Pipe) Run(ctx *context.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkMain(ctx *context.Context, build config.Build) error {
|
func checkMain(ctx *context.Context, build config.Build) error {
|
||||||
if strings.HasSuffix(build.Main, ".go") {
|
var main = build.Main
|
||||||
file, err := parser.ParseFile(token.NewFileSet(), build.Main, nil, 0)
|
if main == "" {
|
||||||
|
main = "."
|
||||||
|
}
|
||||||
|
stat, ferr := os.Stat(main)
|
||||||
|
if os.IsNotExist(ferr) {
|
||||||
|
return errors.Wrapf(ferr, "could not open %s", main)
|
||||||
|
}
|
||||||
|
if stat.IsDir() {
|
||||||
|
packs, err := parser.ParseDir(token.NewFileSet(), main, nil, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to parse file: %s", build.Main)
|
return errors.Wrapf(err, "failed to parse dir: %s", main)
|
||||||
}
|
}
|
||||||
if hasMain(file) {
|
for _, pack := range packs {
|
||||||
return nil
|
for _, file := range pack.Files {
|
||||||
|
if hasMain(file) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fmt.Errorf("build for %s does not contain a main function", build.Binary)
|
return fmt.Errorf("build for %s does not contain a main function", build.Binary)
|
||||||
}
|
}
|
||||||
var dir = build.Main
|
file, err := parser.ParseFile(token.NewFileSet(), build.Main, nil, 0)
|
||||||
if dir == "" {
|
|
||||||
dir = "."
|
|
||||||
}
|
|
||||||
packs, err := parser.ParseDir(token.NewFileSet(), dir, nil, 0)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to parse dir: %s", dir)
|
return errors.Wrapf(err, "failed to parse file: %s", build.Main)
|
||||||
}
|
}
|
||||||
for _, pack := range packs {
|
if hasMain(file) {
|
||||||
for _, file := range pack.Files {
|
return nil
|
||||||
if hasMain(file) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return fmt.Errorf("build for %s does not contain a main function", build.Binary)
|
return fmt.Errorf("build for %s does not contain a main function", build.Binary)
|
||||||
}
|
}
|
||||||
|
@ -277,7 +277,7 @@ func TestRunPipeWithouMainFunc(t *testing.T) {
|
|||||||
})
|
})
|
||||||
t.Run("not main.go", func(t *testing.T) {
|
t.Run("not main.go", func(t *testing.T) {
|
||||||
ctx.Config.Builds[0].Main = "foo.go"
|
ctx.Config.Builds[0].Main = "foo.go"
|
||||||
assert.EqualError(t, Pipe{}.Run(ctx), `failed to parse file: foo.go: open foo.go: no such file or directory`)
|
assert.EqualError(t, Pipe{}.Run(ctx), `could not open foo.go: stat foo.go: no such file or directory`)
|
||||||
})
|
})
|
||||||
t.Run("glob", func(t *testing.T) {
|
t.Run("glob", func(t *testing.T) {
|
||||||
ctx.Config.Builds[0].Main = "."
|
ctx.Config.Builds[0].Main = "."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user