cli/azd/cmd/version.go (59 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package cmd
import (
"context"
"fmt"
"io"
"github.com/azure/azure-dev/cli/azd/cmd/actions"
"github.com/azure/azure-dev/cli/azd/internal"
"github.com/azure/azure-dev/cli/azd/pkg/contracts"
"github.com/azure/azure-dev/cli/azd/pkg/input"
"github.com/azure/azure-dev/cli/azd/pkg/output"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
type versionFlags struct {
global *internal.GlobalCommandOptions
}
func (v *versionFlags) Bind(local *pflag.FlagSet, global *internal.GlobalCommandOptions) {
v.global = global
}
func newVersionFlags(cmd *cobra.Command, global *internal.GlobalCommandOptions) *versionFlags {
flags := &versionFlags{}
flags.Bind(cmd.Flags(), global)
return flags
}
type versionAction struct {
flags *versionFlags
formatter output.Formatter
writer io.Writer
console input.Console
}
func newVersionAction(
flags *versionFlags,
formatter output.Formatter,
writer io.Writer,
console input.Console,
) actions.Action {
return &versionAction{
flags: flags,
formatter: formatter,
writer: writer,
console: console,
}
}
func (v *versionAction) Run(ctx context.Context) (*actions.ActionResult, error) {
switch v.formatter.Kind() {
case output.NoneFormat:
fmt.Fprintf(v.console.Handles().Stdout, "azd version %s\n", internal.Version)
case output.JsonFormat:
var result contracts.VersionResult
versionSpec := internal.VersionInfo()
result.Azd.Commit = versionSpec.Commit
result.Azd.Version = versionSpec.Version.String()
err := v.formatter.Format(result, v.writer, nil)
if err != nil {
return nil, err
}
}
return nil, nil
}