Introduces a comprehensive documentation set covering theoretical foundations, CLI usage, installation, and system architecture. Adds MkDocs configuration and Makefile targets to generate, serve with live reload, and clean the documentation site. Includes citation styles and bibliography files for academic references.
118 lines
3.9 KiB
Makefile
118 lines
3.9 KiB
Makefile
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
|
|
|
|
DOC_USER_DIR := UserDocMD
|
|
DOC_USER_FILE := mkdocs-user.yml
|
|
DOC_USER_SITE := doc-user
|
|
DOC_USER_PORT := 8002
|
|
|
|
# ── 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
|
|
$(PIP) install --quiet --upgrade InSilicoSeq
|
|
|
|
# ── obikmer binary ───────────────────────────────────────────────────────────
|
|
|
|
PROFILE_FILE := profile.pb
|
|
PPROF_PORT := 8081
|
|
|
|
.PHONY: obikmer
|
|
obikmer:
|
|
cargo build --release --manifest-path $(CARGO_DIR)/Cargo.toml --bin obikmer
|
|
|
|
.PHONY: debug
|
|
debug:
|
|
cargo build --manifest-path $(CARGO_DIR)/Cargo.toml --bin obikmer
|
|
|
|
.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)
|
|
# ── 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: doc-user
|
|
doc-user: $(MKDOCS)
|
|
$(MKDOCS) build -f $(DOC_USER_FILE)
|
|
|
|
.PHONY: doc-user-serve
|
|
doc-user-serve: $(MKDOCS)
|
|
$(MKDOCS) serve -f $(DOC_USER_FILE) \
|
|
--dev-addr=127.0.0.1:$(DOC_USER_PORT) \
|
|
--livereload
|
|
|
|
.PHONY: clean-doc-user
|
|
clean-doc-user:
|
|
rm -rf $(DOC_USER_SITE)/
|
|
|
|
.PHONY: clean
|
|
clean: clean-doc clean-doc-user
|
|
rm -rf $(VENV)
|
|
|
|
# ── 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 @
|
|
@new_version=$$(grep '^version = ' $(CARGO_TOML) | head -n 1 | sed 's/version = "\(.*\)"/\1/'); \
|
|
git_hash=$$(jj log -r @ --no-graph -T 'commit_id'); \
|
|
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 2>/dev/null); \
|
|
tag_msg="$${notes:-Release v$$new_version}"; \
|
|
git tag -a "v$$new_version" -m "$$tag_msg" "$$git_hash" && \
|
|
git push origin "v$$new_version"
|