Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
92 changes: 0 additions & 92 deletions .github/scripts/forge47-dependencies.sh

This file was deleted.

63 changes: 45 additions & 18 deletions .github/verify-published-pins.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,55 @@ value() { sed -n "s/^$1=//p" gradle.properties | tr -d '\r'; }
require_merged() {
local repo="$1" ref="$2" status
[[ "$ref" =~ ^[a-f0-9]{40}$ ]]
status="$(gh api "repos/MinecraftModDevelopmentMods/$repo/compare/$ref...master-1.20.1" --jq '.status')"
status="$(gh api "repos/MinecraftModDevelopmentMods/$repo/compare/$ref...master-1.20.6" --jq '.status')"
case "$status" in
identical|ahead) ;;
*) echo "::error::$repo $ref is not on upstream master-1.20.1 ($status)."; exit 1 ;;
*) echo "::error::$repo $ref is not on upstream master-1.20.6 ($status)."; exit 1 ;;
esac
}

file_id="$(value poweradvantage_public_file_id)"
expected="$(value poweradvantage_runtime_sha256)"
if [[ ! "$file_id" =~ ^[1-9][0-9]*$ || ! "$expected" =~ ^[A-F0-9]{64}$ ]]; then
echo '::error::A verified public basePower 1.20.1 file ID and player checksum are required.'
exit 1
fi
require_merged basePower "$(value poweradvantage_source_ref)"
download() {
local url="$1" expected="$2" path="$3"
[[ "$expected" =~ ^[A-F0-9]{64}$ ]]
curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' \
--retry 3 --output "$path" "$url"
printf '%s %s\n' "$expected" "$path" | sha256sum -c -
}

public_jar() {
local name="$1" project="$2" id="$3" sha="$4" jar="$5"
if [[ ! "$id" =~ ^[1-9][0-9]*$ ]]; then
echo "::error::A verified public $name file ID is required."
exit 1
fi
download "https://www.curseforge.com/api/v1/mods/$project/files/$id/download" "$sha" "$jar"
}

power_ref="$(value poweradvantage_source_ref)"
orespawn_ref="$(value orespawn_source_commit)"
require_merged basePower "$power_ref"
require_merged BaseMetals "$(value basemetals_source_commit)"
require_merged OreSpawn "$orespawn_ref"

inputs="${RUNNER_TEMP:?}/forge50-release-dependencies"
mkdir -p "$inputs"
power="$inputs/basePower-$(value poweradvantage_version).jar"
metals="$inputs/BaseMetals-$(value basemetals_version).jar"
orespawn="$inputs/OreSpawn-$(value orespawn_version).jar"
public_jar basePower 1780140 "$(value poweradvantage_public_file_id)" "$(value poweradvantage_deobf_sha256)" "$power"
public_jar BaseMetals 240967 "$(value basemetals_public_file_id)" "$(value basemetals_deobf_sha256)" "$metals"
public_jar OreSpawn 245586 "$(value orespawn_public_file_id)" "$(value orespawn_deobf_sha256)" "$orespawn"

player="${RUNNER_TEMP:?}/basePower-public-player.jar"
curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' \
--output "$player" "https://www.curseforge.com/api/v1/mods/1780140/files/$file_id/download"
read -r actual _ < <(sha256sum < "$player")
if [[ "${actual^^}" != "$expected" ]]; then
echo "::error::Public basePower file $file_id SHA-256 is ${actual^^}, expected $expected."
exit 1
fi
printf 'power_player=%s\n' "$player" >> "${GITHUB_OUTPUT:?}"
installer="$inputs/forge-1.20.6-50.2.0-installer.jar"
download 'https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.6-50.2.0/forge-1.20.6-50.2.0-installer.jar' \
"$(value forge_installer_sha256)" "$installer"
{
printf 'power_ref=%s\n' "$power_ref"
printf 'orespawn_ref=%s\n' "$orespawn_ref"
} >> "${GITHUB_OUTPUT:?}"
{
printf 'POWER_PLAYER=%s\n' "$power"
printf 'METALS_PLAYER=%s\n' "$metals"
printf 'ORESPAWN_PLAYER=%s\n' "$orespawn"
printf 'FORGE_INSTALLER=%s\n' "$installer"
} >> "${GITHUB_ENV:?}"
94 changes: 39 additions & 55 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,124 +1,108 @@
name: baseElectric 1.20.1 CI
name: baseElectric 1.20.6 CI

on:
push:
branches: [master-1.20.1, 'feature/**']
branches: [master-1.20.6, 'feature/**']
pull_request:
branches: [master-1.20.1]
branches: [master-1.20.6]

permissions:
contents: read

