Files
MeshChatX/scripts/ci/setup-java.sh

66 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
# Install Adoptium Temurin JDK with SHA256 verification.
# Uses the Adoptium assets API to obtain the checksum and download URL
# directly from the source, avoiding opaque redirects.
# Source: https://adoptium.net (Eclipse Foundation)
# Usage: setup-java.sh [major_version]
set -eu
JAVA_VERSION="${1:-17}"
ARCH="$(uname -m)"
case "$ARCH" in
x86_64) ARCH="x64" ;;
aarch64) ARCH="aarch64" ;;
*) echo "Unsupported architecture: $ARCH" >&2; exit 1 ;;
esac
echo "Installing Temurin JDK ${JAVA_VERSION} (${ARCH})"
ASSETS_API="https://api.adoptium.net/v3/assets/latest/${JAVA_VERSION}/hotspot?architecture=${ARCH}&image_type=jdk&os=linux&vendor=eclipse"
API_JSON="$(curl -fsSL "$ASSETS_API")"
DOWNLOAD_URL="$(echo "$API_JSON" | sed -n 's/.*"link" *: *"\([^"]*\)".*/\1/p' | head -1)"
CHECKSUM_URL="$(echo "$API_JSON" | sed -n 's/.*"checksum_link" *: *"\([^"]*\)".*/\1/p' | head -1)"
EXPECTED="$(echo "$API_JSON" | sed -n 's/.*"checksum" *: *"\([0-9a-f]*\)".*/\1/p' | head -1)"
if [ -z "$DOWNLOAD_URL" ] || [ -z "$EXPECTED" ]; then
echo "Failed to resolve Temurin JDK ${JAVA_VERSION} for ${ARCH}" >&2
exit 1
fi
curl -fsSL "$DOWNLOAD_URL" -o /tmp/jdk.tar.gz
ACTUAL="$(sha256sum /tmp/jdk.tar.gz | cut -d' ' -f1)"
if [ "$EXPECTED" != "$ACTUAL" ]; then
echo "SHA256 verification failed for JDK ${JAVA_VERSION}" >&2
echo " expected: ${EXPECTED}" >&2
echo " got: ${ACTUAL}" >&2
rm -f /tmp/jdk.tar.gz
exit 1
fi
echo "SHA256 verified: ${ACTUAL}"
if [ -n "$CHECKSUM_URL" ]; then
EXPECTED_LINK="$(curl -fsSL "$CHECKSUM_URL" | cut -d' ' -f1)"
if [ "$EXPECTED_LINK" != "$ACTUAL" ]; then
echo "Cross-check against checksum_link also failed" >&2
rm -f /tmp/jdk.tar.gz
exit 1
fi
echo "Cross-verified against checksum_link"
fi
sudo mkdir -p /opt/java
sudo tar -xzf /tmp/jdk.tar.gz -C /opt/java --strip-components=1
rm -f /tmp/jdk.tar.gz
CI_ENV="${GITEA_ENV:-${GITHUB_ENV:-/dev/null}}"
CI_PATH="${GITEA_PATH:-${GITHUB_PATH:-/dev/null}}"
echo "JAVA_HOME=/opt/java" >> "$CI_ENV"
echo "/opt/java/bin" >> "$CI_PATH"
export JAVA_HOME=/opt/java
export PATH="/opt/java/bin:$PATH"
java -version