Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c31d1ce
Port Terrain Smoother to Minecraft 1.14.4
SkyBlade1978 Nov 1, 2026
c95e369
Use the updated grass and building pieces candidates
SkyBlade1978 Nov 1, 2026
a903fa0
Refresh the qualified local dependency source pins
SkyBlade1978 Nov 1, 2026
55e74ad
Port Terrain Smoother to Minecraft 1.15.2
SkyBlade1978 Nov 1, 2026
b19259b
Keep upgrade fixture checksums stable across checkouts
SkyBlade1978 Nov 1, 2026
199f4a3
Port Terrain Smoother to Minecraft 1.16.5
SkyBlade1978 Nov 1, 2026
9f74946
Port terrain smoothing to Minecraft 1.17.1
SkyBlade1978 Nov 2, 2026
28fbe90
Port terrain smoothing to Minecraft 1.18.2
SkyBlade1978 Nov 2, 2026
3a04288
Register sand recovery after catalogue construction
SkyBlade1978 Nov 3, 2026
8cfcec9
Use the updated local content builds
SkyBlade1978 Nov 3, 2026
790bf21
Port Terrain Smoother to Minecraft 1.19.4
SkyBlade1978 Nov 4, 2026
49f5ca3
Check Forge 45 registry notices against saved fixtures
SkyBlade1978 Nov 4, 2026
fb16f3e
Port Terrain Smoother to Forge 1.20.1
SkyBlade1978 Nov 4, 2026
534263c
Port Terrain Smoother to NeoForge 1.20.1
SkyBlade1978 Nov 4, 2026
2383021
Port Terrain Smoother to NeoForge 1.20.6
SkyBlade1978 Nov 5, 2026
bd5d67c
Port Terrain Smoother to NeoForge 1.21.1
SkyBlade1978 Nov 5, 2026
8ddfd9b
Pin the NeoForge soil support builds
SkyBlade1978 Nov 5, 2026
bc2c06b
Use flattened Building Pieces on NeoForge 1.21.1
SkyBlade1978 Nov 7, 2026
ea58615
Pin the verified Building Pieces source
SkyBlade1978 Nov 7, 2026
1e70c8a
Pin Building Pieces with the config screen
SkyBlade1978 Nov 7, 2026
ac5f5ad
Prepare the NeoForge 1.21.1 release
SkyBlade1978 Nov 7, 2026
3d55b1b
Audit the NeoForge Eclipse launches and release artifacts in CI
SkyBlade1978 Nov 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,10 @@
*.jar binary
*.png binary
*.zip binary

# Keep the native generated defaults byte-for-byte for log-control checks.
src/bootstrapTest/defaultconfigs/config/forge-client.toml whitespace=-blank-at-eof
src/bootstrapTest/defaultconfigs/defaultconfigs/forge-server.toml whitespace=-blank-at-eof

# Keep the checksum-verified Mavenizer fixture byte-for-byte.
ci-fixtures/tools/** -text
161 changes: 135 additions & 26 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,52 +1,141 @@
name: Sky's Terrain Smoother 1.12 CI
name: Sky's Terrain Smoother CI

on:
push:
branches:
- master-1.12.2
- 'master-*'
- 'feature/**'
pull_request:
branches:
- master-1.12.2
- 'master-*'

permissions:
contents: read

concurrency:
group: skysterrainsmoother-1.12-${{ github.workflow }}-${{ github.ref }}
group: skysterrainsmoother-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build, test, and audit
cold-neoforge-bootstrap:
name: Cold NeoForge bootstrap
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install Java 8 toolchain
- name: Install pinned Java 21 Gradle runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'
java-version: '21.0.7+6.0.LTS'

- name: Read pinned dependency sources
id: content
run: |
set -euo pipefail
grass="$(sed -n 's/^grass.commit=//p' gradle/content-dependencies.properties)"
[[ "$grass" =~ ^[0-9a-f]{40}$ ]]
echo "grass=$grass" >> "$GITHUB_OUTPUT"
pieces="$(sed -n 's/^pieces.commit=//p' gradle/content-dependencies.properties)"
[[ "$pieces" =~ ^[0-9a-f]{40}$ ]]
echo "pieces=$pieces" >> "$GITHUB_OUTPUT"
- name: Check out SkysGrassSlabs
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: SkyBlade1978/SkysGrassSlabs
ref: ${{ steps.content.outputs.grass }}
path: dependencies/grass
- name: Check out SkysBuildingPieces
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: SkyBlade1978/SkysBuildingPieces
ref: ${{ steps.content.outputs.pieces }}
path: dependencies/pieces
- name: Build development dependencies
run: |
set -euo pipefail
chmod +x dependencies/*/gradlew
(cd dependencies/grass && ./gradlew assemble --no-daemon --stacktrace)
grass="$(sed -n 's/^grass.version=//p' gradle/content-dependencies.properties)"
dependency="$GITHUB_WORKSPACE/dependencies/grass"
(cd dependencies/pieces && ./gradlew assemble --no-daemon --stacktrace \
"-PgrassSlabsMainJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar" \
"-PgrassSlabsDeobfJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar")


