Repository navigation
Introduce Stonecutter for modern Minecraft version management - #23
Merged
Merged
Conversation
Plan reviewed and approved by Momus.
Wire Stonecutter 0.9.3 into the build so that the modern Mannequin-based
codebase is managed as a versioned subproject instead of relying on
per-version git branches. This is the first step of the migration plan
in plans/stonecutter-migration-modern.md.
- Add dev.kikugie.stonecutter 0.9.3 plugin via settings.gradle.kts with
kotlinController and centralScript pointing at the existing
build.gradle.kts.
- Move Minecraft / loader / Fabric API / FLK versions from root
gradle.properties to versions/1.21.11/gradle.properties so the
shared buildscript reads them per-subproject.
- Register a chiseledBuild aggregator task in stonecutter.gradle.kts
using the Stonecutter 0.9 API (stonecutter.tasks.named("build")).
- Repoint accessWidener, source/resource/kotlin srcDirs and the
jar LICENSE copy to rootProject.file(...) so the shared buildscript
resolves sources from the repository root rather than the
versions/<mc>/ subproject directory.
- Apply DuplicatesStrategy.INCLUDE to all AbstractCopyTask instances to
avoid the duplicate fabpose.accesswidener entries that Loom emits
when the access widener also lives under the shared resources dir.
- Add 'verification' group + description to the cleanupXvfb task so it
surfaces in 'gradle tasks' and is easy to discover in QA runs.
- Ignore temp/ (used for baseline jar diffing during the migration).
:1.21.11:build produces a jar whose file listing, fabric.mod.json,
fabpose.mixins.json and fabpose.accesswidener are byte-identical to the
pre-migration baseline (modulo the version field expansion).
- build.yml: matrix split into version x task; gradle target uses
:${version}:${task}; artifact path moved to versions/${version}/build/libs/;
dead java==17 condition removed.
- publish.yml: build the per-version subproject (:${mc}:build) and
upload jars from versions/${mc}/build/libs/.
- CLAUDE.md (AGENTS.md): document Stonecutter layout, per-version
Gradle targets, chiseledBuild, and how to add a new MC version.
- build.gradle.kts: align clienttest report-file with servertest by using `.get()` on layout.buildDirectory; refresh stale comment. - CLAUDE.md: clarify config format (Gson JSON, not JSON5) and document optional `stonecutter active` pointer update for new MC versions. - plans/stonecutter-migration-modern.md: sync B-5 / C-3 / E-1 / E-2 snippets with the actually shipped Stonecutter 0.9.x API and the CI matrix layout. Mark the legacy companion plan as not-yet-created.
- publish.yml: narrow tag trigger to 'v*+*' and add an upfront step that validates the tag matches v<modver>+<mcver> and that the referenced versions/<mc>/gradle.properties exists, so malformed tags fail fast with a clear message instead of confusing Gradle errors. - build.yml: export ALSOFT_DRIVERS=null and SDL_AUDIODRIVER=dummy for the matrix build step so runClienttest no longer risks OpenAL/SDL audio initialization crashes on headless CI runners.
- publish.yml: strict tag validate regex (path-safe MOD_VERSION), unique \$mod+\$mc version for mc-publish, concurrency guard. - build.yml: split client/non-client steps so ALSOFT_DRIVERS / SDL_AUDIODRIVER only apply to runClienttest. - plans: mark Phase A-F + executable DoD items shipped, add status banner and reference section (commits 5228654..9ffe3f8), clarify AW handling (rootProject.file in 1.21.11-only setup). - CLAUDE.md: document v<modver>+<mcver> tag convention and the validated publish artifact path.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
mainbranch (1.21.11+) from single-version Loom config to Stonecutter 0.9.3 (kotlinController,centralScript) so future minor MC versions can live side-by-side asversions/<mc>/.version × task(currently['1.21.11'] × ['build', 'runServertest', 'runClienttest']); release workflow validatesv<modver>+<mcver>tags strictly and uploadsversions/<mcver>/build/libs/fabpose-<modver>+<mcver>.jar.plans/stonecutter-migration-legacy.mdwill follow.Highlights
settings.gradle.kts: adds Stonecutter plugin +create(rootProject) { versions("1.21.11") }.stonecutter.gradle.kts: registerschiseledBuildagainststonecutter.tasks.named("build")(0.9.x API).build.gradle.kts: AW path →rootProject.file(...), sourceSets / Kotlin srcDirs anchored torootProject.file(...),cleanupXvfbgetsgroup = "verification".versions/1.21.11/gradle.propertiescarries MC-specific properties; rootgradle.propertieskeeps onlymaven_group/archives_base_name..github/workflows/build.yml: matrix split forrunClienttest(only that step getsALSOFT_DRIVERS=null/SDL_AUDIODRIVER=dummy)..github/workflows/publish.yml: strict tag regex (path-safeMOD_VERSION),mc-publishversion =${mod}+${mc}, concurrency guard.CLAUDE.md/AGENTS.md: document the new layout,:<mc>:task prefix,chiseledBuild, "Adding a new MC version" steps, andv<modver>+<mcver>tag convention.Verification
./gradlew chiseledBuild✅ (commit 29b52c0)../gradlew :1.21.11:build/lintKotlin/publishToMavenLocal✅../gradlew :1.21.11:runServertest→ 12/12 game tests pass../gradlew :1.21.11:runClienttest→ ローカルは PulseAudio 欠如により exit 134 (環境依存)。CI 側はALSOFT_DRIVERS=null/SDL_AUDIODRIVER=dummyで動作確認予定。temp/baseline-fabpose.jar) と比較し、エントリ一覧 /fabric.mod.json/fabpose.mixins.json/fabpose.accesswidenerが一致 (version 以外差分 0)。momus計画レビュー OK、oracle2 サイクル review (build / CI / docs) 完了、IMPORTANT/CRITICAL は本 PR で適用済み。Plan & Reference
plans/stonecutter-migration-modern.md(status banner + checkbox を実装後ステートに更新済み)。5228654→29b52c0→2751056→471eeb3→9ffe3f8→d3d52e7。