Aliases that keep your secrets and time every run.
Save any command as a short alias, like ez deploy, and run it by name. Secrets come from your Keychain, so they never sit in a script. And every run is timed, so you know whether a build takes thirty seconds or a coffee break, and when it starts taking longer.
brew tap urtti/ez && brew install ezmacOS · Native Swift binary · MIT licensed

How it works
Create an alias and run it
ez add saves a command under a name of your choosing. Aliases belong to the folder you made them in and live in its .ez_cli.json, so ez check can mean something different in each repo. Commit the file and your team gets them too.
$ ez add deploy "./scripts/deploy.sh --env prod"🐘 ez deploy now stores ./scripts/deploy.sh --env prod. Execute in this directory with ez deploy.$ ez deploy🐘 Executing: ./scripts/deploy.sh --env prodDeploying to production...
🐘⏱️ 47.900 s
Store a secret and use it
Secrets stay in your Keychain and reach the command through its environment. Never on disk, never printed, and never sitting in ps.
$ ez add-secret --key EZ_API_KEYEnter value for EZ_API_KEY: 🐘 Secret 'EZ_API_KEY' stored in keychain.
$ ez add upload 'curl -H "Authorization: {EZ_API_KEY}" ...'🐘 ez upload now stores curl -H "Authorization: {EZ_API_KEY}" ... Execute in this directory with ez upload.$ ez upload🐘 Executing: curl -H "Authorization: {EZ_API_KEY}" https://api.example.comSee which commands got slower
Every run is timed and kept on your Mac in ~/.ez/runs.db: the alias that ran, never your arguments or secrets. ez stats shows each alias's median time and success rate, and flags the ones getting slower.
$ ez statsPass arguments
{1} and {2} take arguments in order. Anything extra goes on the end.
$ ez add tag 'git tag -a {1} -m "Release {1}"'🐘 ez tag now stores git tag -a {1} -m "Release {1}". Execute in this directory with ez tag.$ ez tag v2.0.0🐘 Executing: git tag -a v2.0.0 -m "Release v2.0.0"Run commands in parallel
An alias made with ez add -p runs its commands side by side and times each one. A single Ctrl+C stops them all.
$ ez add -p checks "npm run lint" "npm run typecheck"🐘 ez checks now stores npm run lint | npm run typecheck. Execute in this directory with ez checks.$ ez checksGood to know
- An alias exits with the code of whatever it ran, so
ez test && ez deploystops at a failed test, in scripts and in CI. vim,lessandsshwork through an alias exactly as they would directly.- No tracking or telemetry, and no network calls of its own.