// Parse parses the Yaml build definition file // and returns an execution Tree. func Parse(raw string, rules []RuleFunc) (*Tree, error) { conf, err := yaml.ParseString(raw) if err != nil { return nil, err } return Load(conf, rules) }
func (a *Agent) prep(w *drone.Payload) (*yaml.Config, error) { envs := toEnv(w) w.Yaml = expander.ExpandString(w.Yaml, envs) // inject the netrc file into the clone plugin if the repositroy is // private and requires authentication. var secrets []*drone.Secret if w.Build.Verified { secrets = append(secrets, w.Secrets...) } if w.Repo.IsPrivate { secrets = append(secrets, &drone.Secret{ Name: "DRONE_NETRC_USERNAME", Value: w.Netrc.Login, Images: []string{"*"}, Events: []string{"*"}, }) secrets = append(secrets, &drone.Secret{ Name: "DRONE_NETRC_PASSWORD", Value: w.Netrc.Password, Images: []string{"*"}, Events: []string{"*"}, }) secrets = append(secrets, &drone.Secret{ Name: "DRONE_NETRC_MACHINE", Value: w.Netrc.Machine, Images: []string{"*"}, Events: []string{"*"}, }) } conf, err := yaml.ParseString(w.Yaml) if err != nil { return nil, err } src := "src" if url, _ := url.Parse(w.Repo.Link); url != nil { src = filepath.Join(src, url.Host, url.Path) } transform.Clone(conf, w.Repo.Kind) transform.Environ(conf, envs) transform.DefaultFilter(conf) if w.BuildLast != nil { transform.ChangeFilter(conf, w.BuildLast.Status) } transform.ImageSecrets(conf, secrets, w.Build.Event) transform.Identifier(conf) transform.WorkspaceTransform(conf, "/drone", src) if err := transform.Check(conf, w.Repo.IsTrusted); err != nil { return nil, err } transform.CommandTransform(conf) transform.ImagePull(conf, a.Pull) transform.ImageTag(conf) transform.ImageName(conf) transform.ImageNamespace(conf, a.Namespace) transform.ImageEscalate(conf, a.Escalate) transform.PluginParams(conf) if a.Local != "" { transform.PluginDisable(conf, a.Disable) transform.ImageVolume(conf, []string{a.Local + ":" + conf.Workspace.Path}) } transform.Pod(conf) return conf, nil }