woodpecker/cli/common/pipeline.go
Michael 2477d2e57f
Support .yaml as file-ending for workflow config too (#1388)
This implements #1073, adds .yaml to the accepted endings for woodpecker configs.

This currently adds some more lines to the duplication (tried to compensate by fixing the other duplication in the configFetcher) as the CLI and Server are still separate.
2022-11-03 19:12:40 +01:00

62 lines
1.2 KiB
Go

package common
import (
"fmt"
"os"
"strings"
"github.com/urfave/cli/v2"
"github.com/woodpecker-ci/woodpecker/shared/constant"
)
func DetectPipelineConfig() (isDir bool, config string, _ error) {
for _, config := range constant.DefaultConfigOrder {
shouldBeDir := strings.HasSuffix(config, "/")
config = strings.TrimSuffix(config, "/")
if fi, err := os.Stat(config); err == nil && shouldBeDir == fi.IsDir() {
return fi.IsDir(), config, nil
}
}
return false, "", fmt.Errorf("could not detect pipeline config")
}
func RunPipelineFunc(c *cli.Context, fileFunc, dirFunc func(*cli.Context, string) error) error {
if c.Args().Len() == 0 {
isDir, path, err := DetectPipelineConfig()
if err != nil {
return err
}
if isDir {
return dirFunc(c, path)
}
return fileFunc(c, path)
}
multiArgs := c.Args().Len() > 1
for _, arg := range c.Args().Slice() {
fi, err := os.Stat(arg)
if err != nil {
return err
}
if multiArgs {
fmt.Println("#", fi.Name())
}
if fi.IsDir() {
if err := dirFunc(c, arg); err != nil {
return err
}
} else {
if err := fileFunc(c, arg); err != nil {
return err
}
}
if multiArgs {
fmt.Println("")
}
}
return nil
}