Add diff, which separates what changed from what nobody looked at #27
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
| name: ci | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| go: | |
| name: Go core | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Check out source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Go | |
| uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 | |
| with: | |
| go-version: '1.23.12' | |
| cache: true | |
| - name: Check formatting | |
| shell: bash | |
| run: | | |
| mapfile -d '' go_files < <(find . -type f -name '*.go' -print0) | |
| unformatted="$(gofmt -l "${go_files[@]}")" | |
| test -z "$unformatted" || { printf '%s\n' "$unformatted"; exit 1; } | |
| - name: Check committed canonical fixtures | |
| run: go run ./cmd/mcjava-fixtures | |
| - name: Check the documented baseline against the build files | |
| run: ./scripts/check-documented-versions.sh | |
| - name: Test | |
| run: go test -count=1 ./... | |
| - name: Vet | |
| run: go vet ./... | |
| - name: Race test | |
| run: go test -race -count=1 ./... | |
| - name: Build CLI | |
| run: go build -trimpath -o "${RUNNER_TEMP}/worldledger" ./cmd/worldledger | |
| go-windows: | |
| name: Go core (Windows) | |
| runs-on: windows-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Check out source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Go | |
| uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 | |
| with: | |
| go-version: '1.23.12' | |
| cache: true | |
| - name: Check committed canonical fixtures | |
| run: go run ./cmd/mcjava-fixtures | |
| - name: Test Windows paths and locking | |
| run: go test -count=1 ./... | |
| - name: Vet | |
| run: go vet ./... | |
| - name: Build CLI | |
| shell: pwsh | |
| run: go build -trimpath -o "$env:RUNNER_TEMP\worldledger.exe" ./cmd/worldledger | |
| fabric: | |
| name: Fabric 26.2 adapter | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Check out source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Java 25 | |
| uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| - name: Validate wrapper and set up Gradle | |
| uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 | |
| with: | |
| cache-provider: basic | |
| - name: Clean build with all warnings | |
| working-directory: adapters/fabric | |
| run: ./gradlew --no-daemon clean build --warning-mode all | |
| fabric-gametest: | |
| name: Fabric 26.2 capture game test | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 40 | |
| steps: | |
| - name: Check out source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Java 25 | |
| uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| - name: Validate wrapper and set up Gradle | |
| uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 | |
| with: | |
| cache-provider: basic | |
| # A runner has no GPU, so the client needs a virtual display and a software | |
| # OpenGL implementation. Without Mesa it starts and then fails on context | |
| # creation, which reads as an unrelated crash. | |
| - name: Install a virtual display and software OpenGL | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y xvfb libgl1-mesa-dri libglx-mesa0 libxi6 libxcursor1 libxrandr2 libxinerama1 libxxf86vm1 libasound2t64 | |
| # The game test starts a dedicated server, which requires accepting | |
| # Mojang's EULA: https://aka.ms/MinecraftEULA. Passing the flag here is the | |
| # repository owner's acceptance for automated runs. The build never | |
| # accepts it implicitly. | |
| - name: Set up Go | |
| uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 | |
| with: | |
| go-version: '1.23.12' | |
| cache: true | |
| - name: Run the capture game test | |
| working-directory: adapters/fabric | |
| env: | |
| LIBGL_ALWAYS_SOFTWARE: '1' | |
| GALLIUM_DRIVER: llvmpipe | |
| run: xvfb-run -a --server-args="-screen 0 1280x1024x24" ./gradlew --no-daemon runClientGametest -Pworldledger.acceptMinecraftEula=true | |
| # The fingerprint carries state and component digests only, so it can be | |
| # compared against a capture from another platform whose instants, | |
| # contributors, and session identifiers necessarily differ. | |
| - name: Fingerprint what this platform captured | |
| run: ./scripts/capture-fingerprint.sh adapters/fabric/build/run-gametest/config/worldledger/spool "${RUNNER_TEMP}/linux-capture-fingerprint.txt" | |
| - name: Upload the capture fingerprint | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: linux-capture-fingerprint | |
| path: ${{ runner.temp }}/linux-capture-fingerprint.txt | |
| retention-days: 30 | |
| # Live as soon as a reference produced on another platform is committed. | |
| # Until then it reports that the gate is not yet guarding anything, rather | |
| # than passing silently and reading as though it were. | |
| - name: Compare against the committed cross-platform reference | |
| run: | | |
| reference=testdata/capture-fingerprint-reference.txt | |
| if [ ! -f "$reference" ]; then | |
| echo "no cross-platform reference is committed yet, so this gate is not guarding anything" | |
| echo "commit one produced on another platform to make it live" | |
| exit 0 | |
| fi | |
| go run ./cmd/worldledger fingerprint \ | |
| --file "${RUNNER_TEMP}/linux-capture-fingerprint.txt" --compare "$reference" | |
| - name: Upload run directory on failure | |
| if: failure() | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: client-gametest-run | |
| path: | | |
| adapters/fabric/build/run-gametest/logs | |
| adapters/fabric/build/run-gametest/config/worldledger | |
| retention-days: 7 |