Skip to content

fix(server): pass signal payload at index 0 to java handlers #28

fix(server): pass signal payload at index 0 to java handlers

fix(server): pass signal payload at index 0 to java handlers #28

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
version:
description: "Release version, e.g. 0.1.0"
required: true
type: string
channel:
description: "Update channel"
required: true
default: "stable"
type: choice
options:
- stable
- beta
- alpha
prerelease:
description: "Publish as prerelease"
required: true
default: false
type: boolean
permissions:
contents: write
jobs:
build-release:
runs-on: ubuntu-latest
environment: Production
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java 25
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "25-ea"
- name: Set up Java 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"
cache: gradle
- name: Make Gradle executable
run: chmod +x ./gradlew
- name: Install vendored libs to mavenLocal
shell: bash
run: |
for spec in "com/miry/miry:libs/miry-1.0-SNAPSHOT.jar:1.0-SNAPSHOT" \
"fr/mrqsdf/BbModelReader:libs/BbModelReader-1.0-SNAPSHOT.jar:1.0-SNAPSHOT" \
"moud/vendored/luau-natives-windows-x64:libs/luau-natives-windows-x64-1.0.0-moud.jar:1.0.0"; do
IFS=: read -r coords jar version <<< "$spec"
group="${coords%/*}"
artifact="${coords##*/}"
dest="$HOME/.m2/repository/${coords}/${version}"
mkdir -p "$dest"
cp "$jar" "$dest/${artifact}-${version}.jar"
cat > "$dest/${artifact}-${version}.pom" <<POMEOF
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion>
<groupId>${group//\//.}</groupId><artifactId>${artifact}</artifactId><version>${version}</version>
</project>
POMEOF
done
- name: Resolve release metadata
id: meta
shell: bash
run: |
set -euo pipefail
if [[ "${GITHUB_REF_TYPE:-}" == "tag" ]]; then
TAG="${GITHUB_REF_NAME}"
VERSION="${TAG#v}"
CHANNEL="stable"
PRERELEASE="false"
else
VERSION="${{ inputs.version }}"
VERSION="${VERSION#v}"
TAG="v${VERSION}"
CHANNEL="${{ inputs.channel }}"
PRERELEASE="${{ inputs.prerelease }}"
fi
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
echo "channel=${CHANNEL}" >> "$GITHUB_OUTPUT"
echo "prerelease=${PRERELEASE}" >> "$GITHUB_OUTPUT"
- name: Build artifacts
run: |
./gradlew \
:client-launcher:shadowJar \
:client-fabric:remapJar \
:server-minestom:shadowJar \
:server-supervisor:shadowJar \
-Pmoud.server.enableLuau=true \
-Pmoud.server.java=25
- name: Package release archives
id: package
shell: bash
run: |
set -euo pipefail
VERSION="${{ steps.meta.outputs.version }}"
TAG="${{ steps.meta.outputs.tag }}"
CLIENT_JAR="$(find client-fabric/build/libs -maxdepth 1 -type f -name '*.jar' ! -name '*-sources.jar' | sort | head -n1)"
CLIENT_LAUNCHER_JAR="$(find client-launcher/build/libs -maxdepth 1 -type f -name '*.jar' ! -name '*-sources.jar' | sort | head -n1)"
SERVER_JAR="$(find server-minestom/build/libs -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' ! -name '*-sources.jar' | sort | head -n1)"
SUPERVISOR_JAR="$(find server-supervisor/build/libs -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' ! -name '*-sources.jar' | sort | head -n1)"
if [[ -z "${CLIENT_JAR}" || ! -f "${CLIENT_JAR}" ]]; then
echo "Client jar not found" >&2; exit 1
fi
if [[ -z "${CLIENT_LAUNCHER_JAR}" || ! -f "${CLIENT_LAUNCHER_JAR}" ]]; then
echo "Client launcher jar not found" >&2; exit 1
fi
if [[ -z "${SERVER_JAR}" || ! -f "${SERVER_JAR}" ]]; then
echo "Server jar not found" >&2; exit 1
fi
rm -rf dist
mkdir -p dist/stage/client/engine/mods
mkdir -p dist/stage/server/engine
cp "${CLIENT_JAR}" "dist/stage/client/engine/mods/moud-client.jar"
cp "${SERVER_JAR}" "dist/stage/server/engine/moud-server.jar"
printf '%s\n' "${VERSION}" > dist/stage/client/engine/VERSION
printf '%s\n' "${VERSION}" > dist/stage/server/engine/VERSION
printf '%s\n' "${TAG}" > dist/stage/client/engine/RELEASE_TAG
printf '%s\n' "${TAG}" > dist/stage/server/engine/RELEASE_TAG
CLIENT_ARCHIVE="moud-client-${VERSION}.tar.gz"
SERVER_ARCHIVE="moud-server-${VERSION}.tar.gz"
tar --sort=name --mtime='UTC 2024-01-01' --owner=0 --group=0 --numeric-owner \
-C dist/stage/client -czf "dist/${CLIENT_ARCHIVE}" engine
tar --sort=name --mtime='UTC 2024-01-01' --owner=0 --group=0 --numeric-owner \
-C dist/stage/server -czf "dist/${SERVER_ARCHIVE}" engine
echo "client_archive=${CLIENT_ARCHIVE}" >> "$GITHUB_OUTPUT"
echo "server_archive=${SERVER_ARCHIVE}" >> "$GITHUB_OUTPUT"
cp "${CLIENT_LAUNCHER_JAR}" "dist/moud-client-launcher-${VERSION}.jar"
echo "client_launcher_jar=moud-client-launcher-${VERSION}.jar" >> "$GITHUB_OUTPUT"
if [[ -n "${SUPERVISOR_JAR}" && -f "${SUPERVISOR_JAR}" ]]; then
cp "${SUPERVISOR_JAR}" "dist/moud-supervisor-${VERSION}.jar"
echo "supervisor_jar=moud-supervisor-${VERSION}.jar" >> "$GITHUB_OUTPUT"
fi
- name: Generate signed release metadata
shell: bash
env:
RELEASE_SIGNING_PRIVATE_KEY: ${{ secrets.MOUD_RELEASE_SIGNING_PRIVATE_KEY }}
run: |
set -euo pipefail
if [[ -z "${RELEASE_SIGNING_PRIVATE_KEY:-}" ]]; then
echo "Missing secret MOUD_RELEASE_SIGNING_PRIVATE_KEY" >&2
exit 1
fi
VERSION="${{ steps.meta.outputs.version }}"
CHANNEL="${{ steps.meta.outputs.channel }}"
TAG="${{ steps.meta.outputs.tag }}"
BASE_URL="https://github.com/${{ github.repository }}/releases/download/${TAG}"
python3 tools/release_manifest.py \
--version "${VERSION}" \
--channel "${CHANNEL}" \
--base-download-url "${BASE_URL}" \
--client-archive "dist/${{ steps.package.outputs.client_archive }}" \
--server-archive "dist/${{ steps.package.outputs.server_archive }}" \
--output "dist/release.json"
echo "${RELEASE_SIGNING_PRIVATE_KEY}" | base64 -d > dist/release-key.pem
openssl pkey -in dist/release-key.pem -noout 2>/dev/null || {
echo "Invalid private key — store the PEM file as base64 in the secret" >&2
exit 1
}
openssl pkeyutl -sign -rawin -inkey dist/release-key.pem -in dist/release.json -out dist/release.sig.bin
base64 -w0 dist/release.sig.bin > dist/release.sig
rm -f dist/release-key.pem dist/release.sig.bin
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.meta.outputs.tag }}
name: Moud ${{ steps.meta.outputs.version }}
draft: false
prerelease: ${{ steps.meta.outputs.prerelease == 'true' }}
generate_release_notes: true
files: |
dist/${{ steps.package.outputs.client_archive }}
dist/${{ steps.package.outputs.server_archive }}
dist/${{ steps.package.outputs.client_launcher_jar }}
dist/${{ steps.package.outputs.supervisor_jar }}
dist/release.json
dist/release.sig