├── .editorconfig
├── .github
└── settings.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── logs
├── 2018-02-20-cli-wg-initial-meeting.log
├── 2018-03-09-cli-wg-meeting.log
├── 2018-03-23-third-meeting.log
├── 2018-05-03-packaging.log
└── 2018-05-03-packaging.md
└── survey-results
├── Readme.md
├── crates.svg
├── gaps.svg
├── languages.svg
├── packaging.svg
├── platforms.svg
├── rust-user-since.svg
├── what-to-improve.svg
└── why-rust.svg
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | insert_final_newline = true
13 | indent_style = space
14 | indent_size = 4
15 |
16 | [*.rs]
17 | indent_style = space
18 | indent_size = 4
19 |
20 | [*.toml]
21 | indent_style = space
22 | indent_size = 4
23 |
24 | [*.md]
25 | trim_trailing_whitespace = false
26 |
--------------------------------------------------------------------------------
/.github/settings.yml:
--------------------------------------------------------------------------------
1 | # These settings are synced to GitHub by https://probot.github.io/apps/settings/
2 |
3 | repository:
4 | description: CLI working group
5 | homepage: "https://rust-cli.github.io/book"
6 | topics: rust cli command-line
7 | has_issues: true
8 | has_projects: false
9 | has_wiki: false
10 | has_downloads: false
11 | default_branch: master
12 |
13 | allow_squash_merge: true
14 | allow_merge_commit: true
15 | allow_rebase_merge: true
16 |
17 | allow_auto_merge: true
18 | delete_branch_on_merge: true
19 |
20 | labels:
21 | - name: "A-argparse"
22 | description: "Area: Argument parsing"
23 | color: '#f7e101'
24 | - name: "A-ergonomics"
25 | description: "Area: Ease of solving CLI related problems (e.g. filesystem interactions)"
26 | color: '#f7e101'
27 | - name: "A-styling"
28 | description: "Area: Terminal output styling"
29 | color: '#f7e101'
30 | - name: "A-interaction"
31 | description: "Area: Interactive terminal (prompts, progress bars)"
32 | color: '#f7e101'
33 | - name: "A-tui"
34 | description: "Area: TUI (full control of terminal)"
35 | color: '#f7e101'
36 | - name: "A-diagnostic"
37 | description: "Area: Program diagnostics (errors, panics, logging, etc)"
38 | color: '#f7e101'
39 | - name: "A-config"
40 | description: "Area: Configuration management"
41 | color: '#f7e101'
42 | - name: "A-testing-cli"
43 | description: "Area: One-shot testing of CLIs (no interaction)"
44 | color: '#f7e101'
45 | - name: "A-testing-tui"
46 | description: "Area: Testing of time and user dependent CLIs"
47 | color: '#f7e101'
48 | - name: "A-doc"
49 | description: "Area: Documenting your CLI (e.g. man pages)"
50 | color: '#f7e101'
51 | - name: "A-distribution"
52 | description: "Area: Licensing, packaging, etc"
53 | color: '#f7e101'
54 | - name: "A-book"
55 | description: "Area: Documenting how to create CLIs"
56 | color: '#f7e101'
57 | - name: "C-tracking-issue"
58 | description: "Category: A tracking issue for an unstable feature"
59 | color: '#f5f1fd'
60 | - name: "E-help-wanted"
61 | description: "Call for participation: Help is requested to fix this issue."
62 | color: '#02E10C'
63 |
64 | branches:
65 | - name: master
66 | protection:
67 | required_pull_request_reviews: null
68 | required_conversation_resolution: true
69 | enforce_admins: false
70 | restrictions: null
71 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | book
2 | target
3 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # The Rust Code of Conduct
2 |
3 | A version of this document [can be found online](https://www.rust-lang.org/conduct.html).
4 |
5 | ## Conduct
6 |
7 | **Contact**: [rust-mods@rust-lang.org](mailto:rust-mods@rust-lang.org)
8 |
9 | * We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic.
10 | * On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all.
11 | * Please be kind and courteous. There's no need to be mean or rude.
12 | * Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer.
13 | * Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works.
14 | * We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behaviour. We interpret the term "harassment" as including the definition in the Citizen Code of Conduct; if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups.
15 | * Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [Rust moderation team][mod_team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back.
16 | * Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome.
17 |
18 | ## Moderation
19 |
20 |
21 | These are the policies for upholding our community's standards of conduct. If you feel that a thread needs moderation, please contact the [Rust moderation team][mod_team].
22 |
23 | 1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.)
24 | 2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed.
25 | 3. Moderators will first respond to such remarks with a warning.
26 | 4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off.
27 | 5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded.
28 | 6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology.
29 | 7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed.
30 | 8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others.
31 |
32 | In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely.
33 |
34 | And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust.
35 |
36 | The enforcement policies listed above apply to all official Rust venues; including official IRC channels (#rust, #rust-internals, #rust-tools, #rust-libs, #rustc, #rust-beginners, #rust-docs, #rust-community, #rust-lang, and #cargo); GitHub repositories under rust-lang, rust-lang-nursery, and rust-lang-deprecated; and all forums under rust-lang.org (users.rust-lang.org, internals.rust-lang.org). For other projects adopting the Rust Code of Conduct, please contact the maintainers of those projects for enforcement. If you wish to use this code of conduct for your own project, consider explicitly mentioning your moderation policy or making a copy with your own moderation policy so as to avoid confusion.
37 |
38 | *Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).*
39 |
40 | [mod_team]: https://www.rust-lang.org/team.html#Moderation-team
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 rust-lang-nursery
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CLI working group
2 |
3 | This repo is for coordinating the work of the Rust CLI Working Group,
4 | also known as "Rust CLIQuE" (Rust CLI Quality Enhancement).
5 |
6 | - [Working groups?](https://internals.rust-lang.org/t/announcing-the-2018-domain-working-groups/6737)
7 | - [Announcement of this WG](https://internals.rust-lang.org/t/announcing-the-cli-working-group/6872/1)
8 | - Chat with us on [Zulip](https://rust-lang.zulipchat.com/#narrow/stream/220302-wg-cli)
9 |
10 |
11 | ## Vision
12 |
13 | Let's make this a true statement:
14 |
15 | Rust makes writing crossplatform, tested, modern command line applications frictionless
16 | while incorporating industry best practices and providing great documentation.
17 |
18 | ## Role of WG-CLI
19 |
20 | - Identify gaps between here and the vision
21 | - Mentoring people working to fill the gaps
22 | - Keeping the lights on for core CLI crates
23 | - Venue for CLI authors to collaborate
24 |
25 | ## Focus Areas
26 |
27 | - [Argument parsing](https://github.com/rust-cli/team/labels/A-argparse)
28 | - [argpaerse-rosetta-rs](https://github.com/rosetta-rs/argparse-rosetta-rs)
29 | - [Ease of solving CLI related problems (e.g. filesystem interactions)](https://github.com/rust-cli/team/labels/A-ergonomics)
30 | - [Terminal output styling](https://github.com/rust-cli/team/labels/A-styling)
31 | - [Interactive terminal (prompts, progress bars)](https://github.com/rust-cli/team/labels/A-interaction)
32 | - [TUI (full control of terminal)](https://github.com/rust-cli/team/labels/A-tui)
33 | - [Program diagnostics (errors, panics, logging, etc)](https://github.com/rust-cli/team/labels/A-diagnostic)
34 | - [Configuration management](https://github.com/rust-cli/team/labels/A-config)
35 | - [One-shot testing of CLIs (no interaction)](https://github.com/rust-cli/team/labels/A-testing-cli)
36 | - [assert_cmd](https://github.com/assert-rs/assert_cmd) / [assert_fs](https://github.com/assert-rs/assert_fs)
37 | - [snapbox](https://github.com/assert-rs/trycmd/tree/main/crates/snapbox)
38 | - [trycmd](https://github.com/assert-rs/trycmd/)
39 | - [Testing of time and user dependent CLIs](https://github.com/rust-cli/team/labels/A-testing-tui)
40 | - [Documenting your CLI (e.g. man pages)](https://github.com/rust-cli/team/labels/A-doc)
41 | - [Licensing, packaging, etc](https://github.com/rust-cli/team/labels/A-distribution)
42 | - [Documenting how to create CLIs](https://github.com/rust-cli/team/labels/A-book)
43 | - [book](https://github.com/rust-cli/book)
44 |
45 | While most of these cross-domains with GUIs, web backends, etc, they are also commonly in the critical path a CLI and so in-scope.
46 |
--------------------------------------------------------------------------------
/logs/2018-02-20-cli-wg-initial-meeting.log:
--------------------------------------------------------------------------------
1 | 18:00 hey @/all, welcome to the first CLI working group meeting!
2 | 18:00 This meeting about the goals and format of the working group
3 | 18:00 It is not about concrete details, I want to keep it focused on big picture for now
4 | 18:01 The time box is an hour (let's see if I manage to keep us on schedule)
5 | ...
6 | 18:02 first of all, thank you all for showing up!
7 | 18:02 and for discussion so much stuff already!
8 | ...
9 | 18:02 if you haven't seen it yet, the etherpad is packed with cool ideas: https://public.etherpad-mozilla.org/p/rust-cli-wg
10 | 18:04 i want to go through the "goals" for a bit
11 | 18:04 > - Rust is known to be a very good language for writing CLI tools
12 | 18:04 > - "Writing a CLI tool" is a good way to get started with Rust as a beginner
13 | 18:04 > - Make it easy to ship well-tested binaries
14 | 18:04 > - "Writing seamless binaries in Rust should be effortless"
15 | 18:04 does anyone want to add something to that list?
16 | 18:04 or, even better, want to compress some of the points into a new one? :)
17 | 18:05 how about "work effectively the same on all platforms"?
18 | 18:05 i think it's important to have a good slogan and something we can use when deciding what to do and what not to focus on
19 | 18:05 Agreed.
20 | 18:06 @Dylan-DPC you mean like "i'm sure my rust cli app works on a mac even though i haven't tested it"?
21 | 18:06 yeh
22 | 18:07 as in the user doesn't have to bother about different platforms
23 | 18:07 that's a pretty cool goal!
24 | 18:07 cool. that's really ambitious, though!
25 | 18:07 Seems like some of the high level ideas
26 | 18:07 - Fun / low friction
27 | 18:07 - Cross-platform
28 | 18:07 - End-user consumable (distribution)
29 | 18:07 - Releasing with confidence
30 | 18:08 Now how to capture that in a slogan :)
31 | 18:08 agreed. platform compatibility is a great goal
32 | ...
33 | 18:08 that's a pretty good summary ^
34 | 18:08 Very ambitious though
35 | 18:08 great summary!
36 | 18:08 i like @yoshuawuyts' "Writing seamless binaries in Rust should be effortless" as a base but like to make it a bit more concrete
37 | 18:08 @epage probably would add to that "Should feel native to the platform"
38 | ...
39 | 18:09 Like file locations for config files are different on each platform, coloring is different (I think we have some abstraction around that already)
40 | 18:09 I'd say the things that are nonobvious so far are 1) how to develop a test harness for a CLI tool and 2) how to structure error handling
41 | 18:09 ..., file path handling
42 | 18:09 there are a few Windows gotchas as well
43 | ...
44 | 18:10 these all sounds like very concrete things we could work on!
45 | ...
46 | 18:12 @killercup yeah, I like having that slogan as a base - and then expand with the list of @epage for more detail :D
47 | 18:12 so, i'm trying to come up with a sentence that covers this, something like "frictionless" and with "known best practices"
48 | ...
49 | 18:13 @yoshuawuyts to be clear, my list was created to help us brainstorm parts to include in the slogan
50 | 18:13 gotcha!
51 | 18:14 killercup: sounds like "doing the right thing for reach platform should be straight forward" or something
52 | 18:14 "Frictionlessly creating CLIs with industry best practices"?
53 | 18:14 but then, nicer
54 | 18:15 "Writing CLI apps in Rust is a frictionless experience with known best practices that work across platforms, good documentation, and effortless distribution"
55 | 18:15 maybe a bit shorter :D
56 | 18:15 Those last to fall under frictionless to me
57 | 18:15 [edit] maybe make it a bit shorter :D
58 | 18:16 "writing cross-platform frictionless apps"
59 | 18:16 > "Frictionlessly creating CLIs with industry best practices”?
60 | 18:16 “Frictionlessly creating world class CLIs"
61 | 18:16 [edit] > "Frictionlessly creating CLIs with industry best practices”?
62 | 18:16 [edit] “Frictionlessly creating world class CLIs"
63 | 18:16 "frictionless" is meant to describe the process, not the app
64 | 18:16 fair point
65 | 18:16 @epage yeah, i wanted to specify what is frictionless about it
66 | 18:17 don't mind having @killercup's version as a "working title" - can always revisit later
67 | 18:17 "Rust makes best-practice CLI applications frictionless through crates and documentation"?
68 | 18:17 i think we're on the same page, i'll paste the suggested ones in the etherpad and we can decide later on
69 | ...
70 | 18:18 cool, so, next point
71 | 19:18 what areas need out focus?
72 | 18:19 like, there are a lot of efforts to make writing CLI apps easier
73 | 18:19 where do we need to help out?
74 | 18:19 File management (cross platform stuff)
75 | 18:19 Especially for config files that would be great
76 | 18:19 @Eijebong like, dealing with paths or dealing with config files?
77 | 18:20 For linux under ~/.config, under Mac ~/Library (I think?), Windows…no idea
78 | 18:20 app packaging
79 | 18:20 is there any plan to make one crate that others can use and extend?
80 | 18:20 conglomeration crates / ecosystem discovery / API uniformity
81 | 18:20 maybe we should define CLI tools before
82 | 18:20 If I need a config file, I don't want to know that it should be `${XDG_CONFIG:${XDG_HOME}/.config:/home/${user}/.config` on linux, `%AppDir%/App/` on windows and something else on osx (paths are probably all wrong :D)
83 | 18:20 `~/.config`, `~/.local`, `~/.cache`
84 | 18:21 @yoshuawuyts Plz respect `${XDG_*}`stuff :o
85 | 18:21 @TeXitoi Fair point, would a (n)curses tui count as a CLI?
86 | 18:21 @TeXitoi ah good point, how'd you define it?
87 | ...
88 | 18:22 there is a crate for "determing system configuration" and it's apparently not as easy as it sounds
89 | 18:22 I'd define as a program that is launch in a terminal with parameter, no user interaction during the execution, and that do work on files, network and/or output to terminal
90 | 18:22 So speaking of where the files are, the app_dirs crate exists. Is it a discovery issue, maturity issue, or something else?
91 | 18:22 but it is definitely something that should be solved
92 | 18:22 (thus ncurses is not in my definition)
93 | 18:22 @epage that's the one!
94 | 18:23 this one? https://github.com/AndyBarron/app-dirs-rs
95 | 18:23 it hasn't had an update and I heard from @BurntSushi that it is not maintained
96 | 18:23 (neither is daemons)
97 | 18:23 @TeXitoi good definition, and i think it's fair to start with this
98 | 18:25 (config files may or may not enter in my definition)
99 | 18:25 okay, so we have
100 | 18:25
101 | 18:25 - dealing with configs
102 | 18:25 - packaging
103 | 18:25 - crate discovery
104 | 18:25 - testing cli apps (@dherman mentioned this earlier)
105 | 18:25 - error handling and user facing output
106 | 18:26 So I am obviously biased, but one area that we have been struggling with in `fd` is the handling of file paths across platforms
107 | 18:26 How so?
108 | 18:26 Things like: absolute paths on Windows (UNC prefixes)
109 | 18:26 or: UTF-8 filenames on MacOS (the filesystem normalizes UTF-8 strings)
110 | 18:27 @TeXitoi
111 | 18:27 > I'd define as a program that is launch in a terminal with parameter, no user interaction during the execution, and that do work on files, network and/or output to terminal
112 | 18:27 I'd like to ammend this to: launch in a terminal with configuration [cmd-args, ENV, config-files], runs to completion with no/minimal user interaction and does work on files, network and/or std{in,out,err}
113 | 18:27 one common theme i sense here is that there are some efforts (a.k.a. crates) but there are no solutions that solve enough of the issues
114 | 18:27 @sharkdp I had to create a little half-baked crate for turning a regular path into a verbatim path -- feels like a more polished crate waiting to happen
115 | 18:27 @sharkdp fd?
116 | 18:27 @sharkdp https://github.com/notion-cli/notion/blob/master/crates/verbatim/src/lib.rs
117 | 18:27 @sharkdp https://crates.io/crates/abs_path look like what you want?
118 | 18:28 @TeXitoi https://github.com/sharkdp/fd
119 | 18:29 @sharkdp thanks
120 | 18:29 @killercup more important, all solutions are disjointed. There is no unified API or even an understanding of where the holes are most of the time
121 | 18:29 so is our main priority to build a master crate here? or fix existing issues everywhere?
122 | 18:30 @vitiral that's what we're here to do: create a good end-to-end story :)
123 | 18:30 @Dylan-DPC this is a _team_, so I think the solution will be to experiment with lots of approaches -- but try to unify efforts as much as possible
124 | 18:30 @Dylan-DPC It could probably be a mix of the two approaches. With good documentation where to find what
125 | 18:30 that brings us to the next point on my agenda that also let's me answer @Dylan-DPC question!
126 | ...
127 | 18:30 how should we fix this?
128 | 18:31 (the "### How to get there" part of the etherpad)
129 | 18:31 @vitiral i know but my question was like "what should we focus more on".
130 | 18:31 probably part code, part guides, right?
131 | 18:32 i think a nice approach is trying to write an "ideal guide"
132 | 18:32 Part code, part guides, part tools to make life easier
133 | 18:32 to see where the holes are
134 | 18:32 That works
135 | 18:32 what do you mean by an "ideal guide"?
136 | 18:32 about focus - I think addressing universal issues would be a good start
137 | 18:33 issues that affect majority of CLI tools
138 | 18:33 yeah i agree
139 | 18:33 @yoshuawuyts you write a guide that describes what writing a CLI app in rust is like _in the future_, and then see where it doesn't yet work in the present
140 | 18:33 Kind of like steve's 2018 blog post
141 | 18:33 cool!
142 | 18:33 The basic problem, from a newbie's perspective, is that these tools are disjointed. Rust's `stdlib` is small, but there is no "extended stdlib". It would be great (IMO) if someone could say "gosh, one of the worst things about rust is that the stdlib is so small" and people would reply "then use CRATEX" (I'm biased, as I have started the [ergo ecosystem](https://github.com/rust-crates/ergo) to solve this problem)
143 | 18:34 @killercup That sounds like a great idea
144 | 18:34 @vitiral that's one solution, but another might be "click on 'CLI apps' on rust-lang.org" and it has a guide that starts with `cargo new --template rust-lang/cli`
145 | 18:34 yeah
146 | 18:35 I'm not sure we necessarily need an extended standard library, as there are great crates for a lot of things already (clap, termcolor, etc.)
147 | 18:35 @killercup where it downloads an "official" template of some kind from crates.io?
148 | 18:36 @vitiral exactly, and that templates already contains a bunch of `extern crate foo;` and a good readme and ci setup for example
149 | 18:36 or we could create a crate so anyone working on CLIs can use the crate as a base crate. The only issue being that existing crates might have to rewrite some stuff
150 | 18:36 @sharkdp just to be clear, the "extended standard library" is just a conglomeration of those great crates. It's goals are to reduce boilerplate and unify the api+docs
151 | ...
152 | 18:36 @killercup I like the idea of "official templates" regardless of other decisions :thumbsup:
153 | ...
154 | 18:37 `cargo new --template cli` and `ergo` aren't mutually exclusive either :D
155 | ...
156 | 18:37 maybe they could be distributed via rustup/cargo directly?
157 | 18:37 and you could also provide a github url or something?
158 | 18:38 let's not talk about the details for now, and the cargo folks probably already have some plans
159 | 18:38 okay, good point
160 | 18:38 Crate-wise, I think the thing that could be valuable is to expand on an idea I've seen floated from time to time, creating higher level abstractions over the existing libs. For example, `std::path` is pretty low level when you compare it to `pathlib` in Python. If we provide some higher level libs (at the cost of performance or lack of platform neutrality) that'd be a big help for people. They could then progress to the lower level stuff in inner
161 | 18:38 loops
162 | ...
163 | 18:39 @epage +1 ya but i guess we need to provide some customisability as well
164 | 18:39 except it shouldn't lack platform neutrality
165 | 18:39 Well, @vitiral , we have already been talking about it :)
166 | 18:39 @epage yep, that's basically why i wrote quicli :)
167 | 18:39 process-wise we now need decide how do proceed
168 | 18:39 the reason why a lot of people start their own crates from scratch is because a certain base crate doesn't provide what you want
169 | 18:39 @epage (ssh... they don't have to know :laughing:)
170 | 18:39 What I meant by lack of platform neutrality is that it might make assumptions about the meaning of `.`, `..`, `//` which `std::path` doesn't do today but I think people expect
171 | 18:40 @vitiral isn’t the “high level abstractions” what `ergo` somehow aims to provide. right?
172 | 18:40 @mattgathu yes
173 | 18:40 Someone should probably kickstart the "ideal guide" I reckon?
174 | 18:40 [edit] @mattgathu yes (edit: that is one of its goals)
175 | 18:40 So what do we need to discuss about the ideal guide or how do we get organized into writing it?
176 | 18:41 uhmm let's cover the broader topics first
177 | 18:41 personally I think the cookbook is a great place to start. How would the cookbook look in a perfect world?
178 | 18:41 i think it'd make sense to have smaller groups of people "claim" problem spaces, and have this working group be more about orchestration
179 | ...
180 | 18:42 we have this repo: https://github.com/rust-lang-nursery/cli-wg
181 | 18:42 where i'll also post the logs of this meeting and the etherpad notes
182 | 18:42 @killercup do we have edit access/how should we open a repo, etc?
183 | ...
184 | 18:43 You are all welcome to have editor access on rust-crates (which is the owner of ergo)
185 | 18:43 https://github.com/rust-crates/
186 | 18:43 great
187 | 18:43 we can make any repos we want. Or we can use a different organization
188 | 18:44 @killercup so is your thought that, say the guide group, would have a subfolder and start posting PRs of md files for it?
189 | 18:44 i'd like to use the cli-wg repo for orchestration of efforts, and maybe we can create rust-crates repos for individual implementations?
190 | 18:44 @epage for example, yeah
191 | 18:45 @killercup I just made you full admin on rust-crates. I've been meaning to and forgot
192 | 18:45 yeah that's why i was suggesting an organisation
193 | 18:45 @epage or just discuss stuff in issues
194 | 18:45 the idea is to have a single repo where we can track stuff we are working on
195 | 18:45 and also talk about integration issues, and common efforts
196 | 18:45 @vitiral thanks!
197 | 18:45 sounds reasonable
198 | 18:46 btw when getting to implementation, `crate-ci` is possible home for relevant tools (like packaging)
199 | 18:46 I agree -- `cli-wg` is a great place to document RFC's/discussions, open and discuss issues, keep notes of meetings and document our progress/efforts
200 | 18:47 the best case scenario is that we'll open a bunch of tracking issues, e.g. "How to do configuration management in CLI apps" and then over the next few months fill them with good discussions and links to PRs implementing stuff to get towards that ideal guide's future
201 | 18:48 it probably wouldn't be a bad idea to copy/paste the doodle as our first "roadmap" and open an issue to discuss it further
202 | 18:49 i'm also very certain we can't solve all the problems at once, so i'd like to settle on some, let's say 3, that we want to tackle _right now_
203 | 18:49 well, not "right now" right now, but "next"
204 | 18:49 And the rest of the doodle could be split up into multiple parts that are somewhat related. Makes it less monolithic
205 | 18:50 [edit] i think you all mean "etherpad" and not "the thing to find dates for meetings" ;)
206 | ...
207 | 18:51 so, when there are some tracking issues/ideal guides open, let's try to put some momentum behind a few of them instead of everyone doing something only by themselves :)
208 | 18:52 we can divide it into milestones and address certain issues in each milestone (preferably a quarter of the year)
209 | 18:52 I don't have any projects myself so I'd love to contribute wherever needed :P
210 | ...
211 | 18:53 [edit] perfect! that conveniently brings us to the next point in my secret agenda for this meeting (that is totally not a post-it with "what, how, who, when")!
212 | 18:53 how should we do meetings?
213 | 18:53 like this? :P
214 | 18:54 that's one possibility, yeah
215 | 18:54 but more like, should we check in with each other every week?
216 | 18:54 biweekly?
217 | 18:54 Gitter is pretty convenient. Though if you stop reading for like 5 minutes it's super hard to catch up :joy:
218 | 18:54 yeah, think bi-weekly is a good one
219 | 18:54 haha true kat
220 | 18:54 Also, if we're breaking down into sub-groups, that'll help with catching up
221 | 18:54 every two weeks sounds good
222 | ...
223 | 18:55 sub groups could meet up every week
224 | 18:55 @epage :+1: Would we have different gitter channels then?
225 | 18:55 we can create rooms
226 | 18:55 Rooms seems reasonable. It'll make it easier to peek in on each other
227 | 18:55 @spacekookie feel free to create new ones, but i personally like how people lurking in a room can chime in and help ;)
228 | 18:56 As long as the meetings for the different groups aren't at the same time ;)
229 | 18:56 well you can be in 2 rooms at the same time ;)
230 | 18:57 Hello, I think rooms should only be created if the traffic warrants it, this isn't a very high volume channel so unless there is a lot of talking over.
231 | 18:57 aye, agree
232 | 18:57 @Aaronepower I agree, nothing is more depressing than sitting in an empty room :frowning:
233 | 18:57 [edit] Hello, I think rooms should only be created if the traffic warrants it, this isn't a very high volume channel so unless there is a lot of talking over it'd probably be easier to keep it to a single channel.
234 | ...
235 | 18:57 let's create new rooms lazily
236 | 18:58 if we discuss all the subgroups in one place then everyone will toe in with their comments and it will become one entire group instead of sub groups
237 | 18:58 @Dylan-DPC Is that a bad thing?
238 | 18:58 it isn't. but it kinda defeats the purpose of a subgroup
239 | 18:59 i think for the initial setup and writing guides it might also be helpful to use a non-text medium like video chat, because it's more personal and we can write a guide/speak at the same time :)
240 | 18:59 Dylan-DPC: we're 20 people, and it hasn't been a problem so far - creating rooms once it becomes a problem sounds like a good outcome (:
241 | ...
242 | 18:59 also multiple subgroups can't have a meeting at the same time unless they converge it into 1
243 | ...
244 | 19:00 [edit] @killercup so what's the plan next?
245 | 19:01 next up, we should all open issues on https://github.com/rust-lang-nursery/cli-wg !
246 | ...
247 | 19:02 i'll send out a doodle (the meeting time decider thing!) for the next WG meeting in two about two weeks
248 | ...
249 | 19:03 1. Do we just open issues for the initial batch of jobs?
250 | 19:03 2. Does one person does it so we don't accidentally have two issues for one task?
251 | ...
252 | 19:06 I was about to open an issue for the config crate thingy but was waiting for someone else to open an issue so I have a template what to write :P
253 | 19:06 speaking of opening things on github: people alright if I PR the stuff we discussed here as a meeting note for today?
254 | ...
255 | 19:08 and with that, thank you @/all for the great meeting! it's not easy to find a format for this group, and settle on stuff to work on, but i'm confident we're on a good way! (and we can always improve our process once we have a couple things going!)
256 | 19:08 Correct me if I'm wrong, but I see this being a two part thing; part 1 we've already started which is *identify* areas we can *action*. Part 2 then becomes actioning those items. As far as action items go, there seems to be some common abstract ideas coming from here such as, "specific crate assistance" (i.e. an already existing crate can be helped, enhanced, etc.), "docs" (from crate docs, to how-tos, to blogs, etc.), and "new crates" (existing
257 | 19:08 gaps in the ecosystem where a new crate could come in) and each of those could be broken down as well.
258 | 19:09 I think breaking some of this into "bite sized chunks" could help us make more progress, especially since for many this is a side project
259 | ...
260 | 19:11 And like @killercup already said, *we* don't necessarily need to action these items ourselves (I mean, if we can it's awesome, but it's not a must), but what can really help is finding those items, maybe mentoring/guiding and informing the Rust community about them
261 | 19:11 exactly. i'll try to open one issue per area we want to work on. for each, we then decide the course of action (improve or create) as well as find maintainers (we, others)
262 | ...
263 | 19:13 the "ideal guide" thing will be a bit orthogonal to that, and I hope it'll work as a driver to create new issues/ideas to improve
264 | ...
265 |
--------------------------------------------------------------------------------
/logs/2018-03-09-cli-wg-meeting.log:
--------------------------------------------------------------------------------
1 | 18:00 # meeting time, @/all!
2 | 18:00 first up, [what are we doing?](https://github.com/rust-lang-nursery/cli-wg/issues?q=is%3Aissue+is%3Aopen+label%3A%22tracking+issue%22)
3 | 18:01 last meeting, we've talked about a bunch of topics and afterwards opened a bunch of issues
4 | 18:01 before getting into opening some more, let's take a minute to talk about the ongoing discussions
5 | 18:01 First off for me would be thank you for herding the cats and getting the readme up!
6 | 18:02 @epage thanks! is anyone against merging https://github.com/rust-lang-nursery/cli-wg/pull/17 ?
7 | 18:03 nothing's set in stone, but i think we've converged on the major points in these issues
8 | 18:04 (i'll merge it after the meeting/tonight unless someone objects)
9 | 18:04 I think it is appropriate. And having the option to include TUIs in the scope later (that's how I understand the statement at the bottom of the file) is nice.
10 | 18:04 Personally, I'd prefer a shorter, easier to process description of a CLI *but* seeing the sausage made, I realize its hard to do
11 | 18:05 cool
12 | 18:06 alright
13 | 18:07 the biggest issues by number of comments are config files (), colors (), and distribution ()
14 | 18:08 would you say these are also the areas where we can find actionable stuff to do for the next 2-3 weeks?
15 | 18:08 is colors a big issue right now? i mean we can work on it but i don't think colors isn't going to be a blocker for someone releasing a cool CLI :P
16 | 18:08