https://github.com/linkorb/envoi
Envoi: Environment variables on steroids
https://github.com/linkorb/envoi
Last synced: 9 months ago
JSON representation
Envoi: Environment variables on steroids
- Host: GitHub
- URL: https://github.com/linkorb/envoi
- Owner: linkorb
- License: mit
- Created: 2019-03-15T11:46:39.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-11-05T19:18:34.000Z (over 1 year ago)
- Last Synced: 2025-09-04T11:57:01.665Z (10 months ago)
- Language: PHP
- Homepage: https://engineering.linkorb.com
- Size: 76.2 KB
- Stars: 2
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
envoi
============
Envoi aims to ease the use and documentation of environment variables (env
vars) in PHP applications.
Envoi features:
- a Yaml schema to describe the env vars that may be used to configure an
application
- tools to validate env vars against a schema
- a tool to assist in the population of a `.env` file
- a tool which converts a schema to markdown
Envoi sports a console command which validates a `.env` file against a schema
(by convention, `.env.yaml`). It also provides checkers that, when invoked
early in the start-up phase of an application, will halt an application which
doesn't have a complete and valid set of env vars.
### Install
```shell
composer require linkorb/envoi
```
### Use
#### Env Checkers
A checker should be invoked as early as possible in the life-cycle of an
application. The ideal time is immediately after the environment has been
populated with env vars. For example, in a Symfony-based app, the checker
should be invoked right after the Dotenv component has loaded the env vars from
the various `.env*` files:
```php
loadEnv(dirname(__DIR__).'/.env');
// check the env!
(new EnvChecker())->check(dirname(__DIR__).'/.env.yaml');
```
The checker will throw an exception to halt the application when invalid env
vars are found. The list of validation errors is included in the exception
message.
`EnvChecker` treats the environment as immutable: it validates env vars, but
does not modify them. `MutableEnvChecker` validates env vars and can also
transform values, making it the ideal checker when you want to take advantage
of the various env var transformation features of Envoi.
#### Interpolation
Assign one variable based on another in `.env` file
```shell
FOO="foo"
BAR="{FOO}/logs"
```
Metadata environment example `.env.yaml`
Supports types: `int`, `string`, `url`, `path`
```yaml
FOO:
description: Used to configure foo system
type: url
default: "https://username:password@example.com/bla"
required: true
QUX:
description: path to qux files
type: path
example: "some example value"
make-absolute-path: true # "Expands relative paths to absolute paths (i.e. ~/qux becomes /home/joe/qux)
BAR:
description: Used for bar things
type: string
options: RED,GREEN,BLUE # validates that input is one of the available options
```
Init environment variables from `.env`
```php
Envoi::init();
$foo = getenv('FOO');
```
#### CLI
```shell
./vendor/bin/envoi
```
Available commands:
`validate` Validate based on meta file `.env.yaml`.
`configure` CLI wizard to ask + update .env file based on `.env.yaml`.
`markdown` Output a GitHub Flavored Markdown documentation for the available variables.
Look for a `` and `` tags in file (default to README.md), and insert/update the generated markdown between those tags.
### Run tests
```shell
./vendor/bin/phpunit
```
## Contributing
We welcome contributions to make this repository even better. Whether it's fixing a bug, adding a feature, or improving documentation, your help is highly appreciated. To get started, fork this repository then clone your fork.
Be sure to familiarize yourself with LinkORB's [Contribution Guidelines](/CONTRIBUTING.md) for our standards around commits, branches, and pull requests, as well as our [code of conduct](/.github/CODE_OF_CONDUCT.md) before submitting any changes.
If you are unable to implement changes you like yourself, don't hesitate to open a new issue report so that we or others may take care of it.
## Brought to you by the LinkORB Engineering team

Check out our other projects at [linkorb.com/engineering](http://www.linkorb.com/engineering).
By the way, we're hiring!