DDD
This commit is contained in:
commit
8674ef2086
181
readme.md
Normal file
181
readme.md
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
# ⚡️-runner: the minimal task runner you've been missing in your life
|
||||||
|
⚡️-runner is a language-agnostic task runner in the category of tools such as `make`, `grunt`, `gradle`, `leiningen`, etc. It has a single, widely available dependency: bash.
|
||||||
|
It's intent is to provide your shell scripts with the syntactic sugar they crave to make them more presentable, and more manageable.
|
||||||
|
|
||||||
|
# Why have you done this?
|
||||||
|
The main reason ⚡️-runner was born, was because I'm a huge fan of [go scripts](https://blog.thepete.net/blog/2014/03/28/_-attributes-of-an-amazing-dev-toolchain/). I find myself including one in nearly every repo I make. I've also started finding myself copy-pasting a WHOLE bunch of helper functions across them. These scripts are always in bash to make them easily usable by everyone on a team, regardless of their operating system of choice. I've also found myself using similar patterns for other scripts I have, which do maybe more than a single thing but maybe less than a full application would warrant.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
Download the runner, chuck it into your repo, and source it from a shell script!
|
||||||
|
(snazy curl-to-shell url coming eventually (maybe))
|
||||||
|
|
||||||
|
# Now it's time for some documentation-driven development! (a.k.a. usage examples)
|
||||||
|
a.k.a. Literally none of this works.
|
||||||
|
|
||||||
|
## Hello ⚡️
|
||||||
|
As is tradition:
|
||||||
|
```bash
|
||||||
|
$ echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
⚡️hello() {
|
||||||
|
_help-line "Say hello!"
|
||||||
|
echo Hello, world!
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
' > go && chmod +x go
|
||||||
|
$ ./go hello
|
||||||
|
Hello, world!
|
||||||
|
$ ./go
|
||||||
|
Usage: ./go [sub-command]
|
||||||
|
|
||||||
|
Available subcommands:
|
||||||
|
hello - Say hello!
|
||||||
|
help - Show this list
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build/run/check/test/clean
|
||||||
|
Look! It's like a task runner!
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd $(dirname $0)
|
||||||
|
|
||||||
|
⚡️build() {
|
||||||
|
echo "echo hi" > .generated/potato
|
||||||
|
chmod +x .generated/potato
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️run() {
|
||||||
|
⚡️build
|
||||||
|
.generated/potato "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️check() {
|
||||||
|
⚡️build
|
||||||
|
shellcheck .generated/potato
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️test() {
|
||||||
|
⚡️build
|
||||||
|
[ "$(.generated/potato)" == "hi" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️clean() {
|
||||||
|
rm -rf .generated
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
```
|
||||||
|
|
||||||
|
## It's just bash!
|
||||||
|
Do whatever you need, just define a ⚡️function or two as the interface
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cookie_jar_path=$(mktemp)
|
||||||
|
trap "rm $cookie_jar_path" EXIT
|
||||||
|
encrypted_password=$(pass routers/tp-link-encrypted)
|
||||||
|
|
||||||
|
router-curl() {
|
||||||
|
path=$1; shift
|
||||||
|
curl -s -b $cookie_jar_path -c $cookie_jar_path -X POST "http://192.168.0.1/cgi-bin/luci/;stok=${STOK:-}/$path" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️connected-devices() {
|
||||||
|
_help-line "Show devices connected to router"
|
||||||
|
STOK=$(router-curl login?form=login --data-raw "operation=login&password=$encrypted_password"| jq -r .data.stok )
|
||||||
|
router-curl admin/status?form=all | jq '.data | [.access_devices_wired, .access_devices_wireless_guest, .access_devices_wireless_host] | flatten'
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
```
|
||||||
|
|
||||||
|
# More sugar
|
||||||
|
## Colors
|
||||||
|
```diff
|
||||||
|
$ echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
⚡️good() {
|
||||||
|
_good-message + Good Message
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️bad() {
|
||||||
|
_bad-message - Bad Message
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
' > go && chmod +x go
|
||||||
|
$ ./go good
|
||||||
|
+ Good message
|
||||||
|
$ ./go bad
|
||||||
|
- Bad message
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
```bash
|
||||||
|
$ echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
_verify-prerequisites() {
|
||||||
|
docker ps &> /dev/null || echo 'Not enough docker'
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️ubuntu() {
|
||||||
|
docker run -ti ubuntu
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
' > go && chmod +x go
|
||||||
|
$ ./go ubuntu
|
||||||
|
Not enough docker
|
||||||
|
```
|
||||||
|
|
||||||
|
# Wrappers
|
||||||
|
Tired of your gradlew, terraformw, mavenw, jqw, opensslw, kubectlw, etc literring the root of your repo? Me too!
|
||||||
|
```bash
|
||||||
|
$ echo '
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
kubectlw() {
|
||||||
|
_wrapper \
|
||||||
|
-a "$@" \
|
||||||
|
-n kubectl \
|
||||||
|
-v v1.19.4 \
|
||||||
|
-l https://dl.k8s.io/release/VERSION/bin/linux/amd64/kubectl \
|
||||||
|
-d https://dl.k8s.io/release/VERSION/bin/darwin/amd64/kubectl
|
||||||
|
}
|
||||||
|
|
||||||
|
⚡️kubectl-version() {
|
||||||
|
kubectlw version
|
||||||
|
}
|
||||||
|
|
||||||
|
source ⚡️
|
||||||
|
' > go && chmod +x go
|
||||||
|
$ ./go kubectl-version
|
||||||
|
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-11T13:17:17Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"darwin/amd64"}
|
||||||
|
The connection to the server localhost:8080 was refused - did you specify the right host or port?
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Appendix
|
||||||
|
This is where I would put the full list of helpers ⚡️-runner provides IF I HAD ONE
|
||||||
|
|
||||||
|
# FAQ
|
||||||
|
## How do I type ⚡️?
|
||||||
|
Below this line are a number of options. Go down the list until you find one that works for you.
|
||||||
|
- ^⌘Space on macos opens the emoji picker. Search for 'lightning'
|
||||||
|
- ⊞Win + . on windows opens the emoji picker. Search for 'lightning'
|
||||||
|
- ctrl + . within gnome opens the emoji picker. Search for 'lightning' (can someone confirm?)
|
||||||
|
- Super + . within KDE opens the emoji picker. Search for 'lightning' (can someone confirm?)
|
||||||
|
- Copy and paste this: ⚡️
|
||||||
|
- Use your favorite web search engine to search for 'lightning emoji', copy paste from there.
|
||||||
|
## Why bash?
|
||||||
|
Because I like it.
|
||||||
|
## But really, why bash?
|
||||||
|
When have you, a developer, used a computer that doesn't have bash installed?
|
||||||
|
## My operating system of choice is Windows, it doesn't come with bash?
|
||||||
|
That's not a question. Enable WSL.
|
||||||
|
## I don't want to enable WSL?
|
||||||
|
That's still not a question. Also you're wrong.
|
Loading…
Reference in New Issue
Block a user