fix: 改用actions/setup-java@v4从Temurin下载JDK25,彻底绕开服务器JDK探测和sdkman冲突
Auto Release / build (push) Successful in 49s

This commit is contained in:
2026-07-19 01:14:27 +08:00
parent 0ddc47b5d4
commit 1133f37bf9
+19 -108
View File
@@ -11,135 +11,46 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Build Tools
- name: Setup JDK 25 (Temurin)
uses: actions/setup-java@v4
with:
java-version: '25'
distribution: 'temurin'
- name: Verify Java
run: |
set -e
echo "=== Setting up build environment ==="
# 彻底绕开 sdkman —— 它会注入低版本JDK导致冲突
# 直接在 /usr/lib/jvm 中找最高版本的JDK
JAVA_HOME=""
if [ -d "/usr/lib/jvm" ]; then
# 列出所有JDK,按版本排序,取最高
echo "Available JDKs in /usr/lib/jvm:"
ls -d /usr/lib/jvm/java-* 2>/dev/null || true
# 优先找 Java 25+
JAVA_HOME=$(find /usr/lib/jvm -name "java-25*" -type d 2>/dev/null | sort -V | tail -1)
if [ -z "$JAVA_HOME" ]; then
# 找最高版本
JAVA_HOME=$(ls -d /usr/lib/jvm/java-* 2>/dev/null | sort -V | tail -1)
fi
fi
# 如果没找到,用 which java
if [ -z "$JAVA_HOME" ] || [ ! -x "$JAVA_HOME/bin/java" ]; then
if command -v java >/dev/null 2>&1; then
JAVA_HOME=$(dirname $(dirname $(command -v java)))
fi
fi
if [ -z "$JAVA_HOME" ] || [ ! -x "$JAVA_HOME/bin/java" ]; then
echo "ERROR: No valid JDK found!"
exit 1
fi
# 导出JAVA_HOME到GITHUB_ENV(后续步骤可用)
echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV
export JAVA_HOME
echo "=== Final JAVA_HOME: $JAVA_HOME ==="
"$JAVA_HOME/bin/java" -version
# 验证:确保是 JDK 25+
JAVA_VER=$("$JAVA_HOME/bin/java" -version 2>&1 | head -1)
echo "Java version string: $JAVA_VER"
if echo "$JAVA_VER" | grep -qE '"17\.|"11\.|"1\.'; then
echo "WARNING: JAVA_HOME points to JDK < 25, compilation may fail!"
fi
# 确保 Maven 可用 —— 优先用 system PATH 中的 mvn
MVN_BIN=""
if command -v mvn >/dev/null 2>&1; then
MVN_BIN=$(command -v mvn)
echo "Maven found in PATH: $MVN_BIN"
elif [ -x /opt/maven/bin/mvn ]; then
MVN_BIN=/opt/maven/bin/mvn
echo "Maven found at /opt/maven"
fi
if [ -z "$MVN_BIN" ]; then
echo "Maven not found, downloading binary (aliyun mirror)..."
MAVEN_VER=3.9.9
cd /tmp
curl -fsSL --connect-timeout 15 --max-time 120 \
"https://mirrors.aliyun.com/apache/maven/maven-3/${MAVEN_VER}/binaries/apache-maven-${MAVEN_VER}-bin.tar.gz" \
-o maven.tgz || \
curl -fsSL --connect-timeout 15 --max-time 120 \
"https://dlcdn.apache.org/maven/maven-3/${MAVEN_VER}/binaries/apache-maven-${MAVEN_VER}-bin.tar.gz" \
-o maven.tgz
tar -xzf maven.tgz -C /opt
ln -sfn /opt/apache-maven-${MAVEN_VER} /opt/maven
rm -f maven.tgz
MVN_BIN=/opt/maven/bin/mvn
fi
# 把 Maven 和 JAVA_HOME 的 bin 目录加入 PATH
MVN_DIR=$(dirname "$MVN_BIN")
echo "PATH=$MVN_DIR:$JAVA_HOME/bin:$PATH" >> $GITHUB_ENV
echo "=== Maven version ==="
"$MVN_BIN" -version
echo "JAVA_HOME=$JAVA_HOME"
java -version
- name: Build with Maven
run: |
# 强制使用 JAVA_HOME 中的 java,完全绕开 PATH 和 sdkman
export JAVA_HOME="${{ env.JAVA_HOME }}"
export PATH="$JAVA_HOME/bin:$PATH"
echo "JAVA_HOME=$JAVA_HOME"
echo "java binary: $(which java)"
java -version
mvn -B clean package -DskipTests
run: mvn -B clean package -DskipTests
- name: Verify JAR
run: ls -la target/*.jar
- name: Create Release via API
- name: Create Release
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}
run: |
TAG="build-${{ gitea.run_number }}"
BASE="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}"
# 创建 tag
curl -s -X POST \
-H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}" \
-H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"ref\":\"refs/tags/${TAG}\",\"sha\":\"${{ gitea.sha }}\"}" \
"${BASE}/tags" || true
# 创建 release
curl -s -X POST \
-H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{
\"tag_name\": \"${TAG}\",
\"name\": \"Build ${{ gitea.run_number }}\",
\"body\": \"Auto release from Gitea Actions\\n\\nCommit: ${{ gitea.sha }}\\nBranch: ${{ gitea.ref_name }}\",
\"draft\": false,
\"prerelease\": false
}" \
-d "{\"tag_name\":\"${TAG}\",\"name\":\"Build ${{ gitea.run_number }}\",\"body\":\"Commit: ${{ gitea.sha }}\nBranch: ${{ gitea.ref_name }}\",\"draft\":false,\"prerelease\":false}" \
"${BASE}/releases"
# 上传 JAR 资产
RELEASE_ID=$(curl -s \
-H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}" \
-H "Authorization: token $GITEA_TOKEN" \
"${BASE}/releases/tags/${TAG}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -n "$RELEASE_ID" ]; then
curl -s -X POST \
-H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}" \
-H "Authorization: token $GITEA_TOKEN" \
-F "attachment=@target/Sdf1_login.jar" \
"${BASE}/releases/${RELEASE_ID}/assets"
echo "Release created: ${TAG}"
echo "Release ${TAG} created with JAR"
else
echo "Warning: Release creation may have failed"
echo "Release tag ${TAG} created (JAR attach may need manual check)"
fi