(w *world.World)
| 49 | } |
| 50 | |
| 51 | func runRollout(w *world.World) func(command *cobra.Command, _ []string) error { |
| 52 | return func(command *cobra.Command, _ []string) error { |
| 53 | defer func() { |
| 54 | output.WriteOutput(w) |
| 55 | }() |
| 56 | w.IsRollout = true |
| 57 | ctx := command.Context() |
| 58 | client, err := newClientFromWorld(w) |
| 59 | if err != nil { |
| 60 | return errors.Wrapf(err, "failed to create client") |
| 61 | } |
| 62 | defer client.close() |
| 63 | |
| 64 | // Check version compatibility |
| 65 | if err := checkVersionCompatibility(w, client, args.Version); err != nil { |
| 66 | return err |
| 67 | } |
| 68 | |
| 69 | var plan *v1pb.Plan |
| 70 | if w.Plan != "" { |
| 71 | planP, err := client.getPlan(ctx, w.Plan) |
| 72 | if err != nil { |
| 73 | return errors.Wrapf(err, "failed to get plan") |
| 74 | } |
| 75 | plan = planP |
| 76 | w.Logger.Info("use the provided plan", "url", fmt.Sprintf("%s/%s", client.url, plan.Name)) |
| 77 | } else { |
| 78 | var release string |
| 79 | releaseFiles, err := getReleaseFiles(w) |
| 80 | if err != nil { |
| 81 | return errors.Wrapf(err, "failed to get release files") |
| 82 | } |
| 83 | releaseType := v1pb.Release_VERSIONED |
| 84 | if w.Declarative { |
| 85 | releaseType = v1pb.Release_DECLARATIVE |
| 86 | } |
| 87 | createReleaseResponse, err := client.createRelease(ctx, w.Project, &v1pb.Release{ |
| 88 | Files: releaseFiles, |
| 89 | VcsSource: getVCSSource(w), |
| 90 | Type: releaseType, |
| 91 | }, w.ReleaseIDTemplate, w.ReleaseIDTimezone) |
| 92 | if err != nil { |
| 93 | return errors.Wrapf(err, "failed to create release") |
| 94 | } |
| 95 | w.Logger.Info("release created", "url", fmt.Sprintf("%s/%s", client.url, createReleaseResponse.Name)) |
| 96 | release = createReleaseResponse.Name |
| 97 | w.OutputMap.Release = release |
| 98 | |
| 99 | // Extract release ID from release name (format: projects/{project}/releases/{release_id}) |
| 100 | releaseID := strings.TrimPrefix(release, w.Project+"/releases/") |
| 101 | |
| 102 | planCreated, err := client.createPlan(ctx, w.Project, &v1pb.Plan{ |
| 103 | Title: releaseID, |
| 104 | Specs: []*v1pb.Plan_Spec{ |
| 105 | { |
| 106 | Id: uuid.New().String(), |
| 107 | Config: &v1pb.Plan_Spec_ChangeDatabaseConfig{ |
| 108 | ChangeDatabaseConfig: &v1pb.Plan_ChangeDatabaseConfig{ |
no test coverage detected