@@ -395,3 +395,73 @@ mocks:
395395 @go get github.com/vektra/mockery/v2
396396 @go generate ./...
397397 @make format-go
398+
399+ # ##############################################################################
400+ # ## D2 Diagrams ###
401+ # ##############################################################################
402+
403+ D2_THEME =300
404+ D2_DARK_THEME =200
405+ D2_LAYOUT =tala
406+
407+ D2_ENV_VARS=D2_THEME =$(D2_THEME ) \
408+ D2_DARK_THEME=$(D2_DARK_THEME ) \
409+ D2_LAYOUT=$(D2_LAYOUT )
410+
411+ .PHONY : d2check d2watch d2gen d2gen-all
412+
413+ d2check :
414+ @echo " 🔍 checking if d2 is installed..."
415+ @which d2 > /dev/null 2>&1 || { \
416+ echo " 🔴 d2 is not installed, see installation docs: https://d2lang.com/tour/install/" ; \
417+ exit 1; \
418+ }
419+ @echo " 🟢 d2 is installed"
420+ @echo " 🔍 checking if $( D2_LAYOUT) layout is installed..."
421+ @d2 layout | grep $(D2_LAYOUT ) > /dev/null 2>&1 || { \
422+ echo " 🔴 $( D2_LAYOUT) layout is not installed, see docs: https://d2lang.com/tour/layouts/" ; \
423+ exit 1; \
424+ }
425+ @echo " 🟢 $( D2_LAYOUT) layout is installed"
426+
427+ d2watch : d2check
428+ @if [ -z " $( FILE) " ]; then \
429+ echo " 🔴 missing required parameter FILE, the correct usage is: make d2watch FILE=path/to/file.d2" ; \
430+ exit 1; \
431+ fi
432+ @if [ ! -f " $( FILE) " ]; then \
433+ echo " 🔴 file $( FILE) does not exist" ; \
434+ exit 1; \
435+ fi
436+ @echo " 🔄 watching $( FILE) for changes..."
437+ @dir=$$(dirname "$(FILE ) " ) ; \
438+ basename=$$(basename "$(FILE ) " .d2) ; \
439+ svgfile=" $$ dir/$$ basename.svg" ; \
440+ printf " 📊 generating $$ svgfile from $( FILE) ... " ; \
441+ $(D2_ENV_VARS ) d2 --watch " $( FILE) " " $$ svgfile"
442+
443+ d2gen : d2check
444+ @if [ -z " $( FILE) " ]; then \
445+ echo " 🔴 missing required parameter FILE, the correct usage is: make d2gen FILE=path/to/file.d2" ; \
446+ exit 1; \
447+ fi
448+ @if [ ! -f " $( FILE) " ]; then \
449+ echo " 🔴 file $( FILE) does not exist" ; \
450+ exit 1; \
451+ fi
452+ @dir=$$(dirname "$(FILE ) " ) ; \
453+ basename=$$(basename "$(FILE ) " .d2) ; \
454+ svgfile=" $$ dir/$$ basename.svg" ; \
455+ printf " 📊 generating $$ svgfile from $( FILE) ... " ; \
456+ $(D2_ENV_VARS ) d2 " $( FILE) " " $$ svgfile" > /dev/null 2>&1 && echo " done ✅" || echo " failed ❌" ;
457+
458+ d2gen-all : d2check
459+ @echo " 🟢 generating svg files for all d2 diagrams..."
460+ @find . -name " *.d2" -type f | while read d2file; do \
461+ dir=$$(dirname "$$d2file" ) ; \
462+ basename=$$(basename "$$d2file" .d2) ; \
463+ svgfile=" $$ dir/$$ basename.svg" ; \
464+ printf " 📊 generating $$ svgfile from $$ d2file... " ; \
465+ $(D2_ENV_VARS ) d2 " $$ d2file" " $$ svgfile" > /dev/null 2>&1 && echo " done ✅" || echo " failed ❌" ; \
466+ done
467+ @echo " ✅ svg files generated for all d2 diagrams"
0 commit comments