blogex: CRAP scores as a Lens sensor (ex_crap)
Same wiring as app: `crap` reads the export from `test.coverage`, runs in MIX_ENV=test, and refuses to score when the export is absent. Baseline at the default threshold (30): 12 files, 59 functions, worst score 6.00. Nothing to fix; blogex's CRAP ceiling is its coverage ceiling, which the behavior-test yaks already own.
This commit is contained in:
+17
-2
@@ -3,7 +3,7 @@
|
|||||||
MISE_BIN ?= mise
|
MISE_BIN ?= mise
|
||||||
MISE_EXEC = $(MISE_BIN) exec --
|
MISE_EXEC = $(MISE_BIN) exec --
|
||||||
|
|
||||||
.PHONY: check precommit deps compile test test.coverage coverage format verify
|
.PHONY: check precommit deps compile test test.coverage coverage crap format verify
|
||||||
|
|
||||||
# Cheap static gate for this library (no database, no coverage). Runs from the
|
# Cheap static gate for this library (no database, no coverage). Runs from the
|
||||||
# root `make check`, which loops app then blogex.
|
# root `make check`, which loops app then blogex.
|
||||||
@@ -44,6 +44,20 @@ coverage:
|
|||||||
@test -f cover/default.coverdata || { echo "coverage: no exported coverage - run 'make test.coverage' first" >&2; exit 1; }
|
@test -f cover/default.coverdata || { echo "coverage: no exported coverage - run 'make test.coverage' first" >&2; exit 1; }
|
||||||
$(MISE_EXEC) mix test.coverage
|
$(MISE_EXEC) mix test.coverage
|
||||||
|
|
||||||
|
# Enforce CRAP scores (complexity x coverage) from the same export. No test run.
|
||||||
|
# Runs in MIX_ENV=test because that is the environment the export came from:
|
||||||
|
# running in dev would compile a second build and score against a different set
|
||||||
|
# of modules. The guard is load-bearing for the same reason as `coverage`:
|
||||||
|
# ex_crap falls back to 0% coverage when the export is missing, which would
|
||||||
|
# report scores that are pessimistic instead of absent - a false failure is
|
||||||
|
# less bad than a false pass, but neither is acceptable in the Lens pass.
|
||||||
|
#
|
||||||
|
# Threshold is ex_crap's default (30); whether to ratchet it down is an open
|
||||||
|
# decision tracked in the "ratchets, deferred decisions, handoff practice" yak.
|
||||||
|
crap:
|
||||||
|
@test -f cover/default.coverdata || { echo "crap: no exported coverage - run 'make test.coverage' first" >&2; exit 1; }
|
||||||
|
MIX_ENV=test $(MISE_EXEC) mix crap
|
||||||
|
|
||||||
# Format code
|
# Format code
|
||||||
format:
|
format:
|
||||||
$(MISE_EXEC) mix format
|
$(MISE_EXEC) mix format
|
||||||
@@ -58,6 +72,7 @@ format:
|
|||||||
# - coverage (yak: coverage floors + framework-glue exclusions policy)
|
# - coverage (yak: coverage floors + framework-glue exclusions policy)
|
||||||
# WIRED below (test.coverage + coverage).
|
# WIRED below (test.coverage + coverage).
|
||||||
# - crap (yak: CRAP scores with ex_crap (both apps))
|
# - crap (yak: CRAP scores with ex_crap (both apps))
|
||||||
|
# WIRED below (crap); reuses the coverage export.
|
||||||
# - mutation (yak: mutation testing with muex — a sensor, not a gate)
|
# - mutation (yak: mutation testing with muex — a sensor, not a gate)
|
||||||
#
|
#
|
||||||
# The suite runs FIRST: it is what produces the coverage export that the
|
# The suite runs FIRST: it is what produces the coverage export that the
|
||||||
@@ -65,7 +80,7 @@ format:
|
|||||||
# `mix test --cover --export-coverage` exports instead of printing a summary,
|
# `mix test --cover --export-coverage` exports instead of printing a summary,
|
||||||
# and reporting through `mix test.coverage` keeps it to one suite run.) Sensors
|
# and reporting through `mix test.coverage` keeps it to one suite run.) Sensors
|
||||||
# still run cheapest-first among themselves.
|
# still run cheapest-first among themselves.
|
||||||
VERIFY_SENSORS := coverage
|
VERIFY_SENSORS := coverage crap
|
||||||
|
|
||||||
verify:
|
verify:
|
||||||
@echo "==> verify(blogex): suite (coverage exported), then sensors [$(VERIFY_SENSORS)]"
|
@echo "==> verify(blogex): suite (coverage exported), then sensors [$(VERIFY_SENSORS)]"
|
||||||
|
|||||||
+2
-1
@@ -46,7 +46,8 @@ defmodule Blogex.MixProject do
|
|||||||
{:jason, "~> 1.4"},
|
{:jason, "~> 1.4"},
|
||||||
{:plug, "~> 1.15"},
|
{:plug, "~> 1.15"},
|
||||||
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
|
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
|
||||||
{:rustler, "~> 0.38.0", optional: true}
|
{:rustler, "~> 0.38.0", optional: true},
|
||||||
|
{:ex_crap, "~> 0.1.1", only: [:dev, :test], runtime: false}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
%{
|
%{
|
||||||
|
"boundary": {:hex, :boundary, "0.11.0", "56cff565b5565930765e02782281b022935fe8c2e1504543c8c1b44b85893b40", [:mix], [], "hexpm", "b9297a96ea14c0e63dbd77b8135e0d483f9c6f34ed1c9dee4b3fea82c596f55a"},
|
||||||
"earmark": {:hex, :earmark, "1.4.48", "5f41e579d85ef812351211842b6e005f6e0cef111216dea7d4b9d58af4608434", [:mix], [], "hexpm", "a461a0ddfdc5432381c876af1c86c411fd78a25790c75023c7a4c035fdc858f9"},
|
"earmark": {:hex, :earmark, "1.4.48", "5f41e579d85ef812351211842b6e005f6e0cef111216dea7d4b9d58af4608434", [:mix], [], "hexpm", "a461a0ddfdc5432381c876af1c86c411fd78a25790c75023c7a4c035fdc858f9"},
|
||||||
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
|
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
|
||||||
|
"ex_crap": {:hex, :ex_crap, "0.1.1", "c1770e7ce1843f304a27f5d32bfa867a340140e337684ee1929c770b2499f884", [:mix], [{:boundary, "~> 0.10", [hex: :boundary, repo: "hexpm", optional: false]}], "hexpm", "ada5d59bce442c1a8a987cb5328cbf4469fb56eb8d04641886f2199569a75b12"},
|
||||||
"ex_doc": {:hex, :ex_doc, "0.40.1", "67542e4b6dde74811cfd580e2c0149b78010fd13001fda7cfeb2b2c2ffb1344d", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "bcef0e2d360d93ac19f01a85d58f91752d930c0a30e2681145feea6bd3516e00"},
|
"ex_doc": {:hex, :ex_doc, "0.40.1", "67542e4b6dde74811cfd580e2c0149b78010fd13001fda7cfeb2b2c2ffb1344d", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "bcef0e2d360d93ac19f01a85d58f91752d930c0a30e2681145feea6bd3516e00"},
|
||||||
"jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"},
|
"jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"},
|
||||||
"makeup": {:hex, :makeup, "1.2.2", "882d46dc0905e9ff7abf2aab61a7e6b3dcc555533977d8a23b06019e6c89ac94", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "9a1a24e5b343b8ae16abea0822c10a6f75da27af7fa802ada5251f7579bfccfa"},
|
"makeup": {:hex, :makeup, "1.2.2", "882d46dc0905e9ff7abf2aab61a7e6b3dcc555533977d8a23b06019e6c89ac94", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "9a1a24e5b343b8ae16abea0822c10a6f75da27af7fa802ada5251f7579bfccfa"},
|
||||||
|
|||||||
Reference in New Issue
Block a user