marimo-learn / Makefile
Greg Wilson
adding target to build WASM
930b7f4
ROOT := .
SITE := _site
TMP := ./tmp
BRANCH := main
LESSON_DATA := ${TMP}/lessons.json
TEMPLATES := $(wildcard templates/*.html)
NOTEBOOK_INDEX := $(wildcard */index.md)
NOTEBOOK_DIR := $(patsubst %/index.md,%,${NOTEBOOK_INDEX})
NOTEBOOK_SRC := $(foreach dir,$(NOTEBOOK_DIR),$(wildcard $(dir)/??_*.py))
NOTEBOOK_OUT := $(patsubst %.py,${SITE}/%.html,$(NOTEBOOK_SRC))
DATABASES := \
sql/public/lab.db \
sql/public/penguins.db \
sql/public/survey.db
MARIMO := uv run marimo
PYTHON := uv run python
# Default target
all: commands
## commands : show all commands
commands:
@grep -h -E '^##' ${MAKEFILE_LIST} | sed -e 's/## //g' | column -t -s ':'
## install: install required packages
install:
uv pip install -r requirements.txt
## check: run all simple checks
check:
-@make check_empty
-@make check_titles
-@make check_typos
-@make check_packages
## check_exec: run notebooks to check for runtime errors
check_exec:
@if [ -z "$(NOTEBOOKS)" ]; then \
bash bin/run_notebooks.sh $(NOTEBOOK_SRC); \
else \
bash bin/run_notebooks.sh $(NOTEBOOKS); \
fi
## build: build website
build: ${LESSON_DATA} ${TEMPLATES}
${PYTHON} bin/build.py --branch ${BRANCH} --root ${ROOT} --output ${SITE} --data ${LESSON_DATA}
## links: check links locally (while 'make serve')
links:
linkchecker -F text http://localhost:8000
## wasm: build all notebooks as WASM
wasm: ${NOTEBOOK_OUT}
## serve: run local web server without rebuilding
serve:
${PYTHON} -m http.server --directory ${SITE}
## databases: rebuild datasets for SQL lessons
databases: ${DATABASES}
## ---: ---
## clean: clean up stray files
clean:
@find . -name '*~' -exec rm {} +
@find . -name '.DS_Store' -exec rm {} +
@rm -rf ${TMP}
@rm -f log_data_filtered*.*
## check_empty: check for empty cells
check_empty:
@${PYTHON} bin/check_empty_cells.py
## check_titles: check for missing titles in notebooks
check_titles:
@${PYTHON} bin/check_missing_titles.py
## check_packages: check for inconsistent package versions across notebooks
check_packages:
@if [ -z "$(NOTEBOOKS)" ]; then \
${PYTHON} bin/check_notebook_packages.py $(NOTEBOOK_SRC); \
else \
${PYTHON} bin/check_notebook_packages.py $(NOTEBOOKS); \
fi
## check_typos: check for typos
check_typos:
@typos ${TEMPLATES} ${NOTEBOOK_INDEX} ${NOTEBOOK_SRC}
## extract: extract lesson data
extract: ${LESSON_DATA}
#
# subsidiary targets
#
tmp/lessons.json: $(NOTEBOOK_INDEX)
${PYTHON} bin/extract.py --root ${ROOT} --data ${LESSON_DATA}
${SITE}/%.html: %.py
${MARIMO} export html-wasm --force --mode edit $< -o $@ --sandbox
sql/public/lab.db: bin/create_sql_lab.sql
@rm -f $@
@mkdir -p sql/public
sqlite3 $@ < $<
sql/public/penguins.db: bin/create_sql_penguins.py data/penguins.csv
@rm -f $@
@mkdir -p sql/public
${PYTHON} $< data/penguins.csv $@
sql/public/survey.db: bin/create_sql_survey.py
@rm -f $@
@mkdir -p sql/public
${PYTHON} $< $@ 192837