zio / zio-cli

Rapidly build powerful command-line applications powered by ZIO
https://zio.dev/zio-cli
Apache License 2.0
132 stars 78 forks source link

Add support for reading command-line options from file(s) #191

Open jdegoes opened 1 year ago

jdegoes commented 1 year ago

The users command-line app has a top-level command, whose name is <name>.

For example, if the user was creating a word count CLI, then their top-level command name might be wc.

ZIO CLI should examine the following locations to check for the existence of .<name> files:

  1. The current working directory.
  2. All parents of the current working directory.
  3. The user's home directory.

So, in the wc example, if run from /c/Users/john directory, then ZIO CLI would look in the following locations for the existence of .wc files:

  1. /c/Users/john
  2. `/c/Users/
  3. /c/
  4. ~ (user home, probably /c/Users/john on Windows)

Then, ZIO CLI should concatenate these options, with user home having the lowest priority, and the current working directory having the highest priority (so, for example, you can override options in higher priority locations).

Then, ZIO CLI should utilize those command-line options when the program is run, and not require those options be specified. However, if any option is specified on the command-line, then it must override even the highest priority setting specified in the settings files.

An example, let's say wc has an option --line-ending. Then in the .wc file, there might exist:

--line-ending=\n

Then this would be the default line ending. The user would not have to specify it on the command-line. But if the user did specify it on the command-line, it would override the one in the file.

This new functionality should be documented in the help docs for the CLI. Moreover, all of the settings that are picked up from any of the files need to be printed out, so the user can understand exactly where they are coming from.

jdegoes commented 1 year ago

/bounty $250

For the full functionality, implemented in a cross-platform setting, with full test suites, and descriptive help docs, and diagnostics.

algora-pbc[bot] commented 1 year ago

πŸ’Ž $250 bounty β€’ ZIO

Steps to solve:

  1. Start working: Comment /attempt #191 with your implementation plan
  2. Submit work: Create a pull request including /claim #191 in the PR body to claim the bounty
  3. Receive payment: 100% of the bounty is received 2-5 days post-reward. Make sure you are eligible for payouts

Additional opportunities:

Thank you for contributing to zio/zio-cli!

Add a bounty β€’ Share on socials

Attempt Started (GMT+0) Solution
πŸ”΄ @walesho May 26, 2023, 9:12:32 AM WIP
πŸ”΄ @vidyasankarv Jun 9, 2023, 11:47:14 AM WIP
πŸ”΄ @thisisyoussef Aug 19, 2023, 2:04:17 AM WIP
πŸ”΄ @shubhi2000 Sep 2, 2023, 4:25:04 AM WIP
🟑 @vivasvan1 Oct 13, 2023, 12:51:11 PM #308
🟒 @Kalin-Rudnicki Jun 4, 2024, 7:02:24 AM #317
walesho commented 1 year ago

/attempt #191

algora-pbc[bot] commented 1 year ago

@walesho: Reminder that in 7 days the bounty will become up for grabs, so please submit a pull request before then πŸ™

algora-pbc[bot] commented 1 year ago

The bounty is up for grabs! Everyone is welcome to /attempt #191 πŸ™Œ

algora-pbc[bot] commented 1 year ago

@vidyasankarv: Reminder that in 7 days the bounty will become up for grabs, so please submit a pull request before then πŸ™

algora-pbc[bot] commented 1 year ago

The bounty is up for grabs! Everyone is welcome to /attempt #191 πŸ™Œ

shubhi2000 commented 1 year ago

Hi, Can I work on this? It seems interesting!

thisisyoussef commented 1 year ago

/attempt https://github.com/zio/zio-cli/issues/191

Options
algora-pbc[bot] commented 1 year ago

@thisisyoussef: Reminder that in 7 days the bounty will become up for grabs, so please submit a pull request before then πŸ™

algora-pbc[bot] commented 1 year ago

The bounty is up for grabs! Everyone is welcome to /attempt #191 πŸ™Œ

shubhi2000 commented 1 year ago

/attempt #191

Options
algora-pbc[bot] commented 1 year ago

@shubhi2000: Reminder that in 7 days the bounty will become up for grabs, so please submit a pull request before then πŸ™

shubhi2000 commented 1 year ago

Hi, I am still working on this. Taking some time to setup and understand where exactly this feature needs to be integrated in the codebase. Will reach out with any queries I may have.

algora-pbc[bot] commented 1 year ago

The bounty is up for grabs! Everyone is welcome to /attempt #191 πŸ™Œ

vivasvan1 commented 1 year ago

/attempt #191

Options
algora-pbc[bot] commented 1 year ago

@vivasvan1: Reminder that in 7 days the bounty will become up for grabs, so please submit a pull request before then πŸ™

vivasvan1 commented 1 year ago

@jdegoes I am still working on documentation and "But if the user did specify it on the command-line, it would override the one in the file." functionality.

However would love to know if my attempt is in the right direction.

algora-pbc[bot] commented 7 months ago

πŸ’‘ @vivasvan1 submitted a pull request that claims the bounty. You can visit your bounty board to reward.

Kalin-Rudnicki commented 5 months ago

@jdegoes am I able to attempt this?

If so, please clarify the following questions:

Kalin-Rudnicki commented 5 months ago

/attempt #191

algora-pbc[bot] commented 5 months ago

[!NOTE] The user @vivasvan1 is already attempting to complete issue #191 and claim the bounty. We recommend checking in on @vivasvan1's progress, and potentially collaborating, before starting a new solution.

vivasvan1 commented 5 months ago

@Kalin-Rudnicki I am almost done with this PR. Only the documentation is remaining as far as i understand. Let me know if you would like to collaborate on it.

Kalin-Rudnicki commented 5 months ago

@vivasvan1, respectfully, I'd be trying to get the bounty πŸ˜‚πŸ˜œ I would personally do a significant part of this change in a different manner. Also, per the lastest commentor, and reading the current version of the PR, the current impl doesnt seem do anything to handle

However, if any option is specified on the command-line, then it must override even the highest priority setting specified in the settings files.

Or

Moreover, all of the settings that are picked up from any of the files need to be printed out, so the user can understand exactly where they are coming from.

And also doesnt seem to handle the more complex cases of arg overriding base on hierarchy

vivasvan1 commented 5 months ago

It's okay you can go ahead with a different PR ... although it would have been faster and easier for both by collaboration in my view. I am open to splitting the bounty as well. Anyways, good luck.

vivasvan1 commented 5 months ago

@Kalin-Rudnicki regarding the technicals, I believe my PR does handle i have tested for it as well.

However, if any option is specified on the command-line, then it must override even the highest priority setting specified in the settings files.

And

And also doesnt seem to handle the more complex cases of arg overriding base on hierarchy

Only remaining thing is printing the args. Thanks for pointing it out I had forgotten about it. πŸ™

Kalin-Rudnicki commented 5 months ago

I will let ya go for it first :) I saw you mentioned being new to scala/zio, so I left a bunch of nits on the PR for using better practices

algora-pbc[bot] commented 5 months ago

πŸ’‘ @Kalin-Rudnicki submitted a pull request that claims the bounty. You can visit your bounty board to reward.