- name: Bootstrap NeoForge from an empty cache
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/skysterrainsmoother-cold-gradle
run: |
set -euo pipefail
test ! -e .gradle
test ! -e "$GRADLE_USER_HOME"
mkdir -p "$GRADLE_USER_HOME"
chmod +x ./gradlew
gradle_args=(
classes test assemble verifyReleaseArtifacts writeReleaseChecksums -PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces
--no-daemon --no-build-cache --stacktrace --max-workers=2
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
./gradlew "${gradle_args[@]}"
cp build/release/SHA256SUMS "$RUNNER_TEMP/terrain-cold-SHA256SUMS"

- name: Verify same-cache bootstrap offline
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/skysterrainsmoother-cold-gradle
run: |
set -euo pipefail
gradle_args=(
classes test assemble verifyReleaseArtifacts writeReleaseChecksums -PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces
--rerun-tasks --offline --no-daemon --no-build-cache --stacktrace --max-workers=2
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
./gradlew clean --offline --no-daemon --no-build-cache
./gradlew "${gradle_args[@]}"
cmp build/release/SHA256SUMS "$RUNNER_TEMP/terrain-cold-SHA256SUMS"

build:
name: Build, test, and audit
runs-on: ubuntu-latest
timeout-minutes: 60

- name: Pin production Java
steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Read target build metadata
id: target
shell: bash
run: |
echo "SGS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "SBP_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "STS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
set -euo pipefail
value() { sed -n "s/^$1=//p" gradle.properties; }
toolchain="$(value java_toolchain_version)"
selector="$(value java_setup_version)"
echo "java_setup_version=${selector:-$toolchain}" >> "$GITHUB_OUTPUT"
echo "java_version=$(value java_version)" >> "$GITHUB_OUTPUT"
echo "minecraft_version=$(value minecraft_version)" >> "$GITHUB_OUTPUT"
echo "gradle_java_version=$(value gradle_java_toolchain_version)" >> "$GITHUB_OUTPUT"
echo "artifact_prefix=SkysTerrainSmoother-$(value mod_version)" >> "$GITHUB_OUTPUT"

- name: Install Java 17 for Gradle
- name: Install target Java toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: '17'
distribution: temurin
java-version: ${{ steps.target.outputs.java_setup_version }}

- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6


- name: Read pinned dependency sources
id: content
run: |
Expand All @@ -73,40 +162,60 @@ jobs:
run: |
set -euo pipefail
chmod +x dependencies/*/gradlew
(cd dependencies/grass && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/grass && ./gradlew assemble --no-daemon --stacktrace)
grass="$(sed -n 's/^grass.version=//p' gradle/content-dependencies.properties)"
dependency="$GITHUB_WORKSPACE/dependencies/grass"
(cd dependencies/pieces && ./gradlew assemble --no-daemon --stacktrace \
"-PgrassSlabsMainJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar" \
"-PgrassSlabsDeobfJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar")


- name: Make the wrapper executable
run: chmod +x ./gradlew

- name: Build, test, and audit release artifacts
run: >-
./gradlew clean check integrationTest build javadoc verifyReleaseArtifacts writeReleaseChecksums
verifyEclipseProductionClasspath -PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces --no-daemon --stacktrace
./gradlew clean check build javadoc preparePackagedIntegrationProbe verifyReleaseArtifacts writeReleaseChecksums
verifyEclipseProductionClasspath -Declipse.application=org.eclipse.ui.ide.workbench -PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces --no-daemon --stacktrace

- name: Replay artifact checks offline
run: >-
./gradlew assemble verifyReleaseArtifacts writeReleaseChecksums
-PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces --offline --no-daemon --stacktrace
./gradlew assemble verifyReleaseArtifacts writeReleaseChecksums -PgrassSlabsDirectory=dependencies/grass -PbuildingPiecesDirectory=dependencies/pieces --offline --no-daemon --stacktrace

- name: Check fresh generation and reload in NeoGradle
shell: bash
run: |
set -euo pipefail
version() { sed -n "s/^$1.version=//p" gradle/content-dependencies.properties; }
common=(
--mode server --directory build/ci-generation-run
--probe build/integration-test-mod/skysterrainsmoother-integration-test.jar
--extra-mod "dependencies/grass/build/libs/SkysGrassSlabs-$(version grass).jar"
--extra-mod "dependencies/pieces/build/libs/SkysBuildingPieces-$(version pieces).jar"
--gradle-argument=-PgrassSlabsDirectory=dependencies/grass
--gradle-argument=-PbuildingPiecesDirectory=dependencies/pieces
)
python3 tools/run_development_checks.py "${common[@]}" --phase fresh --fresh
python3 tools/run_development_checks.py "${common[@]}" --phase reload

- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SkysTerrainSmoother-1.12.2-${{ github.sha }}
name: SkysTerrainSmoother-${{ steps.target.outputs.minecraft_version }}-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/SkysTerrainSmoother-0.1.0.112021.jar
build/libs/SkysTerrainSmoother-0.1.0.112021-sources.jar
build/libs/SkysTerrainSmoother-0.1.0.112021-javadoc.jar
build/libs/${{ steps.target.outputs.artifact_prefix }}.jar
build/libs/${{ steps.target.outputs.artifact_prefix }}-sources.jar
build/libs/${{ steps.target.outputs.artifact_prefix }}-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.md

- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SkysTerrainSmoother-1.12.2-diagnostics-${{ github.sha }}
name: SkysTerrainSmoother-${{ steps.target.outputs.minecraft_version }}-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
42 changes: 25 additions & 17 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: CodeQL
on:
push:
branches:
- master-1.12.2
- 'master-*'
- 'feature/**'
pull_request:
branches:
- master-1.12.2
- 'master-*'
schedule:
- cron: '47 7 * * 4'

Expand All @@ -26,27 +26,30 @@ jobs:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install Java 8 toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

- name: Pin production Java
- name: Read target build metadata
id: target
shell: bash
run: |
echo "SGS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "SBP_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "STS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
set -euo pipefail
value() { sed -n "s/^$1=//p" gradle.properties; }
toolchain="$(value java_toolchain_version)"
selector="$(value java_setup_version)"
echo "java_setup_version=${selector:-$toolchain}" >> "$GITHUB_OUTPUT"
echo "java_version=$(value java_version)" >> "$GITHUB_OUTPUT"
echo "minecraft_version=$(value minecraft_version)" >> "$GITHUB_OUTPUT"
echo "gradle_java_version=$(value gradle_java_toolchain_version)" >> "$GITHUB_OUTPUT"
echo "artifact_prefix=SkysTerrainSmoother-$(value mod_version)" >> "$GITHUB_OUTPUT"

- name: Install Java 17 for Gradle
- name: Install target Java toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: '17'
distribution: temurin
java-version: ${{ steps.target.outputs.java_setup_version }}

- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6


- name: Read pinned dependency sources
id: content
run: |
Expand All @@ -73,8 +76,13 @@ jobs:
run: |
set -euo pipefail
chmod +x dependencies/*/gradlew
(cd dependencies/grass && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/grass && ./gradlew assemble --no-daemon --stacktrace)
grass="$(sed -n 's/^grass.version=//p' gradle/content-dependencies.properties)"
dependency="$GITHUB_WORKSPACE/dependencies/grass"
(cd dependencies/pieces && ./gradlew assemble --no-daemon --stacktrace \
"-PgrassSlabsMainJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar" \
"-PgrassSlabsDeobfJar=$dependency/build/libs/SkysGrassSlabs-$grass.jar")


- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/deploy-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,8 @@ jobs:
run: |
set -euo pipefail
chmod +x dependencies/*/gradlew
(cd dependencies/grass && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/grass && ./gradlew assemble --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew assemble --no-daemon --stacktrace)

- name: Build, test, and audit once
env:
Expand Down Expand Up @@ -519,8 +519,8 @@ jobs:
run: |
set -euo pipefail
chmod +x dependencies/*/gradlew
(cd dependencies/grass && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew jar --no-daemon --stacktrace)
(cd dependencies/grass && ./gradlew assemble --no-daemon --stacktrace)
(cd dependencies/pieces && ./gradlew assemble --no-daemon --stacktrace)

- name: Download immutable release artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/release-on-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ jobs:
set -euo pipefail
version="$(sed -n 's/^mod_version=//p' gradle.properties)"
test "$GITHUB_REF_NAME" = "$version"
[[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.112021$ ]]
minecraft="$(sed -n 's/^minecraft_version=//p' gradle.properties)"
loader="$(sed -n 's/^loader_code=//p' gradle.properties)"
IFS=. read -r major minor patch <<<"$minecraft"
printf -v suffix '%s%02d%02d%s' "$major" "$((10#$minor))" "$((10#${patch:-0}))" "$loader"
[[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.${suffix}$ ]]
checks="$(gh api "repos/$GITHUB_REPOSITORY/commits/$GITHUB_SHA/check-runs?per_page=100" --jq '[.check_runs[] | select(.name == "Build, test, and audit" and .conclusion == "success")] | length')"
test "$checks" -gt 0
echo "verifyReleaseArtifacts passed in CI. This tag check publishes nothing."
4 changes: 2 additions & 2 deletions .github/workflows/validate-gradle-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: Validate Gradle Wrapper
on:
push:
branches:
- master-1.12.2
- 'master-*'
- 'feature/**'
pull_request:
branches:
- master-1.12.2
- 'master-*'

permissions:
contents: read
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,7 @@ agent_notes/
# Files from Forge MDK
forge*changelog.txt
/README.txt

# Python caches can contain local source paths.
__pycache__/
*.py[cod]
Loading
Loading