Draws a diagram that shows the dependencies between docker images using http://yuml.me
#!/bin/bash
set -euo pipefail
repo=$1
dsl_text() {
while read d; do \
from=$(grep FROM $d | cut -d ' ' -f2)
name=$(grep '##' $d | sed "s|##||g" | jq -r .name)
echo "[$from]->[$repo/$name]" | sed "s|/|\/|g"
done < <(find . -name Dockerfile)
}
dsl_text_encoded() {
dsl_text | tr '\n' '+' \
| sed -r \
-e "s|\+|%2C\+|g" \
-e "s|\[|%5B|g" -e "s|]|%5D|g" \
-e "s|:|%3A|g" -e "s|>|%3E|g" \
-e "s|&|%26|g" -e "s|#|%23|g" -e "s|;|%3B|g"
}
yumlme() {
curl -s 'http://yuml.me/diagram/scruffy;dir:LR;scale:80/class/' \
-H 'Origin: http://yuml.me' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Accept-Language: fr,en-US;q=0.8,en;q=0.6' \
-H 'User-Agent: Mozilla/5.0 AppleWebKit/42 (KHTML, like Gecko) Chrome/42 Safari/42' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: */*' \
-H 'Referer: http://yuml.me/diagram/scruffy/class/draw' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'Connection: keep-alive' \
--data 'dsl_text='$(dsl_text_encoded) \
--compressed
}
main() {
cmd=$(yumlme | sed -r "s|(.*).png|sensible-browser http://yuml.me/edit/\1|")
echo "$cmd" && $cmd
}
main