added ezconf and updated modules with integration
This commit is contained in:
161
ezconf/README.md
Normal file
161
ezconf/README.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# EZConf - v0.1.0
|
||||
|
||||
A unified configuration management system for loading and managing environment-based configurations across multiple packages in Go.
|
||||
|
||||
## Features
|
||||
|
||||
- Load configurations from multiple packages using their ConfigFromEnv functions
|
||||
- Parse package source code to extract environment variable documentation from struct comments
|
||||
- Generate and update .env files with all required environment variables
|
||||
- Print environment variable lists with descriptions and current values
|
||||
- Track additional custom environment variables
|
||||
- Support for both inline and doc comments in ENV format
|
||||
- Automatic environment variable value population
|
||||
- Preserve existing values when updating .env files
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
go get git.haelnorr.com/h/golib/ezconf
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Easy Integration (Recommended)
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"git.haelnorr.com/h/golib/ezconf"
|
||||
"git.haelnorr.com/h/golib/hlog"
|
||||
"git.haelnorr.com/h/golib/hws"
|
||||
"git.haelnorr.com/h/golib/hwsauth"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create a new configuration loader
|
||||
loader := ezconf.New()
|
||||
|
||||
// Register packages using built-in integrations
|
||||
loader.RegisterIntegrations(
|
||||
hlog.NewEZConfIntegration(),
|
||||
hws.NewEZConfIntegration(),
|
||||
hwsauth.NewEZConfIntegration(),
|
||||
)
|
||||
|
||||
// Load all configurations
|
||||
if err := loader.Load(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Get configurations
|
||||
hlogCfg, _ := loader.GetConfig("hlog")
|
||||
cfg := hlogCfg.(*hlog.Config)
|
||||
|
||||
// Use configuration
|
||||
logger, _ := hlog.NewLogger(cfg, os.Stdout)
|
||||
logger.Info().Msg("Application started")
|
||||
}
|
||||
```
|
||||
|
||||
### Manual Integration
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"git.haelnorr.com/h/golib/ezconf"
|
||||
"git.haelnorr.com/h/golib/hlog"
|
||||
"git.haelnorr.com/h/golib/hws"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create a new configuration loader
|
||||
loader := ezconf.New()
|
||||
|
||||
// Add package paths to parse for ENV comments
|
||||
loader.AddPackagePath("vendor/git.haelnorr.com/h/golib/hlog")
|
||||
loader.AddPackagePath("vendor/git.haelnorr.com/h/golib/hws")
|
||||
|
||||
// Add configuration loaders
|
||||
loader.AddConfigFunc("hlog", func() (interface{}, error) {
|
||||
return hlog.ConfigFromEnv()
|
||||
})
|
||||
loader.AddConfigFunc("hws", func() (interface{}, error) {
|
||||
return hws.ConfigFromEnv()
|
||||
})
|
||||
|
||||
// Load all configurations
|
||||
if err := loader.Load(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Get a specific configuration
|
||||
hlogCfg, ok := loader.GetConfig("hlog")
|
||||
if ok {
|
||||
cfg := hlogCfg.(*hlog.Config)
|
||||
// Use configuration...
|
||||
}
|
||||
|
||||
// Print all environment variables
|
||||
if err := loader.PrintEnvVarsStdout(false); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Generate a .env file
|
||||
if err := loader.GenerateEnvFile(".env", false); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
For detailed documentation, see the [EZConf Wiki](../golib-wiki/EZConf.md).
|
||||
|
||||
Additional API documentation is available at [GoDoc](https://pkg.go.dev/git.haelnorr.com/h/golib/ezconf).
|
||||
|
||||
## ENV Comment Format
|
||||
|
||||
EZConf parses struct field comments in the following format:
|
||||
|
||||
```go
|
||||
type Config struct {
|
||||
// ENV LOG_LEVEL: Log level for the application (default: info)
|
||||
LogLevel string
|
||||
|
||||
// ENV DATABASE_URL: Database connection string (required)
|
||||
DatabaseURL string
|
||||
|
||||
// Inline comments also work
|
||||
Port int // ENV PORT: Server port (default: 8080)
|
||||
}
|
||||
```
|
||||
|
||||
The format is:
|
||||
- `ENV ENV_VAR_NAME: Description (optional modifiers)`
|
||||
- `(required)` or `(required if condition)` - marks variable as required
|
||||
- `(default: value)` - specifies default value
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the LICENSE file for details.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
|
||||
## Related Projects
|
||||
|
||||
- [hlog](https://git.haelnorr.com/h/golib/hlog) - Structured logging package with ConfigFromEnv
|
||||
- [hws](https://git.haelnorr.com/h/golib/hws) - HTTP web server with ConfigFromEnv
|
||||
- [hwsauth](https://git.haelnorr.com/h/golib/hwsauth) - Authentication middleware with ConfigFromEnv
|
||||
- [env](https://git.haelnorr.com/h/golib/env) - Environment variable helpers
|
||||
|
||||
Reference in New Issue
Block a user