Files
Sdf1_login/.gitea/workflows/release.yml
T

153 lines
6.0 KiB
YAML

name: Auto Release
on:
push:
branches: [main]
jobs:
build:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Build Tools
run: |
set -e
echo "=== Setting up build environment ==="
# 1) 定位服务器已安装的最高版本 JDK —— 绝不安装新 JDK,避免版本冲突
# 优先检查 sdkman 管理的 JDK
SDKMAN_JAVA_HOME=""
if [ -f "$HOME/.sdkman/bin/sdkman-init.sh" ]; then
echo "Found sdkman, initializing..."
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 获取sdkman当前使用的Java版本路径
SDKMAN_JAVA_HOME=$(sdk current java 2>/dev/null | grep -oP 'java-home:\s*\K.*' || true)
echo "sdkman JAVA_HOME: $SDKMAN_JAVA_HOME"
fi
# 检查 /usr/lib/jvm 下的 JDK
SYS_JAVA_HOME=""
if [ -d "/usr/lib/jvm" ]; then
# 尝试找 Java 25
SYS_JAVA_HOME=$(find /usr/lib/jvm -name "java-*25*" -type d -print 2>/dev/null | head -1)
# 如果没有 Java 25,找最高版本
if [ -z "$SYS_JAVA_HOME" ]; then
SYS_JAVA_HOME=$(ls -d /usr/lib/jvm/java-* 2>/dev/null | sort -V | tail -1)
fi
echo "System /usr/lib/jvm JAVA_HOME: $SYS_JAVA_HOME"
fi
# 如果还没找到,用 which java 定位
WHICH_JAVA_HOME=""
if command -v java >/dev/null 2>&1; then
WHICH_JAVA_HOME=$(dirname $(dirname $(command -v java)))
echo "which java JAVA_HOME: $WHICH_JAVA_HOME"
fi
# 选择最佳的JAVA_HOME:优先sdkman > 系统 > which
JAVA_HOME=""
if [ -n "$SDKMAN_JAVA_HOME" ] && [ -d "$SDKMAN_JAVA_HOME" ] && [ -x "$SDKMAN_JAVA_HOME/bin/java" ]; then
JAVA_HOME="$SDKMAN_JAVA_HOME"
echo "Using sdkman JAVA_HOME: $JAVA_HOME"
elif [ -n "$SYS_JAVA_HOME" ] && [ -d "$SYS_JAVA_HOME" ] && [ -x "$SYS_JAVA_HOME/bin/java" ]; then
JAVA_HOME="$SYS_JAVA_HOME"
echo "Using system JAVA_HOME: $JAVA_HOME"
elif [ -n "$WHICH_JAVA_HOME" ] && [ -d "$WHICH_JAVA_HOME" ] && [ -x "$WHICH_JAVA_HOME/bin/java" ]; then
JAVA_HOME="$WHICH_JAVA_HOME"
echo "Using which java JAVA_HOME: $JAVA_HOME"
else
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 -version
# 2) 确保 Maven 可用 —— 优先用系统已安装的(sdkman/dnf),没有才下载二进制
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 所在目录加入 PATH
MVN_DIR=$(dirname "$MVN_BIN")
echo "PATH=$MVN_DIR:$JAVA_HOME/bin:$PATH" >> $GITHUB_ENV
echo "=== Maven version ==="
"$MVN_BIN" -version
- name: Build with Maven
run: |
# 显式设置JAVA_HOME环境变量(从GITHUB_ENV读取)
export JAVA_HOME="${{ env.JAVA_HOME }}"
echo "Using JAVA_HOME for Maven build: $JAVA_HOME"
java -version
mvn -B clean package -DskipTests
- name: Verify JAR
run: ls -la target/*.jar
- name: Create Release via API
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 "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
}" \
"${BASE}/releases"
# 上传 JAR 资产
RELEASE_ID=$(curl -s \
-H "Authorization: token ${{ secrets.GITEA_TOKEN || secrets.GITHUB_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 }}" \
-F "attachment=@target/Sdf1_login.jar" \
"${BASE}/releases/${RELEASE_ID}/assets"
echo "Release created: ${TAG}"
else
echo "Warning: Release creation may have failed"
fi