Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Get executable name from the command #326

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/accounts_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ var accountsCreateCmd = &cobra.Command{
}
account, err := stackManager.CreateAccount(args[1:])
if err != nil {
return err
return fmt.Errorf("%s. usage: %s accounts create <stack_name> <org_name> <account_name>", err.Error(), ExecutableName)
}
fmt.Print(account)
fmt.Print("\n")
Expand Down
2 changes: 1 addition & 1 deletion cmd/accounts_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ func TestAccountListCmd(t *testing.T) {
testNames := []string{"stack-1", "stack-2", "stack-3", "stack-4", "stack-5"}
for _, stackNames := range testNames {
createCmd := accountsCreateCmd
createCmd.SetArgs([]string{"ff", "create", stackNames})
createCmd.SetArgs([]string{ExecutableName, "create", stackNames})
err := createCmd.Execute()
if err != nil {
t.Fatalf("Failed to create account for testing: %v", err)
Expand Down
2 changes: 1 addition & 1 deletion cmd/deploy_ethereum.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ solc --combined-json abi,bin contract.sol > contract.json
}
location, err := stackManager.DeployContract(filename, selectedContractName, 0, args[2:])
if err != nil {
return err
return fmt.Errorf("%s. usage: %s deploy <stack_name> <filename> <channel> <chaincode> <version>", err.Error(), ExecutableName)
}
fmt.Print(location)
return nil
Expand Down
2 changes: 1 addition & 1 deletion cmd/deploy_fabric.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ var deployFabricCmd = &cobra.Command{
}
contractAddress, err := stackManager.DeployContract(filename, filename, 0, args[2:])
if err != nil {
return err
return fmt.Errorf("%s. usage: %s deploy <stack_name> <filename> <channel> <chaincode> <version>", err.Error(), ExecutableName)
}
fmt.Print(contractAddress)
return nil
Expand Down
2 changes: 1 addition & 1 deletion cmd/ps.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ var psCmd = &cobra.Command{
if contains(allStacks, strings.TrimSpace(stackName)) {
namedStacks = append(namedStacks, stackName)
} else {
fmt.Printf("stack name - %s, is not present on your local machine. Run `ff ls` to see all available stacks.\n", stackName)
fmt.Printf("stack name - %s, is not present on your local machine. Run `%s ls` to see all available stacks.\n", stackName, ExecutableName)
}
}

Expand Down
7 changes: 5 additions & 2 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ var logger log.Logger = &log.StdoutLogger{
LogLevel: log.Debug,
}

// name of the executable, this is for the help messages
var ExecutableName string = os.Args[0]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so if this arg has paths it will show up...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's true, but it's intentional based on how it's being used. For example:

% ./path/to/exec/ff

To get started, run: ./path/to/exec/ff init
Optional: Set the FIREFLY_HOME environment variable for FireFly stack configuration path.

Usage:
  ./path/to/exec/ff [command]

Available Commands:
  accounts    Work with accounts in a FireFly stack
  completion  Generate the autocompletion script for the specified shell
  deploy      Deploy a compiled smart contract
  docs        Generate markdown documentation for all commands
  help        Help about any command
  info        Get info about a stack
  init        Create a new FireFly local dev stack
  list        List stacks
  logs        View log output from a stack
  ps          Returns information on running stacks
  pull        Pull a stack
  remove      Completely remove a stack
  reset       Clear all data in a stack
  start       Start a stack
  stop        Stop a stack
  upgrade     Upgrade a stack to a different version
  version     Prints the version info

Flags:
      --ansi string   Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
  -h, --help          Help for ./ff/ff
  -v, --verbose       Verbose log output

Use "./path/to/exec/ff [command] --help" for more information about a command.

As you can see, the executable was built locally in a subpath, so it makes sense for the help messages to reflect the subpath. This way, users can simply copy and paste the command from the help message without needing to adjust the path manually.


func GetFireflyASCIIArt() string {
s := ""
s += "\u001b[33m _______ ________ \u001b[0m\n" // yellow
Expand All @@ -53,7 +56,7 @@ func GetFireflyASCIIArt() string {

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "ff",
Use: ExecutableName,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We really need to make this usage message better

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not part of this PR

Short: "FireFly CLI is a developer tool used to manage local development stacks",
Long: GetFireflyASCIIArt() + `
FireFly CLI is a developer tool used to manage local development stacks
Expand All @@ -62,7 +65,7 @@ This tool automates creation of stacks with many infrastructure components which
would otherwise be a time consuming manual task. It also wraps docker compose
commands to manage the lifecycle of stacks.

To get started run: ff init
To get started run: ` + ExecutableName + ` init
Optional: Set FIREFLY_HOME env variable for FireFly stack configuration path.
`,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
Expand Down
9 changes: 6 additions & 3 deletions cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,12 @@ import (
var shortened = false
var output = "json"

var BuildDate string // set by go-releaser
var BuildCommit string // set by go-releaser
var BuildVersionOverride string // set by go-releaser
// set by go-releaser
var (
BuildDate string
BuildCommit string
BuildVersionOverride string
)

// Info creates a formattable struct for version output
type Info struct {
Expand Down
10 changes: 5 additions & 5 deletions internal/blockchain/fabric/fabric_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -522,11 +522,11 @@ func (p *FabricProvider) DeployContract(filename, contractName, instanceName str
}
switch {
case len(extraArgs) < 1:
return nil, fmt.Errorf("channel not set. usage: ff deploy <stack_name> <filename> <channel> <chaincode> <version>")
return nil, fmt.Errorf("channel not set")
case len(extraArgs) < 2:
return nil, fmt.Errorf("chaincode not set. usage: ff deploy <stack_name> <filename> <channel> <chaincode> <version>")
return nil, fmt.Errorf("chaincode not set")
case len(extraArgs) < 3:
return nil, fmt.Errorf("version not set. usage: ff deploy <stack_name> <filename> <channel> <chaincode> <version>")
return nil, fmt.Errorf("version not set")
}
channel := extraArgs[0]
chaincode := extraArgs[1]
Expand Down Expand Up @@ -587,9 +587,9 @@ func (p *FabricProvider) CreateAccount(args []string) (interface{}, error) {
}
switch {
case len(args) < 1:
return "", fmt.Errorf("org name not set. usage: ff accounts create <stack_name> <org_name> <account_name>")
return "", fmt.Errorf("org name not set")
case len(args) < 2:
return "", fmt.Errorf("account name not set. usage: ff accounts create <stack_name> <org_name> <account_name>")
return "", fmt.Errorf("account name not set")
}
orgName := args[0]
accountName := args[1]
Expand Down
Loading