Пример #1
0
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
}