in tooling/templatize/pkg/pipeline/run.go [91:136]
func RunPipeline(pipeline *Pipeline, ctx context.Context, options *PipelineRunOptions) (map[string]output, error) {
logger := logr.FromContextOrDiscard(ctx)
outPuts := make(map[string]output)
// set working directory to the pipeline file directory for the
// duration of the execution so that all commands and file references
// within the pipeline file are resolved relative to the pipeline file
originalDir, err := os.Getwd()
if err != nil {
return nil, err
}
dir := filepath.Dir(pipeline.pipelineFilePath)
logger.V(7).Info("switch current dir to pipeline file directory", "path", dir)
err = os.Chdir(dir)
if err != nil {
return nil, err
}
defer func() {
logger.V(7).Info("switch back dir", "path", originalDir)
err = os.Chdir(originalDir)
if err != nil {
logger.Error(err, "failed to switch back to original directory", "path", originalDir)
}
}()
for _, rg := range pipeline.ResourceGroups {
// prepare execution context
subscriptionID, err := options.SubsciptionLookupFunc(ctx, rg.Subscription)
if err != nil {
return nil, fmt.Errorf("failed to lookup subscription ID for %q: %w", rg.Subscription, err)
}
executionTarget := executionTargetImpl{
subscriptionName: rg.Subscription,
subscriptionID: subscriptionID,
region: options.Region,
resourceGroup: rg.Name,
aksClusterName: rg.AKSCluster,
}
err = RunResourceGroup(rg, ctx, options, &executionTarget, outPuts)
if err != nil {
return nil, err
}
}
return outPuts, nil
}