zio-cli icon indicating copy to clipboard operation
zio-cli copied to clipboard

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

Open jdegoes opened this issue 1 year ago • 28 comments

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 avatar May 25 '23 14:05 jdegoes

/bounty $250

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

jdegoes avatar May 25 '23 14:05 jdegoes

💎 $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:

  • 🔴 Livestream on Algora TV while solving this bounty & earn $200 upon merge! Make sure to have your camera and microphone on. Comment /livestream once live

Thank you for contributing to zio/zio-cli!

Add a bountyShare 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

algora-pbc[bot] avatar May 25 '23 14:05 algora-pbc[bot]

/attempt #191

walesho avatar May 26 '23 09:05 walesho

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

algora-pbc[bot] avatar Jun 02 '23 09:06 algora-pbc[bot]

The bounty is up for grabs! Everyone is welcome to /attempt #191 🙌

algora-pbc[bot] avatar Jun 09 '23 09:06 algora-pbc[bot]

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

algora-pbc[bot] avatar Jun 16 '23 11:06 algora-pbc[bot]

The bounty is up for grabs! Everyone is welcome to /attempt #191 🙌

algora-pbc[bot] avatar Jun 23 '23 11:06 algora-pbc[bot]

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

shubhi2000 avatar Aug 12 '23 17:08 shubhi2000

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

Options

thisisyoussef avatar Aug 19 '23 02:08 thisisyoussef

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

algora-pbc[bot] avatar Aug 26 '23 02:08 algora-pbc[bot]

The bounty is up for grabs! Everyone is welcome to /attempt #191 🙌

algora-pbc[bot] avatar Sep 02 '23 02:09 algora-pbc[bot]

/attempt #191

Options

shubhi2000 avatar Sep 02 '23 04:09 shubhi2000

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

algora-pbc[bot] avatar Sep 09 '23 04:09 algora-pbc[bot]

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.

shubhi2000 avatar Sep 16 '23 03:09 shubhi2000

The bounty is up for grabs! Everyone is welcome to /attempt #191 🙌

algora-pbc[bot] avatar Sep 16 '23 04:09 algora-pbc[bot]

/attempt #191

Options

vivasvan1 avatar Oct 13 '23 12:10 vivasvan1

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

algora-pbc[bot] avatar Oct 20 '23 12:10 algora-pbc[bot]

@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.

  • [x] base functionality
  • [x] user specified argument overrides the one from the file
  • [x] test suite
  • [ ] help docs and diagnoses

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

vivasvan1 avatar Oct 26 '23 19:10 vivasvan1

💡 @vivasvan1 submitted a pull request that claims the bounty. You can visit your bounty board to reward.

algora-pbc[bot] avatar Apr 18 '24 08:04 algora-pbc[bot]

@jdegoes am I able to attempt this?

If so, please clarify the following questions:

  • if command is ab cd ef --arg-1=1 --arg-2=2, are we looking for .ab or .ef?
  • what is the desired behavior for argument overriding? ex: /home/user/a/.__:
    --arg-1=1
    --arg-2=1
    
    /home/user/a/b/c/.__:
    --arg-2=2
    --arg-3=2
    
    • Option 1:
      Map(
        "arg-2" -> ("/home/user/a/b/c/.__", "2"),
        "arg-3" -> ("/home/user/a/b/c/.__", "2"),
      )
      
    • Option 2:
      Map(
        "arg-1" -> ("/home/user/a/.__", "1"),
        "arg-2" -> ("/home/user/a/b/c/.__", "2"),
        "arg-3" -> ("/home/user/a/b/c/.__", "2"),
      )
      
    • Something else entirely??
  • Is it safe to say that args pulled from files should only be passed to UserDefined and not BuiltIn parsing?
  • What is the intention for printing the arg overrides and such? ZIO.logInfo? ZIO.logDebug?

Kalin-Rudnicki avatar Jun 04 '24 03:06 Kalin-Rudnicki

/attempt #191

Options

Kalin-Rudnicki avatar Jun 04 '24 07:06 Kalin-Rudnicki

[!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.

algora-pbc[bot] avatar Jun 04 '24 07:06 algora-pbc[bot]

@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.

vivasvan1 avatar Jun 04 '24 08:06 vivasvan1

@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

Kalin-Rudnicki avatar Jun 04 '24 11:06 Kalin-Rudnicki

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 avatar Jun 04 '24 11:06 vivasvan1

@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. 🙏

vivasvan1 avatar Jun 04 '24 11:06 vivasvan1

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

Kalin-Rudnicki avatar Jun 04 '24 12:06 Kalin-Rudnicki

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

algora-pbc[bot] avatar Jun 08 '24 18:06 algora-pbc[bot]