func (c *ExecCommand) parseYaml(job string, build *common.GetBuildResponse) error { data, err := ioutil.ReadFile(".gitlab-ci.yml") if err != nil { return err } build.Name = job // parse gitlab-ci.yml config := make(common.BuildOptions) err = yaml.Unmarshal(data, config) if err != nil { return err } err = config.Sanitize() if err != nil { return err } // get job jobConfig, ok := config.GetSubOptions(job) if !ok { return fmt.Errorf("no job named %q", job) } build.Commands, err = c.buildCommands(config["before_script"], jobConfig["script"]) if err != nil { return err } build.Variables, err = c.buildGlobalAndJobVariables(config["variables"], jobConfig["variables"]) if err != nil { return err } build.Options, err = c.buildOptions(config, jobConfig) if err != nil { return err } if stage, ok := jobConfig.GetString("stage"); ok { build.Stage = stage } else { build.Stage = "test" } return nil }