blob: ead430a88b238885c0f929a741a2f179c58a7333 [file] [log] [blame]
#!/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}"