Skip to content

Commit 241b77d

Browse files
committed
Show package readme in browser
1 parent 3a036dc commit 241b77d

5 files changed

Lines changed: 251 additions & 44 deletions

File tree

Gopkg.lock

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/add.go

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@ import (
88
"strconv"
99
"strings"
1010

11+
"k8s.io/helm/pkg/repo"
12+
13+
"github.com/covexo/devspace/pkg/util/stdinutil"
14+
"github.com/covexo/devspace/pkg/util/tar"
1115
"github.com/covexo/devspace/pkg/util/yamlutil"
1216

1317
helmClient "github.com/covexo/devspace/pkg/devspace/clients/helm"
1418
"github.com/covexo/devspace/pkg/devspace/clients/kubectl"
1519
"github.com/covexo/devspace/pkg/devspace/config/configutil"
1620
"github.com/covexo/devspace/pkg/devspace/config/v1"
1721
"github.com/covexo/devspace/pkg/util/log"
22+
"github.com/russross/blackfriday"
23+
"github.com/skratchdot/open-golang/open"
1824
"github.com/spf13/cobra"
1925
)
2026

@@ -47,6 +53,7 @@ type addPortCmdFlags struct {
4753
type addPackageFlags struct {
4854
AppVersion string
4955
ChartVersion string
56+
SkipQuestion bool
5057
}
5158

5259
func init() {
@@ -148,6 +155,7 @@ func init() {
148155

149156
addPackageCmd.Flags().StringVar(&cmd.packageFlags.AppVersion, "app-version", "", "App version")
150157
addPackageCmd.Flags().StringVar(&cmd.packageFlags.ChartVersion, "chart-version", "", "Chart version")
158+
addPackageCmd.Flags().BoolVar(&cmd.packageFlags.SkipQuestion, "skip-question", false, "Skips the question to show the readme in a browser")
151159

152160
addCmd.AddCommand(addPackageCmd)
153161
}
@@ -185,7 +193,6 @@ func (cmd *AddCmd) RunAddPackage(cobraCmd *cobra.Command, args []string) {
185193
}
186194

187195
requirementsFile := filepath.Join(cwd, "chart", "requirements.yaml")
188-
189196
_, err = os.Stat(requirementsFile)
190197
if os.IsNotExist(err) {
191198
entry := "dependencies:\n" +
@@ -233,7 +240,60 @@ func (cmd *AddCmd) RunAddPackage(cobraCmd *cobra.Command, args []string) {
233240
log.Fatal(err)
234241
}
235242

236-
log.Donef("Successfully added %s as chart dependency", version.GetName())
243+
f, err := os.OpenFile(filepath.Join(cwd, "chart", "values.yaml"), os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
244+
if err != nil {
245+
log.Fatal(err)
246+
}
247+
248+
defer f.Close()
249+
if _, err = f.WriteString("\n" + version.GetName() + ": {}\n"); err != nil {
250+
log.Fatal(err)
251+
}
252+
253+
log.Donef("Successfully added %s as chart dependency, you can configure the package in 'chart/values.yaml'", version.GetName())
254+
cmd.showReadme(version)
255+
}
256+
257+
func (cmd *AddCmd) showReadme(chartVersion *repo.ChartVersion) {
258+
cwd, err := os.Getwd()
259+
if err != nil {
260+
log.Fatal(err)
261+
}
262+
263+
if cmd.packageFlags.SkipQuestion {
264+
return
265+
}
266+
267+
showReadme := *stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
268+
Question: "Do you want to open the package README? (y|n)",
269+
DefaultValue: "y",
270+
ValidationRegexPattern: "^(y|n)",
271+
})
272+
273+
if showReadme == "n" {
274+
return
275+
}
276+
277+
content, err := tar.ExtractSingleFileToStringTarGz(filepath.Join(cwd, "chart", "charts", chartVersion.GetName()+"-"+chartVersion.GetVersion()+".tgz"), chartVersion.GetName()+"/README.md")
278+
if err != nil {
279+
log.Fatal(err)
280+
}
281+
282+
output := blackfriday.MarkdownCommon([]byte(content))
283+
f, err := os.OpenFile(filepath.Join(os.TempDir(), "Readme.html"), os.O_RDWR|os.O_CREATE, 0600)
284+
if err != nil {
285+
log.Fatal(err)
286+
}
287+
288+
defer f.Close()
289+
290+
_, err = f.Write(output)
291+
if err != nil {
292+
log.Fatal(err)
293+
}
294+
295+
f.Close()
296+
open.Start(f.Name())
237297
}
238298

239299
// RunAddSync executes the add sync command logic
@@ -284,7 +344,6 @@ func (cmd *AddCmd) RunAddSync(cobraCmd *cobra.Command, args []string) {
284344
config.DevSpace.Sync = &syncConfig
285345

286346
err = configutil.SaveConfig()
287-
288347
if err != nil {
289348
log.Fatalf("Couldn't save config file: %s", err.Error())
290349
}

cmd/remove.go

Lines changed: 72 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ import (
1717

1818
// RemoveCmd holds the information needed for the remove command
1919
type RemoveCmd struct {
20-
syncFlags *removeSyncCmdFlags
21-
portFlags *removePortCmdFlags
22-
workdir string
20+
syncFlags *removeSyncCmdFlags
21+
portFlags *removePortCmdFlags
22+
packageFlags *removePackageCmdFlags
23+
workdir string
2324
}
2425

2526
type removeSyncCmdFlags struct {
@@ -34,10 +35,15 @@ type removePortCmdFlags struct {
3435
RemoveAll bool
3536
}
3637

38+
type removePackageCmdFlags struct {
39+
RemoveAll bool
40+
}
41+
3742
func init() {
3843
cmd := &RemoveCmd{
39-
syncFlags: &removeSyncCmdFlags{},
40-
portFlags: &removePortCmdFlags{},
44+
syncFlags: &removeSyncCmdFlags{},
45+
portFlags: &removePortCmdFlags{},
46+
packageFlags: &removePackageCmdFlags{},
4147
}
4248

4349
removeCmd := &cobra.Command{
@@ -123,6 +129,7 @@ func init() {
123129
Run: cmd.RunRemovePackage,
124130
}
125131

132+
removePackageCmd.Flags().BoolVar(&cmd.packageFlags.RemoveAll, "all", false, "Remove all packages")
126133
removeCmd.AddCommand(removePackageCmd)
127134
}
128135

@@ -133,6 +140,10 @@ func (cmd *RemoveCmd) RunRemovePackage(cobraCmd *cobra.Command, args []string) {
133140
log.Fatal(err)
134141
}
135142

143+
if len(args) == 0 && cmd.packageFlags.RemoveAll == false {
144+
log.Fatal("You need to specify a package name or the --all flag")
145+
}
146+
136147
requirementsPath := filepath.Join(cwd, "chart", "requirements.yaml")
137148
yamlContents := map[interface{}]interface{}{}
138149

@@ -147,48 +158,72 @@ func (cmd *RemoveCmd) RunRemovePackage(cobraCmd *cobra.Command, args []string) {
147158
log.Fatalf("Error parsing yaml: %v", dependencies)
148159
}
149160

150-
for key, dependency := range dependenciesArr {
151-
dependencyMap, ok := dependency.(map[interface{}]interface{})
152-
if ok == false {
153-
log.Fatalf("Error parsing yaml: %v", dependencies)
154-
}
161+
if cmd.packageFlags.RemoveAll == false {
162+
for key, dependency := range dependenciesArr {
163+
dependencyMap, ok := dependency.(map[interface{}]interface{})
164+
if ok == false {
165+
log.Fatalf("Error parsing yaml: %v", dependencies)
166+
}
155167

156-
if name, ok := dependencyMap["name"]; ok {
157-
if name == args[0] {
158-
dependenciesArr = append(dependenciesArr[:key], dependenciesArr[key+1:]...)
159-
yamlContents["dependencies"] = dependenciesArr
168+
if name, ok := dependencyMap["name"]; ok {
169+
if name == args[0] {
170+
dependenciesArr = append(dependenciesArr[:key], dependenciesArr[key+1:]...)
171+
yamlContents["dependencies"] = dependenciesArr
160172

161-
err = yamlutil.WriteYamlToFile(yamlContents, requirementsPath)
162-
if err != nil {
163-
log.Fatal(err)
164-
}
173+
err = yamlutil.WriteYamlToFile(yamlContents, requirementsPath)
174+
if err != nil {
175+
log.Fatal(err)
176+
}
165177

166-
// Rebuild dependencies
167-
kubectl, err := kubectl.NewClient()
168-
if err != nil {
169-
log.Fatalf("Unable to create new kubectl client: %v", err)
178+
cmd.rebuildDependencies()
179+
break
170180
}
181+
}
182+
}
171183

172-
helm, err := helmClient.NewClient(kubectl, false)
173-
if err != nil {
174-
log.Fatalf("Error initializing helm client: %v", err)
175-
}
176-
177-
log.StartWait("Update chart dependencies")
178-
err = helm.UpdateDependencies(filepath.Join(cwd, "chart"))
179-
log.StopWait()
180-
181-
if err != nil {
182-
log.Fatal(err)
183-
}
184+
log.Donef("Successfully removed dependency %s", args[0])
185+
return
186+
} else {
187+
yamlContents["dependencies"] = []interface{}{}
184188

185-
break
186-
}
189+
err = yamlutil.WriteYamlToFile(yamlContents, requirementsPath)
190+
if err != nil {
191+
log.Fatal(err)
187192
}
193+
194+
cmd.rebuildDependencies()
195+
log.Done("Successfully removed all dependencies")
196+
return
188197
}
189198
}
190199

191-
log.Donef("Successfully removed dependency %s", args[0])
200+
log.Done("No dependencies found")
201+
}
202+
203+
func (cmd *RemoveCmd) rebuildDependencies() {
204+
cwd, err := os.Getwd()
205+
if err != nil {
206+
log.Fatal(err)
207+
}
208+
209+
// Rebuild dependencies
210+
kubectl, err := kubectl.NewClient()
211+
if err != nil {
212+
log.Fatalf("Unable to create new kubectl client: %v", err)
213+
}
214+
215+
helm, err := helmClient.NewClient(kubectl, false)
216+
if err != nil {
217+
log.Fatalf("Error initializing helm client: %v", err)
218+
}
219+
220+
log.StartWait("Update chart dependencies")
221+
err = helm.UpdateDependencies(filepath.Join(cwd, "chart"))
222+
log.StopWait()
223+
224+
if err != nil {
225+
log.Fatal(err)
226+
}
192227
}
193228

194229
// RunRemoveSync executes the remove sync command logic

main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/covexo/devspace/cmd"
77
"github.com/covexo/devspace/pkg/devspace/upgrade"
8-
98
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
109
)
1110

0 commit comments

Comments
 (0)