blob: 0f018e4d5ff468c638cbf4e90659f37ed11159ef [file] [log] [blame]
gio308105e2024-04-19 13:12:13 +04001package main
2
3import (
gio308105e2024-04-19 13:12:13 +04004 "log"
5 "os"
6
7 "golang.org/x/crypto/ssh"
8
9 "github.com/spf13/cobra"
10
11 "github.com/giolekva/pcloud/core/installer"
12 "github.com/giolekva/pcloud/core/installer/soft"
13)
14
15var rewriteFlags struct {
16 path string
17}
18
19func rewriteCmd() *cobra.Command {
20 cmd := &cobra.Command{
21 Use: "rewrite",
22 RunE: rewriteCmdRun,
23 }
24 cmd.Flags().StringVar(
25 &appManagerFlags.repoAddr,
26 "repo-addr",
27 "",
28 "",
29 )
30 cmd.Flags().StringVar(
31 &appManagerFlags.sshKey,
32 "ssh-key",
33 "",
34 "",
35 )
36 return cmd
37}
38
39func rewriteCmdRun(cmd *cobra.Command, args []string) error {
40 sshKey, err := os.ReadFile(appManagerFlags.sshKey)
41 if err != nil {
42 return err
43 }
44 signer, err := ssh.ParsePrivateKey(sshKey)
45 if err != nil {
46 return err
47 }
48 addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
49 if err != nil {
50 return err
51 }
52 repo, err := soft.CloneRepository(addr, signer)
53 if err != nil {
54 return err
55 }
56 log.Println("Cloned repository")
gioe72b54f2024-04-22 10:44:41 +040057 repoIO, err := soft.NewRepoIO(repo, signer)
gio308105e2024-04-19 13:12:13 +040058 if err != nil {
59 return err
60 }
61 log.Println("Creating repository")
gio09a3e5b2024-04-26 14:11:06 +040062 r := installer.NewInMemoryAppRepository(installer.CreateAllApps())
giof8843412024-05-22 16:38:05 +040063 hf := installer.NewGitHelmFetcher()
giof6ad2982024-08-23 17:42:49 +040064 mgr, err := installer.NewAppManager(repoIO, nil, nil, hf, nil, nil, "/apps")
gio308105e2024-04-19 13:12:13 +040065 if err != nil {
66 return err
67 }
gio7fbd4ad2024-08-27 10:06:39 +040068 all, err := mgr.GetAllInstances()
gio308105e2024-04-19 13:12:13 +040069 if err != nil {
70 return err
71 }
72 for _, inst := range all {
73 app, err := installer.FindEnvApp(r, inst.AppId)
74 if err != nil {
75 return err
76 }
77 v := inst.InputToValues(app.Schema())
giof8843412024-05-22 16:38:05 +040078 if _, err := mgr.Install(
79 app,
80 inst.Id,
81 inst.Release.AppDir,
82 inst.Release.Namespace,
83 v,
84 installer.WithNoPublish(),
85 ); err != nil {
gio308105e2024-04-19 13:12:13 +040086 return err
87 }
88 }
89 repoIO.CommitAndPush("upgrade: persist cue files")
90 return nil
91}