File size: 2,901 Bytes
aaef24a
 
 
1a93371
aaef24a
 
40d4bdb
aaef24a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40d4bdb
 
aaef24a
a7e66b2
aaef24a
 
 
 
 
 
 
 
a7e66b2
aaef24a
 
 
 
 
 
 
77b9c0b
aaef24a
930b7f4
1a93371
aaef24a
 
 
 
 
930b7f4
 
 
aaef24a
77b9c0b
aaef24a
 
 
 
40d4bdb
aaef24a
 
 
40d4bdb
 
 
aaef24a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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