command

package
v0.0.0-...-7ec35f1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 31, 2024 License: MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const DEFANG_PORTAL_HOST = "portal.defang.dev"
View Source
const SERVICE_PORTAL_URL = "https://" + DEFANG_PORTAL_HOST + "/service"

Variables

View Source
var RootCmd = &cobra.Command{
	SilenceUsage:  true,
	SilenceErrors: true,
	Use:           "defang",
	Args:          cobra.NoArgs,
	Short:         "Defang CLI manages services on the Defang cluster",
	PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) {

		if IsCompletionCommand(cmd) {
			return nil
		}

		defer func() {
			trackCmd(cmd, "Invoked", P{"args", args}, P{"err", err}, P{"non-interactive", nonInteractive}, P{"provider", provider})
		}()

		switch colorMode {
		case ColorNever:
			term.ForceColor(false)
		case ColorAlways:
			term.ForceColor(true)
		}

		switch provider {
		case cliClient.ProviderAuto:
			if awsInEnv() {
				provider = cliClient.ProviderAWS
			} else {
				provider = cliClient.ProviderDefang
			}
		case cliClient.ProviderAWS:
			if !awsInEnv() {
				term.Warn(" ! AWS provider was selected, but AWS environment variables are not set")
			}
		case cliClient.ProviderDO:
			if !doInEnv() {
				term.Warn(" ! Digital Ocean provider was selected, but DO_PAT environment variable is not set")
			}
		case cliClient.ProviderDefang:
			if awsInEnv() {
				term.Warn(" ! Using Defang playground, but AWS environment variables were detected; did you forget --provider?")
			}
		}

		cwd, _ := cmd.Flags().GetString("cwd")
		if cwd != "" {

			if err = os.Chdir(cwd); err != nil {
				return err
			}
		}

		composeFilePath, _ := cmd.Flags().GetString("file")
		loader := cli.ComposeLoader{ComposeFilePath: composeFilePath}
		client = cli.NewClient(cluster, provider, loader)

		if v, err := client.GetVersions(cmd.Context()); err == nil {
			version := cmd.Root().Version
			term.Debug(" - Fabric:", v.Fabric, "CLI:", version, "CLI-Min:", v.CliMin)
			if hasTty && isNewer(version, v.CliMin) {
				term.Warn(" ! Your CLI version is outdated. Please update to the latest version.")
				os.Setenv("DEFANG_HIDE_UPDATE", "1")
			}
		}

		if _, ok := cmd.Annotations[authNeeded]; !ok {
			return nil
		}

		if err = client.CheckLoginAndToS(cmd.Context()); err != nil {
			if nonInteractive {
				return err
			}

			if connect.CodeOf(err) == connect.CodeUnauthenticated {
				term.Warn(" !", prettyError(err))

				defer trackCmd(nil, "Login", P{"reason", err})
				if err = cli.InteractiveLogin(cmd.Context(), client, gitHubClientId, cluster); err != nil {
					return err
				}

				client = cli.NewClient(cluster, provider, loader)
				if err = client.CheckLoginAndToS(cmd.Context()); err == nil {
					return nil
				}
			}

			if connect.CodeOf(err) == connect.CodeFailedPrecondition {
				term.Warn(" !", prettyError(err))

				defer trackCmd(nil, "Terms", P{"reason", err})
				if err = cli.InteractiveAgreeToS(cmd.Context(), client); err != nil {
					return err
				}
			}
		}
		return err
	},
}

Functions

func Execute

func Execute(ctx context.Context) error

func FlushAllTracking

func FlushAllTracking()

FlushAllTracking waits for all tracking goroutines to complete.

func GetCurrentVersion

func GetCurrentVersion() string

func GetLatestVersion

func GetLatestVersion(ctx context.Context) (string, error)

func IsCompletionCommand

func IsCompletionCommand(cmd *cobra.Command) bool

func SetupCommands

func SetupCommands(version string)

func Track

func Track(name string, props ...P)

Track sends a tracking event to the server in a separate goroutine.

Types

type ColorMode

type ColorMode string
const (
	// ColorNever disables color output.
	ColorNever ColorMode = "never"
	// ColorAuto enables color output only if the output is connected to a terminal.
	ColorAuto ColorMode = "auto"
	// ColorAlways enables color output.
	ColorAlways ColorMode = "always"
)

func (*ColorMode) Set

func (c *ColorMode) Set(value string) error

func (ColorMode) String

func (c ColorMode) String() string

func (ColorMode) Type

func (c ColorMode) Type() string

type ExitCode

type ExitCode int

func (ExitCode) Error

func (e ExitCode) Error() string

type P

type P = cliClient.Property // shorthand for tracking properties

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL