mirror of https://github.com/knative/func.git
				
				
				
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package cmd
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/ory/viper"
 | |
| 	"github.com/spf13/cobra"
 | |
| 
 | |
| 	"knative.dev/func/pkg/config"
 | |
| 	fn "knative.dev/func/pkg/functions"
 | |
| )
 | |
| 
 | |
| func NewLanguagesCmd(newClient ClientFactory) *cobra.Command {
 | |
| 	cmd := &cobra.Command{
 | |
| 		Use:   "languages",
 | |
| 		Short: "List available function language runtimes",
 | |
| 		Long: `
 | |
| NAME
 | |
| 	{{rootCmdUse}} languages - list available language runtimes.
 | |
| 
 | |
| SYNOPSIS
 | |
| 	{{rootCmdUse}} languages [--json] [-r|--repository]
 | |
| 
 | |
| DESCRIPTION
 | |
| 	List the language runtimes that are currently available.
 | |
| 	This includes embedded (included) language runtimes as well as any installed
 | |
| 	via the 'repositories add' command.
 | |
| 
 | |
| 	To specify a URI of a single, specific repository for which languages
 | |
| 	should be displayed, use the --repository flag.
 | |
| 
 | |
| 	Installed repositories are by default located at ~/.func/repositories
 | |
| 	($XDG_CONFIG_HOME/.func/repositories).  This can be overridden with
 | |
| 	$FUNC_REPOSITORIES_PATH.
 | |
| 
 | |
| 	To see templates available for a given language, see the 'templates' command.
 | |
| 
 | |
| 
 | |
| EXAMPLES
 | |
| 
 | |
| 	o Show a list of all available language runtimes
 | |
| 	  $ {{rootCmdUse}} languages
 | |
| 
 | |
| 	o Return a list of all language runtimes in JSON
 | |
| 	  $ {{rootCmdUse}} languages --json
 | |
| 
 | |
| 	o Return language runtimes in a specific repository
 | |
| 		$ {{rootCmdUse}} languages --repository=https://github.com/boson-project/templates
 | |
| `,
 | |
| 		SuggestFor: []string{"language", "runtime", "runtimes", "lnaguages", "languagse",
 | |
| 			"panguages", "manguages", "kanguages", "lsnguages", "lznguages"},
 | |
| 		PreRunE: bindEnv("json", "repository", "verbose"),
 | |
| 		RunE: func(cmd *cobra.Command, args []string) error {
 | |
| 			return runLanguages(cmd, newClient)
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	// Global Config
 | |
| 	cfg, err := config.NewDefault()
 | |
| 	if err != nil {
 | |
| 		fmt.Fprintf(cmd.OutOrStdout(), "error loading config at '%v'. %v\n", config.File(), err)
 | |
| 	}
 | |
| 
 | |
| 	cmd.Flags().BoolP("json", "", false, "Set output to JSON format. ($FUNC_JSON)")
 | |
| 	cmd.Flags().StringP("repository", "r", "", "URI to a specific repository to consider ($FUNC_REPOSITORY)")
 | |
| 	addVerboseFlag(cmd, cfg.Verbose)
 | |
| 
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func runLanguages(cmd *cobra.Command, newClient ClientFactory) (err error) {
 | |
| 	cfg, err := newLanguagesConfig()
 | |
| 	if err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	client, done := newClient(
 | |
| 		ClientConfig{Verbose: cfg.Verbose},
 | |
| 		fn.WithRepository(cfg.Repository))
 | |
| 	defer done()
 | |
| 
 | |
| 	runtimes, err := client.Runtimes()
 | |
| 	if err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if cfg.JSON {
 | |
| 		var s []byte
 | |
| 		s, err = json.MarshalIndent(runtimes, "", "  ")
 | |
| 		if err != nil {
 | |
| 			return
 | |
| 		}
 | |
| 		fmt.Fprintln(cmd.OutOrStdout(), string(s))
 | |
| 	} else {
 | |
| 		for _, runtime := range runtimes {
 | |
| 			fmt.Fprintln(cmd.OutOrStdout(), runtime)
 | |
| 		}
 | |
| 	}
 | |
| 	return
 | |
| }
 | |
| 
 | |
| type languagesConfig struct {
 | |
| 	Verbose    bool
 | |
| 	Repository string // Consider only a specific repository (URI)
 | |
| 	JSON       bool   // output as JSON
 | |
| }
 | |
| 
 | |
| func newLanguagesConfig() (cfg languagesConfig, err error) {
 | |
| 	cfg = languagesConfig{
 | |
| 		Verbose:    viper.GetBool("verbose"),
 | |
| 		Repository: viper.GetString("repository"),
 | |
| 		JSON:       viper.GetBool("json"),
 | |
| 	}
 | |
| 
 | |
| 	return
 | |
| }
 |