♻️ 隔离 workflow 工作区并提升默认 runner 并发
This commit is contained in:
@@ -31,8 +31,10 @@ env:
|
||||
ACCESS_TOKEN: ${{ secrets.WORKFLOW }}
|
||||
|
||||
# ===== 工作区配置 =====
|
||||
# 完整克隆的工作目录 - 自建的runner可以复用工作区
|
||||
WORKSPACE_DIR: "/home/workspace"
|
||||
# 持久化 mirror 缓存目录
|
||||
MIRROR_ROOT: "/data/git-mirrors"
|
||||
# 每个 job 的独立临时工作目录根路径
|
||||
JOB_WORKSPACE_ROOT: "/home/workspace/jobs"
|
||||
|
||||
# ===== 分支配置 =====
|
||||
# 主分支名称(用于推送 CHANGELOG 更新)
|
||||
@@ -228,87 +230,64 @@ jobs:
|
||||
echo "======================================"
|
||||
echo ""
|
||||
|
||||
- name: 📥 克隆仓库
|
||||
- name: 📥 准备隔离仓库
|
||||
id: clone
|
||||
run: |
|
||||
echo "======================================"
|
||||
echo "🚀 开始准备仓库"
|
||||
echo "======================================"
|
||||
|
||||
REPO_SLUG="${{ github.repository }}"
|
||||
REPO_NAME="${{ github.event.repository.name }}"
|
||||
REPO_DIR="${{ env.WORKSPACE_DIR }}/$REPO_NAME"
|
||||
MAIN_BRANCH="${{ env.MAIN_BRANCH }}"
|
||||
RUN_ATTEMPT="${{ github.run_attempt }}"
|
||||
JOB_NAME="${{ github.job }}"
|
||||
SERVER_HOST="${GITHUB_SERVER_URL#http://}"
|
||||
SERVER_HOST="${SERVER_HOST#https://}"
|
||||
REMOTE_URL="https://oauth2:${{ env.ACCESS_TOKEN }}@${SERVER_HOST}/${REPO_SLUG}.git"
|
||||
BOOTSTRAP_SCRIPT="/tmp/bootstrap_workspace.sh"
|
||||
BOOTSTRAP_URL="${GITHUB_SERVER_URL}/api/v1/repos/${REPO_SLUG}/media/.gitea/ci/bootstrap_workspace.sh?ref=${GITHUB_SHA}"
|
||||
PREPARED_ENV=$(mktemp)
|
||||
|
||||
if [ -z "$RUN_ATTEMPT" ]; then
|
||||
RUN_ATTEMPT="1"
|
||||
fi
|
||||
|
||||
if [ -z "$JOB_NAME" ]; then
|
||||
JOB_NAME="job"
|
||||
fi
|
||||
|
||||
echo "📁 仓库名称: $REPO_NAME"
|
||||
echo "📍 目标目录: $REPO_DIR"
|
||||
echo "🪞 Mirror 根目录: ${{ env.MIRROR_ROOT }}"
|
||||
echo "📦 Job 工作区根目录: ${{ env.JOB_WORKSPACE_ROOT }}"
|
||||
echo "🌐 服务器: ${GITHUB_SERVER_URL}"
|
||||
echo ""
|
||||
|
||||
# 检查仓库状态
|
||||
if [ -d "$REPO_DIR" ]; then
|
||||
echo "📂 目录已存在,检查 Git 仓库状态..."
|
||||
curl -fsSL \
|
||||
-H "Authorization: token ${{ env.ACCESS_TOKEN }}" \
|
||||
"$BOOTSTRAP_URL" \
|
||||
-o "$BOOTSTRAP_SCRIPT"
|
||||
chmod +x "$BOOTSTRAP_SCRIPT"
|
||||
|
||||
if [ -d "$REPO_DIR/.git" ]; then
|
||||
# 目录存在且是有效的 Git 仓库
|
||||
echo "✓ 发现有效的 Git 仓库,执行增量更新..."
|
||||
cd "$REPO_DIR"
|
||||
bash "$BOOTSTRAP_SCRIPT" prepare-job-workspace \
|
||||
"$REPO_SLUG" \
|
||||
"$REMOTE_URL" \
|
||||
"${{ env.MIRROR_ROOT }}" \
|
||||
"${{ env.JOB_WORKSPACE_ROOT }}" \
|
||||
"${{ github.run_id }}" \
|
||||
"$RUN_ATTEMPT" \
|
||||
"$JOB_NAME" > "$PREPARED_ENV"
|
||||
|
||||
# 清理工作区
|
||||
git clean -fdx
|
||||
git reset --hard
|
||||
# shellcheck source=/dev/null
|
||||
source "$PREPARED_ENV"
|
||||
rm -f "$PREPARED_ENV"
|
||||
|
||||
# 获取最新代码和标签,同时清理远程已删除的 tag
|
||||
echo "📥 拉取最新代码和标签..."
|
||||
git fetch --all --tags --force --prune --prune-tags
|
||||
echo "✓ 已同步远程状态(包括已删除的 tag)"
|
||||
echo "✓ Mirror 路径: $MIRROR_PATH"
|
||||
echo "✓ Job 工作区: $JOB_WORKSPACE"
|
||||
echo "✓ 仓库目录: $REPO_DIR"
|
||||
echo ""
|
||||
|
||||
echo "✓ 仓库已更新"
|
||||
else
|
||||
# 目录存在但不是 Git 仓库(可能之前运行失败)
|
||||
echo "⚠️ 目录存在但不是有效的 Git 仓库"
|
||||
echo "🧹 清理损坏的目录..."
|
||||
rm -rf "$REPO_DIR"
|
||||
echo "✓ 已清理"
|
||||
|
||||
# 重新克隆
|
||||
echo "📥 克隆仓库..."
|
||||
mkdir -p "${{ env.WORKSPACE_DIR }}"
|
||||
|
||||
git clone \
|
||||
https://oauth2:${{ env.ACCESS_TOKEN }}@${GITHUB_SERVER_URL#https://}/${{ github.repository }}.git \
|
||||
"$REPO_DIR"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ 克隆失败"
|
||||
cat /tmp/git_clone.log
|
||||
|
||||
# 清理残留
|
||||
if [ -d "$REPO_DIR" ]; then
|
||||
rm -rf "$REPO_DIR"
|
||||
fi
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$REPO_DIR"
|
||||
echo "✓ 仓库已克隆"
|
||||
fi
|
||||
else
|
||||
# 目录不存在,首次克隆
|
||||
echo "📥 克隆仓库(首次)..."
|
||||
mkdir -p "${{ env.WORKSPACE_DIR }}"
|
||||
|
||||
git clone \
|
||||
https://oauth2:${{ env.ACCESS_TOKEN }}@${GITHUB_SERVER_URL#https://}/${{ github.repository }}.git \
|
||||
"$REPO_DIR"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
cd "$REPO_DIR"
|
||||
echo "✓ 仓库已克隆"
|
||||
else
|
||||
echo "❌ 克隆失败"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
cd "$REPO_DIR"
|
||||
|
||||
echo ""
|
||||
echo "🔍 验证主分支配置..."
|
||||
@@ -325,7 +304,6 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAIN_BRANCH="${{ env.MAIN_BRANCH }}"
|
||||
echo "✓ 使用配置的主分支: $MAIN_BRANCH"
|
||||
|
||||
# 验证分支是否存在
|
||||
@@ -351,7 +329,10 @@ jobs:
|
||||
# 导出到环境变量供后续步骤使用
|
||||
echo "REPO_DIR=$REPO_DIR" >> $GITHUB_ENV
|
||||
echo "REPO_NAME=$REPO_NAME" >> $GITHUB_ENV
|
||||
echo "JOB_WORKSPACE=$JOB_WORKSPACE" >> $GITHUB_ENV
|
||||
echo "MIRROR_PATH=$MIRROR_PATH" >> $GITHUB_ENV
|
||||
echo "MAIN_BRANCH=$MAIN_BRANCH" >> $GITHUB_ENV
|
||||
echo "BOOTSTRAP_SCRIPT=$BOOTSTRAP_SCRIPT" >> $GITHUB_ENV
|
||||
|
||||
echo ""
|
||||
echo "✅ 仓库准备完成"
|
||||
@@ -1078,16 +1059,6 @@ jobs:
|
||||
|
||||
检测到此提交由 Bot 创建(包含 `[skip ci]` 标记),为防止无限循环,已跳过执行。
|
||||
EOFBOT
|
||||
elif [ "${{ steps.check_version.outputs.version_exists }}" = "true" ]; then
|
||||
cat >> $GITHUB_STEP_SUMMARY << 'EOFEXIST'
|
||||
| 📋 执行状态 | ⏭️ 已跳过 (版本已存在) |
|
||||
|
||||
---
|
||||
|
||||
⏭️ **工作流已跳过**
|
||||
|
||||
版本 `${{ env.CHANGELOG_VERSION }}` 已存在于 CHANGELOG.md 中。
|
||||
EOFEXIST
|
||||
elif [ "${{ steps.changelog.outputs.changelog_updated }}" = "true" ]; then
|
||||
if [ "${{ steps.changelog.outputs.content_changed }}" = "true" ]; then
|
||||
cat >> $GITHUB_STEP_SUMMARY << 'EOFSUCCESS'
|
||||
@@ -1175,9 +1146,6 @@ jobs:
|
||||
if [ "${{ steps.check_bot.outputs.is_bot_commit }}" = "true" ]; then
|
||||
echo "⏭️ 已跳过: Bot 提交检测"
|
||||
echo " 原因: 检测到 [skip ci] 标记,防止无限循环"
|
||||
elif [ "${{ steps.check_version.outputs.version_exists }}" = "true" ]; then
|
||||
echo "⏭️ 已跳过: 版本已存在"
|
||||
echo " 版本: ${{ env.CHANGELOG_VERSION }}"
|
||||
elif [ "${{ steps.changelog.outputs.changelog_updated }}" = "true" ]; then
|
||||
echo "📊 执行结果:"
|
||||
echo " - Tag: ${{ github.ref_name }}"
|
||||
@@ -1223,4 +1191,8 @@ jobs:
|
||||
run: |
|
||||
echo "🧹 清理临时文件..."
|
||||
rm -rf /tmp/commits.txt /tmp/changelog_updated.txt /tmp/content_changed.txt /tmp/release-body.txt /tmp/payload.json /tmp/release_response.json /tmp/upload_response_*.json
|
||||
if [ -n "${{ env.JOB_WORKSPACE }}" ] && [ "${{ env.JOB_WORKSPACE }}" != "/" ]; then
|
||||
echo "🧹 清理 Job 工作区: ${{ env.JOB_WORKSPACE }}"
|
||||
rm -rf "${{ env.JOB_WORKSPACE }}"
|
||||
fi
|
||||
echo "✅ 清理完成"
|
||||
|
||||
Reference in New Issue
Block a user