concurrency:
group: baseelectric-1.20.1-${{ github.workflow }}-${{ github.ref }}
group: baseelectric-1.20.6-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build, test, and audit
runs-on: ubuntu-latest
timeout-minutes: 105
timeout-minutes: 75
steps:
- name: Check out baseElectric
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Use canonical LF dependency inputs
run: git config --global core.autocrlf false
- name: Verify merged dependency pins and public basePower bytes
- name: Verify merged and public dependency pins
id: public-pins
env:
GH_TOKEN: ${{ github.token }}
run: bash .github/verify-published-pins.sh
- name: Require coordinated 1.20.1 dependency pins
id: pins
run: bash .github/scripts/forge47-dependencies.sh pins
- name: Check out pinned OreSpawn
- name: Check out pinned OreSpawn tool source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: ${{ steps.pins.outputs.orespawn_ref }}
ref: ${{ steps.public-pins.outputs.orespawn_ref }}
path: .ci-dependencies/OreSpawn
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: ${{ steps.pins.outputs.basemetals_ref }}
path: .ci-dependencies/BaseMetals
- name: Check out pinned basePower
- name: Check out released basePower source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/basePower
ref: ${{ steps.pins.outputs.power_ref }}
path: .ci-dependencies/PowerAdvantage
- name: Install pinned Java 25 Mavenizer runtime
ref: ${{ steps.public-pins.outputs.power_ref }}
path: .ci-dependencies/basePower
- name: Install Java 25 for Mavenizer
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- name: Install Java 8 build utilities
- name: Install Java 8 for the launcher helper
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'
- name: Install Java 17 for Gradle and production
- name: Install Java 21 for Gradle and production
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'
java-version: '21.0.7+6.0.LTS'
- name: Use pinned build toolchains
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
run: bash .github/scripts/forge47-dependencies.sh build
- name: Build and audit release artifacts
- name: Verify the Forge 50 build inputs
shell: bash
env:
MAVENIZER: ${{ steps.dependencies.outputs.mavenizer }}
POWER_DEV: ${{ steps.dependencies.outputs.power }}
POWER_PLAYER: ${{ steps.public-pins.outputs.power_player }}
POWER_BOOTSTRAP: ${{ steps.dependencies.outputs.bootstrap }}
POWER_AGENT: ${{ steps.dependencies.outputs.agent }}
METALS_DEV: ${{ steps.dependencies.outputs.basemetals }}
METALS_PLAYER: ${{ steps.dependencies.outputs.basemetals_player }}
ORESPAWN_DEV: ${{ steps.dependencies.outputs.orespawn }}
ORESPAWN_PLAYER: ${{ steps.dependencies.outputs.orespawn_player }}
FORGE_INSTALLER: ${{ steps.dependencies.outputs.installer }}
ORESPAWN_REF: ${{ steps.public-pins.outputs.orespawn_ref }}
POWER_REF: ${{ steps.public-pins.outputs.power_ref }}
run: |
set -euo pipefail
orespawn="$GITHUB_WORKSPACE/.ci-dependencies/OreSpawn"
power="$GITHUB_WORKSPACE/.ci-dependencies/basePower"
test "$(git -C "$orespawn" rev-parse HEAD)" = "$ORESPAWN_REF"
test "$(git -C "$power" rev-parse HEAD)" = "$POWER_REF"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
printf '%s %s\n' '4B14145595E900F178A082F2253A756F63897E6F61C2B8B5E7C819B82CD79E8C' "$mavenizer" | sha256sum -c -
echo "MAVENIZER=$mavenizer" >> "$GITHUB_ENV"
- name: Build and audit release artifacts
shell: bash
run: |
./gradlew $MMD_GRADLE_TOOLCHAINS build writeReleaseChecksums verifyEclipseProductionClasspath \
"-Pforge47MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_DEV" \
"-PpowerAdvantageRuntimeJar=$POWER_PLAYER" "-PpowerAdvantageUnitBootstrapSource=$POWER_BOOTSTRAP" \
"-PpowerAdvantageUnitBootstrapJar=$POWER_AGENT" "-PbaseMetalsDeobfJar=$METALS_DEV" \
"-PbaseMetalsRuntimeJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_DEV" \
"-PoreSpawnRuntimeJar=$ORESPAWN_PLAYER" "-PforgeInstallerJar=$FORGE_INSTALLER" \
--no-build-cache --no-daemon --stacktrace
./gradlew $MMD_GRADLE_TOOLCHAINS clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts \
writeReleaseChecksums verifyEclipseProductionClasspath --no-build-cache --no-daemon --stacktrace \
"-Pforge50MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_PLAYER" \
"-PbaseMetalsDeobfJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_PLAYER" \
"-PforgeInstallerJar=$FORGE_INSTALLER"
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseElectric-1.20.1-${{ github.sha }}
name: baseElectric-1.20.6-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/baseElectric-2.2.13.120011.jar
build/libs/baseElectric-2.2.13.120011-sources.jar
build/libs/baseElectric-2.2.13.120011-javadoc.jar
build/libs/baseElectric-2.2.14.120061.jar
build/libs/baseElectric-2.2.14.120061-sources.jar
build/libs/baseElectric-2.2.14.120061-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseElectric-1.20.1-diagnostics-${{ github.sha }}
name: baseElectric-1.20.6-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
build/test-results/**
build/reports/**
build/*-run/logs/**
build/problems/**
.ci-dependencies/PowerAdvantage/build/reports/**
.ci-dependencies/PowerAdvantage/build/libs-dev/*.jar
Loading
Loading