blob: c4bc7a86d50a82bd9c2225a01ebb3a64a6a96bc2 [file] [log] [blame]
gio308105e2024-04-19 13:12:13 +04001package main
2
3import (
4 "fmt"
5 "log"
6 "os"
7
8 "golang.org/x/crypto/ssh"
9
10 "github.com/spf13/cobra"
11
12 "github.com/giolekva/pcloud/core/installer"
13 "github.com/giolekva/pcloud/core/installer/soft"
14)
15
16var rewriteFlags struct {
17 path string
18}
19
20func rewriteCmd() *cobra.Command {
21 cmd := &cobra.Command{
22 Use: "rewrite",
23 RunE: rewriteCmdRun,
24 }
25 cmd.Flags().StringVar(
26 &appManagerFlags.repoAddr,
27 "repo-addr",
28 "",
29 "",
30 )
31 cmd.Flags().StringVar(
32 &appManagerFlags.sshKey,
33 "ssh-key",
34 "",
35 "",
36 )
37 return cmd
38}
39
40func rewriteCmdRun(cmd *cobra.Command, args []string) error {
41 sshKey, err := os.ReadFile(appManagerFlags.sshKey)
42 if err != nil {
43 return err
44 }
45 signer, err := ssh.ParsePrivateKey(sshKey)
46 if err != nil {
47 return err
48 }
49 addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
50 if err != nil {
51 return err
52 }
53 repo, err := soft.CloneRepository(addr, signer)
54 if err != nil {
55 return err
56 }
57 log.Println("Cloned repository")
gioe72b54f2024-04-22 10:44:41 +040058 repoIO, err := soft.NewRepoIO(repo, signer)
gio308105e2024-04-19 13:12:13 +040059 if err != nil {
60 return err
61 }
62 log.Println("Creating repository")
gio09a3e5b2024-04-26 14:11:06 +040063 r := installer.NewInMemoryAppRepository(installer.CreateAllApps())
gio308105e2024-04-19 13:12:13 +040064 mgr, err := installer.NewAppManager(repoIO, nil, "/apps")
65 if err != nil {
66 return err
67 }
68 env, err := mgr.Config()
69 if err != nil {
70 return err
71 }
72 fmt.Printf("%+v\n", env)
73 log.Println("Read config")
74 if err != nil {
75 return err
76 }
77 all, err := mgr.FindAllInstances()
78 if err != nil {
79 return err
80 }
81 for _, inst := range all {
82 app, err := installer.FindEnvApp(r, inst.AppId)
83 if err != nil {
84 return err
85 }
86 v := inst.InputToValues(app.Schema())
gio778577f2024-04-29 09:44:38 +040087 if _, err := mgr.Update(app, inst.Id, v, soft.WithNoCommit()); err != nil {
gio308105e2024-04-19 13:12:13 +040088 return err
89 }
90 }
91 repoIO.CommitAndPush("upgrade: persist cue files")
92 return nil
93}