// FetchConfig reads the specified file from the SourceRepository and loads the // TaskConfig contained therein (expecting it to be YAML format). // // The path must be in the format SOURCE_NAME/FILE/PATH.yml. The SOURCE_NAME // will be used to determine the ArtifactSource in the SourceRepository to // stream the file out of. // // If the source name is missing (i.e. if the path is just "foo.yml"), // UnspecifiedArtifactSourceError is returned. // // If the specified source name cannot be found, UnknownArtifactSourceError is // returned. // // If the task config file is not found, or is invalid YAML, or is an invalid // task configuration, the respective errors will be bubbled up. func (configSource FileConfigSource) FetchConfig(repo *SourceRepository) (atc.TaskConfig, error) { segs := strings.SplitN(configSource.Path, "/", 2) if len(segs) != 2 { return atc.TaskConfig{}, UnspecifiedArtifactSourceError{configSource.Path} } sourceName := SourceName(segs[0]) filePath := segs[1] source, found := repo.SourceFor(sourceName) if !found { return atc.TaskConfig{}, UnknownArtifactSourceError{sourceName} } stream, err := source.StreamFile(filePath) if err != nil { return atc.TaskConfig{}, err } defer stream.Close() streamedFile, err := ioutil.ReadAll(stream) if err != nil { return atc.TaskConfig{}, err } config, err := atc.LoadTaskConfig(streamedFile) if err != nil { return atc.TaskConfig{}, fmt.Errorf("failed to load %s: %s", configSource.Path, err) } return config, nil }
func LoadTaskConfig(configPath string, args []string) (atc.TaskConfig, error) { configFile, err := ioutil.ReadFile(configPath) if err != nil { return atc.TaskConfig{}, fmt.Errorf("failed to read task config: %s", err) } config, err := atc.LoadTaskConfig(configFile) if err != nil { return atc.TaskConfig{}, err } config.Run.Args = append(config.Run.Args, args...) for k, _ := range config.Params { env, found := syscall.Getenv(k) if found { config.Params[k] = env } } return config, nil }