Storage Benchmark Kit
SBK distributes human and agent documentation with executable and library release channels so that operational and development context remains available outside a Git checkout.
./gradlew installDist, distZip, and distTar use the root applicationDistribution configuration.
The distribution root contains:
README.mdAGENTS.mdINSTRUCTIONS.mdCurrent tool-specific entries include the Cursor project rule and legacy
pointer, the Aider configuration, and the portable skills under
.devin/skills/. Windsurf and Codex consume the root AGENTS.md directly and
do not need duplicate repository rules.
The docs/ directory contains the engineering index, architecture, repository map, driver guide, maintenance guide, recipes, specification template, toolkit, distribution guide, and detailed internals.
Verify locally:
./gradlew installDist
find build/install/sbk -maxdepth 2 -type f | sort
The definitive inclusion list is the applicationDistribution block in the root build.gradle.
Modules applying gradle/maven.gradle register a docsJar artifact with the docs classifier. It contains the root entry points, selected engineering documents, agent skills, and supported agent configuration files. Inside the JAR, docs/README.md is the documentation index and docs/PROJECT_README.md is the root product README.
Build and inspect without publishing:
./gradlew docsJar
find . -path '*/build/libs/*-docs.jar' -type f -print
jar tf <path-to-docs-jar>
Artifact names use the version from gradle.properties; documentation must not hard-code a release number.
The guarded release workflow:
sbk-agent-docs.tar.gz from root entry points, the complete docs/
directory, and agent configurations while preserving discovery paths such
as .cursor/rules/ and .devin/skills/.build/reports/release-qualification/ and must be
retained separately for the exact released commit.See Release publication for the safe local and Actions dry runs. Editing this document or running a dry run does not publish anything.
gradle/maven.gradle adds docsJar to each applicable Maven publication. The
release dry run exercises these publications against project-local repositories.
The guarded workflow uses the internal
releasePublishCoreToGitHubPackages task for GitHub Packages. Independent
maintainer-run Maven Central publication stages the explicit core allow-list
with releaseStageCorePublications and deploys it with JReleaser. The GitHub
workflow never configures or invokes JReleaser. Driver projects are excluded
from standalone publication. The root publish task first publishes the
multi-architecture Docker Hub image with local
DOCKER_USERNAME/DOCKER_PASSWORD credentials and then dispatches the
guarded GitHub-owned publication workflow with only its public immutable
digest. Docker Hub credentials are not sent to GitHub.
JReleaser configuration is centralized in
gradle/release-publication.gradle, which explicitly registers every core
module staging repository. gradle/maven.gradle only stages unsigned module
artifacts; Maven Central signing is owned exclusively by JReleaser.
When adding an authoritative document:
applicationDistribution when executable users need it.docsJar when library consumers need it.docs/ directory.Source locations:
build.gradlegradle/maven.gradlegradle/release-publication.gradle and
.github/workflows/release.yml