Comments (4)
What do you mean by self-documenting? Sorry, I'm not familiar with spf13/cobra.
We do have the Usage/Usaget/Usagef
family of functions for dumping out info about the supported environment variables. Does that qualify?
from envconfig.
For the record, here is an example (I use it on a personal project):
import (
"bytes"
"io"
"text/tabwriter"
"github.com/kelseyhightower/envconfig"
)
const (
mdFormat = `| KEY | TYPE | DEFAULT | REQUIRED | DESCRIPTION |
| | | | | |
{{range .}}| {{ usage_key . }} | {{usage_type .}} | {{usage_default .}} | {{usage_required .}} | {{usage_description .}} |
{{end}}`
)
func Usage(prefix string, spec interface{}, output io.Writer) {
var b bytes.Buffer
tabs := tabwriter.NewWriter(&b, 1, 0, 4, ' ', 0)
envconfig.Usagef(prefix, spec, tabs, mdFormat)
tabs.Flush()
// replace the second line's spaces by dash
bytes := b.Bytes()
lines := 0
for i, b := range bytes {
if b == '\n' {
lines++
}
if lines == 1 && b == ' ' {
bytes[i] = '-'
}
}
io.Copy(output, &b)
}
from envconfig.
Thanks, @owulveryck, I needed the output in AsciiDoc format instead of markdown and your snippet was very useful, since I only had to adapt the mdFormat
variable. If anybody else is interested, here's the corresponding template to render an AsciiDoc Table:
adocFormat := `
[%header,cols="1,1,1,1,2"]
|===
| KEY | TYPE | DEFAULT | REQUIRED | DESCRIPTION
{{range .}}| {{ usage_key . }} | {{usage_type .}} | {{usage_default .}} | {{usage_required .}} | {{usage_description .}}
{{end}}|===
`
from envconfig.
Usage was what I was looking for! My goal is to generate an output similar to the one shown here. I should be able to generate the markdown somewhere in my CI/CD pipeline with help from Usagef(), I should've checked the GoDoc first, thanks.
from envconfig.
Related Issues (20)
- Support for map[string]interface{} HOT 1
- environment variable does not precede default envconfig value in struct HOT 1
- Add support for getting a FlagSet from envconfig HOT 1
- Possible to populate fields discretely for a slice of structs? HOT 4
- Syntax for map of structs or other maps HOT 1
- envconfig does not reach nested structs HOT 3
- Feature Request: Ability to get list of ENV variables HOT 2
- Var not found after being exported HOT 1
- Maps configuration with value including colon character HOT 3
- Incorrectly reading long strings HOT 1
- time.Duration support for days notation
- Support a second API func to control environments source
- Set `split_words` as a global option HOT 4
- support optional trim
- Error message from required field should include prefix if specified. HOT 1
- Required by default
- Support for conditional requirement of variables
- Is this project still maintained? HOT 5
- Feature Request: Make usage available in machine processable format
- Invalid time fields are parsed without error HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from envconfig.