| #!/bin/bash | |
| # | |
| # This script is generating a zap schema diagram out of a sqlite file. | |
| # | |
| # It assumes that you have installed a schemacrawler tool and few other things. | |
| # You can find schemacrawler at: https://www.schemacrawler.com/ | |
| # | |
| # You need to have graphviz package installed for this to work correctly. | |
| # It also has only ever been tested on Linux. | |
| # | |
| # You can set env variables such as: | |
| # SC_HOME=/opt/schemacrawler | |
| if [ -z "$SC_HOME" ]; then | |
| SC_HOME=~/schemacrawler/latest | |
| fi | |
| SC_BIN=${SC_HOME}/_schemacrawler/bin/schemacrawler.sh | |
| SQLITE=~/.zap/self-check.sqlite | |
| SVG=zap-schema.svg | |
| if [ ! -x ${SC_BIN} ]; then | |
| echo "Can't find schemacrawler at ${SC_BIN}." | |
| echo "Please make sure schemacrawler is properly installed." | |
| echo "" | |
| echo "You can download it from: https://www.schemacrawler.com/" | |
| exit | |
| fi | |
| echo "Creating schema diagram to ${SVG} from database at ${SQLITE} ..." | |
| echo "First run self-check to make sure database is present..." | |
| npm run self-check | |
| if [ ! -s ${SQLITE} ]; then | |
| echo "" | |
| echo "Can't locate ${SQLITE} file. Database file is required to read schema from." | |
| exit | |
| fi | |
| # Generate the dot file using the schemacrawler | |
| ${SC_BIN} --server sqlite --database=${SQLITE} --command=schema --info-level=standard --output-format=scdot --output-file=zap-schema.dot | |
| if [ ! $? -eq 0 ]; then | |
| echo "" | |
| echo "Error executing schemacrawler from ${SC_BIN}" | |
| echo "Please make sure schemacrawler is properly installed." | |
| echo "" | |
| echo "You can download it from: https://www.schemacrawler.com/" | |
| exit | |
| fi | |
| # Fix the background of all HTML tables to white | |
| sed -i 's/color="#888888"/color="#888888" bgcolor="#ffffff"/g' zap-schema.dot | |
| # Fix the overall background of the image to transparent | |
| sed -i 's/rankdir="RL"/rankdir="RL"\n bgcolor="transparent"/g' zap-schema.dot | |
| # Make edges black and bold | |
| sed -i 's/edge \[/edge\[\n color="black"\n style="bold"/g' zap-schema.dot | |
| # Remove the weird arrow labels | |
| sed -i 's/label=<SCHCRWLR_.*>//g' zap-schema.dot | |
| # Remove the date stamp, so we don't create unnecessary commits | |
| sed -i '/.*td align=.left..202.*/d' zap-schema.dot | |
| sed -i 's/>generated on/ colspan=\"2\">ZAP schema, Copyright (c) 2020 Silicon Labs, released under Apache 2.0 license./g' zap-schema.dot | |
| # Convert the dot to svg using the "dot" tool from graphviz | |
| dot -Tsvg zap-schema.dot -o ${SVG} | |
| if [ ! $? -eq 0 ]; then | |
| echo "" | |
| echo "Error executing 'dot' command from graphviz package." | |
| echo "Please make sure graphviz is installed and on your PATH." | |
| exit | |
| fi | |
| echo "Diagram created: ${SVG}" |