func Download(output Output, atcRequester *deprecated.AtcRequester) { path := output.Path pipe := output.Pipe downloadBits, err := atcRequester.CreateRequest( atc.ReadPipe, rata.Params{"pipe_id": pipe.ID}, nil, ) if err != nil { panic(err) } response, err := atcRequester.HttpClient.Do(downloadBits) if err != nil { fmt.Fprintln(os.Stderr, "download request failed:", err) } defer response.Body.Close() if response.StatusCode != http.StatusOK { fmt.Fprintln(os.Stderr, badResponseError("downloading bits", response)) panic("unexpected-response-code") } err = os.MkdirAll(path, 0755) if err != nil { panic(err) } err = tarStreamTo(path, response.Body) if err != nil { panic(err) } }
func Upload(input Input, excludeIgnored bool, atcRequester *deprecated.AtcRequester) { path := input.Path pipe := input.Pipe var files []string var err error if excludeIgnored { files, err = getGitFiles(path) if err != nil { fmt.Fprintln(os.Stderr, "could not determine ignored files:", err) return } } else { files = []string{"."} } archive, err := tarStreamFrom(path, files) if err != nil { fmt.Fprintln(os.Stderr, "could create tar stream:", err) return } defer archive.Close() uploadBits, err := atcRequester.CreateRequest( atc.WritePipe, rata.Params{"pipe_id": pipe.ID}, archive, ) if err != nil { panic(err) } response, err := atcRequester.HttpClient.Do(uploadBits) if err != nil { fmt.Fprintln(os.Stderr, "upload request failed:", err) return } defer response.Body.Close() if response.StatusCode != http.StatusOK { fmt.Fprintln(os.Stderr, badResponseError("uploading bits", response)) } }
func CreateBuild( atcRequester *deprecated.AtcRequester, client concourse.Client, privileged bool, inputs []Input, outputs []Output, config atc.TaskConfig, tags []string, target string, ) (atc.Build, error) { if err := config.Validate(); err != nil { return atc.Build{}, err } targetProps, err := rc.SelectTarget(target) if err != nil { return atc.Build{}, err } buildInputs := atc.AggregatePlan{} for i, input := range inputs { var getPlan atc.GetPlan if input.Path != "" { readPipe, err := atcRequester.CreateRequest( atc.ReadPipe, rata.Params{"pipe_id": input.Pipe.ID}, nil, ) if err != nil { return atc.Build{}, err } source := atc.Source{ "uri": readPipe.URL.String(), } if targetProps.Token != nil { source["authorization"] = targetProps.Token.Type + " " + targetProps.Token.Value } getPlan = atc.GetPlan{ Name: input.Name, Type: "archive", Source: source, } } else { getPlan = atc.GetPlan{ Name: input.Name, Type: input.BuildInput.Type, Source: input.BuildInput.Source, Version: input.BuildInput.Version, Params: input.BuildInput.Params, Tags: input.BuildInput.Tags, } } buildInputs = append(buildInputs, atc.Plan{ Location: &atc.Location{ // offset by 2 because aggregate gets parallelgroup ID 1 ID: uint(i) + 2, ParentID: 0, ParallelGroup: 1, }, Get: &getPlan, }) } taskPlan := atc.Plan{ Location: &atc.Location{ // offset by 1 because aggregate gets parallelgroup ID 1 ID: uint(len(inputs)) + 2, ParentID: 0, }, Task: &atc.TaskPlan{ Name: "one-off", Privileged: privileged, Config: &config, }, } if len(tags) != 0 { taskPlan.Task.Tags = tags } buildOutputs := atc.AggregatePlan{} for i, output := range outputs { writePipe, err := atcRequester.CreateRequest( atc.WritePipe, rata.Params{"pipe_id": output.Pipe.ID}, nil, ) if err != nil { return atc.Build{}, err } source := atc.Source{ "uri": writePipe.URL.String(), } params := atc.Params{ "directory": output.Name, } if targetProps.Token != nil { source["authorization"] = targetProps.Token.Type + " " + targetProps.Token.Value } buildOutputs = append(buildOutputs, atc.Plan{ Location: &atc.Location{ ID: taskPlan.Location.ID + 2 + uint(i), ParentID: 0, ParallelGroup: taskPlan.Location.ID + 1, }, Put: &atc.PutPlan{ Name: output.Name, Type: "archive", Source: source, Params: params, }, }) } var plan atc.Plan if len(buildOutputs) == 0 { plan = atc.Plan{ OnSuccess: &atc.OnSuccessPlan{ Step: atc.Plan{ Aggregate: &buildInputs, }, Next: taskPlan, }, } } else { plan = atc.Plan{ OnSuccess: &atc.OnSuccessPlan{ Step: atc.Plan{ Aggregate: &buildInputs, }, Next: atc.Plan{ Ensure: &atc.EnsurePlan{ Step: taskPlan, Next: atc.Plan{ Aggregate: &buildOutputs, }, }, }, }, } } return client.CreateBuild(plan) }
func CreateBuild( atcRequester *deprecated.AtcRequester, client concourse.Client, privileged bool, inputs []Input, outputs []Output, config atc.TaskConfig, tags []string, target string, ) (atc.Build, error) { fact := atc.NewPlanFactory(time.Now().Unix()) if err := config.Validate(); err != nil { return atc.Build{}, err } targetProps, err := rc.SelectTarget(target) if err != nil { return atc.Build{}, err } buildInputs := atc.AggregatePlan{} for _, input := range inputs { var getPlan atc.GetPlan if input.Path != "" { readPipe, err := atcRequester.CreateRequest( atc.ReadPipe, rata.Params{"pipe_id": input.Pipe.ID}, nil, ) if err != nil { return atc.Build{}, err } source := atc.Source{ "uri": readPipe.URL.String(), } if targetProps.Token != nil { source["authorization"] = targetProps.Token.Type + " " + targetProps.Token.Value } getPlan = atc.GetPlan{ Name: input.Name, Type: "archive", Source: source, } } else { getPlan = atc.GetPlan{ Name: input.Name, Type: input.BuildInput.Type, Source: input.BuildInput.Source, Version: input.BuildInput.Version, Params: input.BuildInput.Params, Tags: input.BuildInput.Tags, } } buildInputs = append(buildInputs, fact.NewPlan(getPlan)) } taskPlan := fact.NewPlan(atc.TaskPlan{ Name: "one-off", Privileged: privileged, Config: &config, }) if len(tags) != 0 { taskPlan.Task.Tags = tags } buildOutputs := atc.AggregatePlan{} for _, output := range outputs { writePipe, err := atcRequester.CreateRequest( atc.WritePipe, rata.Params{"pipe_id": output.Pipe.ID}, nil, ) if err != nil { return atc.Build{}, err } source := atc.Source{ "uri": writePipe.URL.String(), } params := atc.Params{ "directory": output.Name, } if targetProps.Token != nil { source["authorization"] = targetProps.Token.Type + " " + targetProps.Token.Value } buildOutputs = append(buildOutputs, fact.NewPlan(atc.PutPlan{ Name: output.Name, Type: "archive", Source: source, Params: params, })) } var plan atc.Plan if len(buildOutputs) == 0 { plan = fact.NewPlan(atc.DoPlan{ fact.NewPlan(buildInputs), taskPlan, }) } else { plan = fact.NewPlan(atc.DoPlan{ fact.NewPlan(buildInputs), fact.NewPlan(atc.EnsurePlan{ Step: taskPlan, Next: fact.NewPlan(buildOutputs), }), }) } return client.CreateBuild(plan) }