Packages
fnord
0.9.38
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
Makefile
.DEFAULT_GOAL := build
.PHONY: help
help: ## Display this help message
@echo "Usage: make [target]"
@echo
@echo "Targets:"
@awk '/^[a-zA-Z0-9_-]+:.*## / {printf "%s : %s\n", $$1, substr($$0, index($$0, "##") + 3)}' $(MAKEFILE_LIST) | sort | column -t -s ':'
@echo
.PHONY: build
build: ## Build the escript
mix escript.build
.PHONY: compile
compile: ## Compile the project
mix compile --all-warnings --warnings-as-errors
@echo
.PHONY: test
test: ## Run tests
mix test
@echo
.PHONY: cover
cover: ## Run tests with coverage
mix coveralls
@echo
.PHONY: dialyzer
dialyzer: ## Run Dialyzer
MIX_ENV=dev mix dialyzer
@echo
.PHONY: docs
docs: md-lint ## Generate documentation
mix docs
@echo
# Builds the docs purely to surface ExDoc autolink failures (broken
# `Mod.fun/arity` references in @doc/@moduledoc strings). These are invisible
# to compile/test/dialyzer - only the doc generator resolves them - so without
# this the only gate is CI's "build docs" step. `--warnings-as-errors` makes
# ExDoc exit non-zero on any warning, mirroring that CI step locally.
.PHONY: docs-check
docs-check: ## Build docs, failing on any ExDoc warning (autolink check)
MIX_ENV=dev mix docs --warnings-as-errors
@echo
# Boots the built escript once and requires exit 0. The test suite cannot
# catch production boot regressions: test_helper starts foundational services
# (e.g. Services.Globals) for the whole VM, so a missing start in the prod
# boot path passes every test and crashes the binary (see docs/dev/gotchas.md
# item 9). Help output exercises the full pre-parse boot (Fnord.Instance,
# frob loading, CLI parse) without needing a project or network. HOME is
# isolated so the check neither reads nor writes the developer's ~/.fnord.
.PHONY: boot-check
boot-check: build ## Boot the escript once (catches prod-boot-path regressions)
@tmp=$$(mktemp -d) && HOME=$$tmp ./fnord -h > /dev/null && rm -rf $$tmp
@echo "escript boots"
@echo
.PHONY: check
check: compile boot-check test dialyzer md-lint docs-check ## Run all checks
@echo "All checks passed"
.PHONY: md-lint
md-lint: ## Lint markdown files
markdownlint-cli2 --config .markdownlint.json {test,lib,docs}/**/*.md README.md
.PHONY: md-format
md-format: ## Format markdown files
@git diff --exit-code >/dev/null || (printf "!! Uncommitted changes found\n!! Commit or stash first\n\n" >&2 && exit 1)
@markdownlint-cli2 --config .markdownlint.json --fix {test,lib,docs}/**/*.md README.md
.PHONY: format
format: ## Format the code
mix format
# Deliberately NOT a dependency of release/publish: an aborted publish must
# not leave a bump commit behind. Run as `make bump && make release`.
.PHONY: bump
bump: ## Bump the patch version in mix.exs and commit it as "version bump"
@test -z "$$(git status --porcelain)" || (printf "!! Working tree is not clean\n!! Commit or stash first\n\n" >&2 && exit 1)
@perl -i -pe 's/version: "\K(\d+)\.(\d+)\.(\d+)/"$$1.$$2." . ($$3 + 1)/e' mix.exs
@git add mix.exs
@git commit --quiet -m "version bump"
@printf "Bumped to %s\n" "$$(perl -ne 'print $$1 if /version: "([^"]+)"/' mix.exs)"
.PHONY: release
release: publish ## Alias for publish because apparently this is what my fingers' muscle memory prefers
.PHONY: publish
publish: check docs ## Publish the package
mix hex.publish
.PHONY: republish
republish: check docs ## Republish the package (within like 20m of publishing the last version)
mix hex.publish --replace
.PHONY: find-bak
find-bak: ## Find all backup files generated by fnord itself (**/*.*.bak)
find . -name "*.*.bak" -print
.PHONY: clean-bak
clean-bak: ## Clean up backup files generated by fnord itself (**/*.*.bak)
find . -name "*.*.bak" -print -exec rm -f {} \;
.PHONY: clean
clean: clean-bak ## Clean up ALL build artifacts, including dependencies and build directories
mix clean
rm -rf _build
rm -rf deps
rm -rf .elixir_ls
# ------------------------------------------------------------------------------
# Smoke-test rig
#
# Runs fnord against the real API in a HOME-isolated sandbox so the developer's
# actual ~/.fnord/ config, conversations, memory, and indexed projects are
# untouched. API keys propagate from the parent shell's env (the rig does not
# override OPENAI_API_KEY / FNORD_OPENAI_API_KEY).
#
# Default sandbox: $(SMOKE_HOME), default project root: this repo. Override on
# the command line, e.g.
# make smoke-setup SMOKE_HOME=/tmp/other SMOKE_PROJECT=otherproj
# make smoke-ask ARGS='-q "summarize the responses-api migration so far"'
# make smoke-clean
# ------------------------------------------------------------------------------
SMOKE_HOME ?= /tmp/fnord-responses-smoke
SMOKE_PROJECT ?= smoke
.PHONY: smoke-setup
smoke-setup: build ## Index $(PWD) into the smoke sandbox at $(SMOKE_HOME) (idempotent)
mkdir -p $(SMOKE_HOME)
HOME=$(SMOKE_HOME) ./fnord index -p $(SMOKE_PROJECT) -d $(PWD)
.PHONY: smoke-ask
smoke-ask: build ## Ask the smoke project. Pass flags via ARGS, e.g. ARGS='-q "..."'
HOME=$(SMOKE_HOME) ./fnord ask -p $(SMOKE_PROJECT) $(ARGS)
.PHONY: smoke-clean
smoke-clean: ## Nuke the smoke sandbox. Run before retesting a destructive change.
rm -rf $(SMOKE_HOME)