The Jenesis Module Index: the crawler that reads the module name every artifact on Maven Central declares,
the data it produces under data/, and the small HTTP service (worker/) that resolves a module name to the
artifact behind it at repo.jenesis.build. README.md covers the layout, the crawl, the workflows and
releasing. The user documentation is jenesis.build/modules
(jenesis/jenesis-documentation).
- JDK 25 or newer. The build tool is the
.jenesis/upstreamgit submodule (build/jenesislinks into it):git submodule update --init --depth 1once, thenjava build/jenesis/Project.javabuilds and runs the tests. The crawler programs themselves run from source (java sources/build/jenesis/crawler/Crawl.java …). - The worker is tested with Node's built-in runner:
node --testfromworker/. It has no dependencies. - CI builds under strict pinning; after changing a dependency, run
java build/jenesis/Project.java pinand commit the rewritten pins.
- Java 25 with
import module java.base;; records for the domain model (model/), smallmainprograms for each tool (Crawl,Regenerate,SetOwners, …) that read their settings fromjenesis.crawler.*system properties, whosePROP_*constants at the top ofCrawlare the reference. A new setting is a new constant, a default inCrawler.Configuration, and a line inCrawl's usage text - keep the usage text's defaults equal to the real ones. data/is written by the crawler and committed by the scheduled workflows. Never edit it by hand; change the program that produces it and rerun. The bot's commits land onmaincontinuously, so rebase before you push. Release file counts and sizes are the one exception to the catalogue:TopModulesreads them from the repository's directory listings while renderingBLEEDING.md, per groupId and for the report's window alone, and stores none of them - the module catalogue has no use for them.- The resolved views (
artifacts.tsv,modules.tsv) are derived from the audit log (versions.tsv) and the ownership files (owners.tsv) byRegenerate; a change to how ownership or filtering is decided is rolled out by regenerating, never by rewriting history. - The URL shapes the worker serves are the public contract (documented on jenesis.build); a change to them is a change to every client, including the Jenesis build tool, and is made deliberately with the documentation updated in the same pass.
tests/is the@jenesis.testmodule, on JUnit Jupiter with AssertJ; a test method name states the behaviour it proves. The crawler is driven against local fixtures, never against Maven Central.worker/index.test.jscovers every route shape and status the service answers; a new route or header gets a case there.
A release is a manual run of the release workflow from the Actions tab, so any commit is releasable: its
optional sha input names the commit (default: the head it runs on) and its optional tag input names the tag
(vX.Y.Z; default: the next minor of the latest tag). It stages under strict pinning and publishes through
JReleaser. The build tool pin is moved by checking out the new
commit in .jenesis/upstream, building, and committing the submodule pointer.