chore(test,docs): add make test, CI, e2e container, refresh example

- Makefile gains `test` and `test-e2e` targets; `deps` now installs the
  dev extras so pytest is available after `make deps`.
- .github/workflows/test.yml runs unit tests on push and PR to main
  (Python 3.13 on ubuntu-latest, ignores tests/e2e by default).
- tests/e2e/Containerfile + test_dotfiles_e2e.py scaffold a real
  container-based smoke test of `flow dotfiles init` + `link` against
  the example dotfiles repo. Gated by FLOW_RUN_E2E=1 so unit runs
  stay fast; verified locally with podman.
- tests/fakes.FakeRunner uses ordered subsequence matching instead of
  unordered containment -- prevents accidental match between unrelated
  commands that happen to share tokens.
- example/README.md rewritten for the current command surface
  (no more `dotfiles undo`, `dotfiles modules ...`, `--relink`,
  `bootstrap list/show/run --profile`, `bootstrap packages --resolved`).
  Adds an "External modules" section documenting `_module.yaml`.
- example/dotfiles-repo profiles.yaml drops `allow-sudo: true` along
  with the runtime support.
- pyproject.toml adds [tool.coverage] config.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-14 00:02:19 +03:00
parent a71742afee
commit 6a0eb9f6ef
9 changed files with 226 additions and 25 deletions

View File

@@ -10,15 +10,17 @@ SPEC_FILE := flow.spec
BINARY := $(DIST_DIR)/flow
INSTALL_DIR ?= $(HOME)/.local/bin
.PHONY: deps build install install-local check-binary clean help
.PHONY: deps build install install-local check-binary clean help test test-e2e
help:
@printf "Targets:\n"
@printf " make deps Create .venv and install build dependencies\n"
@printf " make deps Create .venv and install build+dev dependencies\n"
@printf " make build Build standalone binary at dist/flow\n"
@printf " make install Build and install to ~/.local/bin/flow\n"
@printf " make install-local Install binary to ~/.local/bin/flow\n"
@printf " make check-binary Run dist/flow --help\n"
@printf " make test Run unit tests\n"
@printf " make test-e2e Run end-to-end container tests (FLOW_RUN_E2E=1)\n"
@printf " make clean Remove build artifacts\n"
deps:
@@ -44,7 +46,7 @@ deps:
fi; \
. "$(VENV_BIN)/activate"; \
python -m pip install --upgrade pip; \
python -m pip install -e ".[build]"
python -m pip install -e ".[build,dev]"
build: deps
@set -eu; \
@@ -61,5 +63,11 @@ install: deps build install-local
check-binary:
"./$(BINARY)" --help
test:
$(VENV_PYTHON) -m pytest tests/ -q
test-e2e:
FLOW_RUN_E2E=1 $(VENV_PYTHON) -m pytest tests/e2e/ -v
clean:
rm -rf "$(BUILD_DIR)" "$(DIST_DIR)" "$(SPEC_FILE)"