2026-04-16 22:38:20 +02:00
VENV := .venv
PYTHON := $( VENV) /bin/python
PIP := $( VENV) /bin/pip
MKDOCS := $( VENV) /bin/mkdocs
CARGO_DIR := src
DOC_DIR := docmd
DOC_FILE := mkdocs.yml
DOC_SITE := doc
DOC_PORT := 8001
# ── virtualenv ────────────────────────────────────────────────────────────────
$(VENV)/bin/activate :
python3 -m venv $( VENV)
$(MKDOCS) : $( VENV ) /bin /activate
$( PIP) install --quiet --upgrade pip
$( PIP) install --quiet \
livereload watchdog \
mkdocs mkdocs-material \
mkdocs-mermaid2-plugin \
mkdocs-bibtex
2026-06-19 09:55:41 +02:00
$( PIP) install --quiet --upgrade InSilicoSeq
2026-04-16 22:38:20 +02:00
# ── obikmer binary ───────────────────────────────────────────────────────────
2026-04-27 20:17:06 +02:00
PROFILE_FILE := profile.pb
PPROF_PORT := 8081
2026-04-16 22:38:20 +02:00
.PHONY : obikmer
obikmer :
cargo build --release --manifest-path $( CARGO_DIR) /Cargo.toml --bin obikmer
2026-04-27 20:17:06 +02:00
.PHONY : debug
2026-04-16 22:38:20 +02:00
debug :
cargo build --manifest-path $( CARGO_DIR) /Cargo.toml --bin obikmer
2026-04-27 20:17:06 +02:00
.PHONY : profile -build
profile-build :
cargo build --release --manifest-path $( CARGO_DIR) /Cargo.toml \
--bin obikmer --features obikmer/profiling
.PHONY : profile -view
profile-view :
go tool pprof -http= 127.0.0.1:$( PPROF_PORT) $( PROFILE_FILE)
2026-04-16 22:38:20 +02:00
# ── documentation ─────────────────────────────────────────────────────────────
.PHONY : doc
doc : $( MKDOCS )
$( MKDOCS) build -f $( DOC_FILE)
.PHONY : doc -serve
doc-serve : $( MKDOCS )
$( MKDOCS) serve -f $( DOC_FILE) \
--dev-addr= 127.0.0.1:$( DOC_PORT) \
--livereload
.PHONY : clean -doc
clean-doc :
rm -rf $( DOC_SITE) /
.PHONY : clean
clean : clean -doc
rm -rf $( VENV)
2026-06-22 10:33:16 +02:00
# ── release ───────────────────────────────────────────────────────────────────
CARGO_TOML := $( CARGO_DIR) /obikmer/Cargo.toml
.PHONY : bump -version
bump-version :
@current= $$ ( grep '^version = ' $( CARGO_TOML) | head -n 1 | sed 's/version = "\(.*\)"/\1/' ) ; \
if [ -n " $( RELEASE) " ] ; then \
new_version = " $( RELEASE) " ; \
else \
major = $$ ( echo $$ current | cut -d. -f1) ; \
minor = $$ ( echo $$ current | cut -d. -f2) ; \
patch = $$ ( echo $$ current | cut -d. -f3) ; \
new_patch = $$ (( patch + 1)) ; \
new_version = " $$ major. $$ minor. $$ new_patch" ; \
fi ; \
echo "Version: $$ current -> $$ new_version" ; \
sed -i.bak "s/^version = \" $$ current\"/version = \" $$ new_version\"/" $( CARGO_TOML) && \
rm $( CARGO_TOML) .bak
.PHONY : release
release : bump -version
@jj auto-describe
@jj git push --change @
2026-06-22 14:58:37 +02:00
@new_version= $$ ( grep '^version = ' $( CARGO_TOML) | head -n 1 | sed 's/version = "\(.*\)"/\1/' ) ; \
2026-06-22 16:16:09 +02:00
git_hash = $$ ( jj log -r @ --no-graph -T 'commit_id' ) ; \
2026-06-23 08:50:18 +02:00
commits = $$ ( jj log -r 'latest(tags())..@' --no-graph -T 'description ++ "\n"' 2>/dev/null || \
jj log --no-graph -T 'description ++ "\n"' --limit 30) ; \
notes = $$ ( printf 'Write concise markdown release notes for obikmer (a Rust kmer genomics tool). Be technical and direct. Base them strictly on these commit messages:\n\n%s' " $$ commits" | aichat) ; \
git tag -a "v $$ new_version" -m " $$ notes" " $$ git_hash" && \
2026-06-22 14:58:37 +02:00
git push origin "v $$ new_version"