Skip to content

Commit

Permalink
feat: suggest adding a target after provider install (daytonaio#1095)
Browse files Browse the repository at this point in the history
Signed-off-by: Toma Puljak <[email protected]>
  • Loading branch information
Tpuljak authored Sep 13, 2024
1 parent 9d78bff commit 30e6f92
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
6 changes: 6 additions & 0 deletions docs/daytona_provider_install.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ Install provider
daytona provider install [flags]
```

### Options

```
-y, --yes Automatically confirm any prompts
```

### Options inherited from parent commands

```
Expand Down
5 changes: 5 additions & 0 deletions hack/docs/daytona_provider_install.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: daytona provider install
synopsis: Install provider
usage: daytona provider install [flags]
options:
- name: "yes"
shorthand: "y"
default_value: "false"
usage: Automatically confirm any prompts
inherited_options:
- name: help
default_value: "false"
Expand Down
71 changes: 71 additions & 0 deletions pkg/cmd/provider/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
package provider

import (
"context"
"fmt"
"slices"

"github.com/charmbracelet/huh"
apiclient_util "github.com/daytonaio/daytona/internal/util/apiclient"
"github.com/daytonaio/daytona/pkg/apiclient"
"github.com/daytonaio/daytona/pkg/common"
Expand All @@ -14,12 +17,15 @@ import (
"github.com/daytonaio/daytona/pkg/views"
"github.com/daytonaio/daytona/pkg/views/provider"
provider_view "github.com/daytonaio/daytona/pkg/views/provider"
"github.com/daytonaio/daytona/pkg/views/target"
views_util "github.com/daytonaio/daytona/pkg/views/util"
"github.com/spf13/cobra"

log "github.com/sirupsen/logrus"
)

var yesFlag bool

var providerInstallCmd = &cobra.Command{
Use: "install",
Short: "Install provider",
Expand Down Expand Up @@ -93,9 +99,74 @@ var providerInstallCmd = &cobra.Command{
}

views.RenderInfoMessageBold(fmt.Sprintf("Provider %s has been successfully installed", providerToInstall.Name))

targets, res, err := apiClient.TargetAPI.ListTargets(context.Background()).Execute()
if err != nil {
log.Fatal(apiclient_util.HandleErrorResponse(res, err))
}

if slices.ContainsFunc(targets, func(t apiclient.ProviderTarget) bool {
return t.ProviderInfo.Name == providerToInstall.Name
}) {
return
}

if !yesFlag {
form := huh.NewForm(
huh.NewGroup(
huh.NewConfirm().
Title("Add a Target?").
Value(&yesFlag),
),
).WithTheme(views.GetCustomTheme())

err := form.Run()
if err != nil {
log.Fatal(err)
}
}

if yesFlag {
targetManifest, res, err := apiClient.ProviderAPI.GetTargetManifest(context.Background(), providerToInstall.Name).Execute()
if err != nil {
log.Fatal(apiclient_util.HandleErrorResponse(res, err))
}

targetToSet := &apiclient.ProviderTarget{
Options: "{}",
ProviderInfo: apiclient.ProviderProviderInfo{
Name: providerToInstall.Name,
Version: providerToInstall.Version,
},
}

err = target.NewTargetNameInput(&targetToSet.Name, []string{})
if err != nil {
log.Fatal(err)
}

err = target.SetTargetForm(targetToSet, *targetManifest)
if err != nil {
log.Fatal(err)
}

res, err = apiClient.TargetAPI.SetTarget(context.Background()).Target(*targetToSet).Execute()
if err != nil {
log.Fatal(apiclient_util.HandleErrorResponse(res, err))
}
if err != nil {
log.Fatal(err)
}

views.RenderInfoMessage("Target set successfully")
}
},
}

func init() {
providerInstallCmd.Flags().BoolVarP(&yesFlag, "yes", "y", false, "Automatically confirm any prompts")
}

func GetProviderListFromManifest(manifest *manager.ProvidersManifest) []apiclient.Provider {
pluginList := []apiclient.Provider{}
for pluginName, pluginManifest := range *manifest {
Expand Down

0 comments on commit 30e6f92

Please sign in to comment.