153 lines
6.0 KiB
YAML
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
|