Skip to content

Port baseSteam to Minecraft 1.20.1 #49

Port baseSteam to Minecraft 1.20.1

Port baseSteam to Minecraft 1.20.1 #49

Workflow file for this run

name: baseSteam 1.20 CI
on:
push:
branches: [master-1.20.1, feature/basesteam-1.20.1-port, feature/prepare-basesteam-1.20.1]
pull_request:
branches: [master-1.20.1]
permissions:
contents: read
concurrency:
group: basesteam-1.20-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build, test, and audit
runs-on: ubuntu-latest
timeout-minutes: 105
steps:
- name: Check out baseSteam
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Verify merged dependency pins and public basePower bytes
id: public-pins
env:
GH_TOKEN: ${{ github.token }}
run: bash .github/verify-published-pins.sh
- name: Validate coordinated dependency pins
shell: bash
run: |
set -euo pipefail
power_ref=$(sed -n 's/^poweradvantage_source_ref=//p' gradle.properties | tr -d '\r')
power_hash=$(sed -n 's/^poweradvantage_deobf_sha256=//p' gradle.properties | tr -d '\r')
if [[ ! "$power_ref" =~ ^[a-f0-9]{40}$ || ! "$power_hash" =~ ^[A-F0-9]{64}$ ]]; then
echo "::error::The exact basePower 1.20.1 dependency pin is pending."
exit 1
fi
bm_ref=$(sed -n 's/^basemetals_source_commit=//p' gradle.properties | tr -d '\r')
bm_hash=$(sed -n 's/^basemetals_deobf_sha256=//p' gradle.properties | tr -d '\r')
if [[ ! "$bm_ref" =~ ^[a-f0-9]{40}$ || ! "$bm_hash" =~ ^[A-F0-9]{64}$ ]]; then
echo "::error::The exact Base Metals 1.20.1 dependency pin is pending."
exit 1
fi
os_ref=$(sed -n 's/^orespawn_source_commit=//p' gradle.properties | tr -d '\r')
os_hash=$(sed -n 's/^orespawn_deobf_sha256=//p' gradle.properties | tr -d '\r')
if [[ ! "$os_ref" =~ ^[a-f0-9]{40}$ || ! "$os_hash" =~ ^[A-F0-9]{64}$ ]]; then
echo "::error::The exact OreSpawn 1.20.1 dependency pin is pending."
exit 1
fi
echo "ORESPAWN_SOURCE_REF=$os_ref" >> "$GITHUB_ENV"
echo "POWERADVANTAGE_SOURCE_REF=$power_ref" >> "$GITHUB_ENV"
echo "BASEMETALS_SOURCE_REF=$bm_ref" >> "$GITHUB_ENV"
- name: Check out pinned OreSpawn
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: ${{ env.ORESPAWN_SOURCE_REF }}
path: .ci-dependencies/OreSpawn
- name: Use canonical LF dependency inputs
# Use the same source bytes on hosted and local dependency builds.
run: git config --global core.autocrlf false
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: ${{ env.BASEMETALS_SOURCE_REF }}
path: .ci-dependencies/BaseMetals
- name: Check out basePower 1.20.1
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/basePower
ref: ${{ env.POWERADVANTAGE_SOURCE_REF }}
path: .ci-dependencies/basePower
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- name: Install Java 8 for legacy build utilities
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'
- name: Install Java 17 for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'
- name: Use pinned build toolchains
# These are Gradle project properties, not JVM system properties.
shell: bash
run: >-
echo "MMD_GRADLE_TOOLCHAINS=-Porg.gradle.java.installations.paths=$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64
-Porg.gradle.java.installations.auto-detect=false
-Porg.gradle.java.installations.auto-download=false" >> "$GITHUB_ENV"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
- name: Build 1.20.1 dependency chain
id: dependencies
shell: bash
run: |
set -euo pipefail
orespawn="$GITHUB_WORKSPACE/.ci-dependencies/OreSpawn"
basemetals="$GITHUB_WORKSPACE/.ci-dependencies/BaseMetals"
power="$GITHUB_WORKSPACE/.ci-dependencies/basePower"
test "$(git -C "$orespawn" rev-parse HEAD)" = "$ORESPAWN_SOURCE_REF"
test "$(git -C "$power" rev-parse HEAD)" = "$POWERADVANTAGE_SOURCE_REF"
test "$(git -C "$basemetals" rev-parse HEAD)" = "$BASEMETALS_SOURCE_REF"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
printf '%s %s\n' '416DCA4797BC55826F0DDCF03FDC405F1990FC15C2133FA27A1F143BF7976177' "$mavenizer" | sha256sum -c -
(cd "$orespawn" && ./gradlew $MMD_GRADLE_TOOLCHAINS assemble --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew $MMD_GRADLE_TOOLCHAINS assemble --no-daemon --stacktrace)
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.0.120011-deobf.jar"
bm_version=$(sed -n 's/^basemetals_version=//p' "$GITHUB_WORKSPACE/gradle.properties" | tr -d '\r')
bmjar="$basemetals/build/libs-dev/BaseMetals-$bm_version-deobf.jar"
(cd "$power" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar unitBootstrapJar verifyReleaseDependencies \
"-Pforge47MavenizerJar=$mavenizer" \
-PbaseMetalsDeobfJar="$bmjar" -PoreSpawnDeobfJar="$osjar" \
--no-daemon --stacktrace)
powerjar="$power/build/libs-dev/basePower-2.4.12.120011-deobf.jar"
bootstrap="$power/build/unit-bootstrap/forge-native-unit-bootstrap.jar"
test -f "$osjar" && test -f "$bmjar" && test -f "$powerjar" && test -f "$bootstrap"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
echo "orespawn_player=$orespawn/build/libs/OreSpawn-4.1.0.120011.jar" >> "$GITHUB_OUTPUT"
echo "basemetals_player=$basemetals/build/libs/BaseMetals-$bm_version.jar" >> "$GITHUB_OUTPUT"
echo "power=$powerjar" >> "$GITHUB_OUTPUT"
echo "bootstrap=$bootstrap" >> "$GITHUB_OUTPUT"
echo "mavenizer=$mavenizer" >> "$GITHUB_OUTPUT"
- name: Verify source layout and recipe unlocks
run: |
node tools/verify-native-port.js
node tools/generate-recipe-unlocks.js --check
- name: Build and audit release artifacts
run: >-
./gradlew $MMD_GRADLE_TOOLCHAINS clean check build javadoc verifyReleaseDependencies verifyPlayerDependencies verifyReleaseArtifacts
writeReleaseChecksums verifyEclipseProductionClasspath
"-Pforge47MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}"
"-PpowerAdvantagePlayerJar=${{ steps.public-pins.outputs.power_player }}"
"-PbaseMetalsPlayerJar=${{ steps.dependencies.outputs.basemetals_player }}"
"-PoreSpawnPlayerJar=${{ steps.dependencies.outputs.orespawn_player }}"
-PforgeCapabilityBootstrapJar=${{ steps.dependencies.outputs.bootstrap }}
-PpowerAdvantageDeobfJar=${{ steps.dependencies.outputs.power }}
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }}
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }}
--no-daemon --stacktrace
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-1.20.1-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/baseSteam-2.2.13.120011.jar
build/libs/baseSteam-2.2.13.120011-sources.jar
build/libs/baseSteam-2.2.13.120011-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-1.20.1-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
build/test-results/**
build/reports/**
build/*-run/logs/**
build/problems/**
.ci-dependencies/basePower/build/reports/**
.ci-dependencies/basePower/build/libs-dev/*.jar