2019-06-04 13:04:18 +00:00
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
2019-06-24 07:04:30 +00:00
|
|
|
"strings"
|
2019-06-04 13:04:18 +00:00
|
|
|
"time"
|
|
|
|
|
2021-05-25 12:08:27 +00:00
|
|
|
"github.com/woodpecker-ci/woodpecker/model"
|
|
|
|
"github.com/woodpecker-ci/woodpecker/remote"
|
2019-06-04 13:04:18 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type configFetcher struct {
|
|
|
|
remote_ remote.Remote
|
|
|
|
user *model.User
|
|
|
|
repo *model.Repo
|
|
|
|
build *model.Build
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cf *configFetcher) Fetch() ([]*remote.FileMeta, error) {
|
|
|
|
for i := 0; i < 5; i++ {
|
|
|
|
select {
|
|
|
|
case <-time.After(time.Second * time.Duration(i)):
|
2019-06-24 07:04:30 +00:00
|
|
|
// either a file
|
2019-06-25 11:45:43 +00:00
|
|
|
file, fileerr := cf.remote_.File(cf.user, cf.repo, cf.build, cf.repo.Config)
|
2019-06-05 08:08:49 +00:00
|
|
|
if fileerr == nil {
|
2019-06-04 13:04:18 +00:00
|
|
|
return []*remote.FileMeta{&remote.FileMeta{
|
|
|
|
Name: cf.repo.Config,
|
|
|
|
Data: file,
|
|
|
|
}}, nil
|
|
|
|
}
|
|
|
|
|
2019-06-24 07:04:30 +00:00
|
|
|
// or a folder
|
|
|
|
dir, direrr := cf.remote_.Dir(cf.user, cf.repo, cf.build, strings.TrimSuffix(cf.repo.Config, "/"))
|
2019-06-25 11:45:43 +00:00
|
|
|
|
|
|
|
if direrr == nil {
|
|
|
|
return dir, nil
|
|
|
|
} else if !cf.repo.Fallback {
|
2019-06-05 08:08:49 +00:00
|
|
|
return nil, direrr
|
2019-06-04 13:04:18 +00:00
|
|
|
}
|
2019-06-13 16:09:25 +00:00
|
|
|
|
2019-06-25 11:45:43 +00:00
|
|
|
// or fallback
|
|
|
|
file, fileerr = cf.remote_.File(cf.user, cf.repo, cf.build, ".drone.yml")
|
|
|
|
if fileerr != nil {
|
|
|
|
return nil, fileerr
|
|
|
|
}
|
|
|
|
|
|
|
|
return []*remote.FileMeta{&remote.FileMeta{
|
|
|
|
Name: cf.repo.Config,
|
|
|
|
Data: file,
|
|
|
|
}}, nil
|
2019-06-04 13:04:18 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return []*remote.FileMeta{}, nil
|
|
|
|
}
|