🐛 fix(stats): switch badges to self-hosted svg
Ubuntu System Information / show-system-info (push) Successful in 0s
Ubuntu System Information / show-system-info (push) Successful in 0s
This commit is contained in:
@@ -35,17 +35,12 @@ env:
|
||||
SPECIAL_INCLUDES: ""
|
||||
# 示例: 'dist:js,css|vendor:go,mod'
|
||||
|
||||
# ===== 徽章颜色配置 =====
|
||||
# ===== SVG 徽章颜色配置 =====
|
||||
COLOR_TOTAL: "blue"
|
||||
COLOR_FILES: "green"
|
||||
COLOR_DEFAULT: "brightgreen"
|
||||
|
||||
# ===== 徽章样式配置 =====
|
||||
BADGE_STYLE: "flat" # 可选: flat, flat-square, plastic, for-the-badge, social
|
||||
COLOR_LANGUAGE_COUNT: "purple"
|
||||
|
||||
# ===== 输出配置 =====
|
||||
# 是否生成详细报告
|
||||
GENERATE_DETAILED_REPORT: "true"
|
||||
# 是否输出到 workflow summary
|
||||
OUTPUT_TO_SUMMARY: "true"
|
||||
# 最小代码行数阈值(低于此值的语言不生成徽章)
|
||||
@@ -55,18 +50,6 @@ env:
|
||||
GIT_USER_NAME: "ci[bot]"
|
||||
GIT_USER_EMAIL: "ci[bot]@tinysoft.com.cn"
|
||||
|
||||
# ===== 平台配置 =====
|
||||
# 平台类型: github 或 gitea
|
||||
PLATFORM: "gitea"
|
||||
# Git 服务器 URL(Gitea 示例: https://gitea.example.com)
|
||||
GIT_SERVER_URL: "${{ github.server_url }}"
|
||||
# 仓库路径(格式: owner/repo)
|
||||
REPO_PATH: "${{ github.repository }}"
|
||||
# Raw 文件基础 URL
|
||||
# GitHub: https://raw.githubusercontent.com/{owner}/{repo}/{branch}/{path}
|
||||
# Gitea: https://gitea.example.com/{owner}/{repo}/raw/branch/{branch}/{path}
|
||||
RAW_URL_BASE: '${{ github.server_url }}/${{ github.repository }}/raw/branch'
|
||||
|
||||
# ==========================================
|
||||
# 🎨 语言分组配置
|
||||
# 格式: 组名:后缀列表:显示名称:颜色:图标(可选)
|
||||
@@ -363,19 +346,19 @@ jobs:
|
||||
cat > README.md << 'EOF'
|
||||
# 📊 代码统计徽章数据
|
||||
|
||||
> 此分支由 GitHub Actions 自动生成和维护
|
||||
> 此分支由 Gitea Actions 自动生成和维护
|
||||
>
|
||||
> ⚠️ **请勿手动修改此分支的内容!**
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
```
|
||||
README.md # 详细统计报告
|
||||
badges/
|
||||
├── total-lines.json # 总代码行数徽章
|
||||
├── total-files.json # 总文件数徽章
|
||||
├── {language}-lines.json # 各语言代码行数徽章
|
||||
├── {language}-files.json # 各语言文件数徽章
|
||||
└── README.md # 详细统计报告
|
||||
├── total-lines.svg # 总代码行数徽章
|
||||
├── total-files.svg # 总文件数徽章
|
||||
├── language-count.svg # 语言种类徽章
|
||||
└── {language}-lines.svg # 各语言代码行数徽章
|
||||
```
|
||||
|
||||
## 🔄 更新机制
|
||||
@@ -389,7 +372,7 @@ jobs:
|
||||
|
||||
---
|
||||
|
||||
*🤖 由 GitHub Actions 自动维护*
|
||||
*🤖 由 Gitea Actions 自动维护*
|
||||
EOF
|
||||
|
||||
# 创建徽章目录
|
||||
@@ -555,212 +538,50 @@ jobs:
|
||||
echo "======================================"
|
||||
echo ""
|
||||
|
||||
- name: 🎨 生成徽章数据
|
||||
- name: 🎨 生成 SVG 徽章与统计报告
|
||||
id: generate_badges
|
||||
run: |
|
||||
echo "======================================"
|
||||
echo "🎨 生成徽章数据"
|
||||
echo "🎨 生成 SVG 徽章与统计报告"
|
||||
echo "======================================"
|
||||
|
||||
cd "${{ env.REPO_DIR }}"
|
||||
|
||||
# 确保在统计分支
|
||||
# 在主分支渲染产物,避免依赖 stats 分支中的脚本文件
|
||||
git checkout ${{ github.ref_name }}
|
||||
|
||||
RENDER_ROOT=$(mktemp -d)
|
||||
UPDATED_AT=$(date -u '+%Y-%m-%d %H:%M:%S UTC')
|
||||
|
||||
python3 .gitea/ci/render_stats_svgs.py \
|
||||
--output-dir "$RENDER_ROOT/${{ env.BADGE_DIR }}" \
|
||||
--readme-path "$RENDER_ROOT/README.md" \
|
||||
--repo "${{ github.repository }}" \
|
||||
--generated-by "Gitea Actions" \
|
||||
--updated-at "$UPDATED_AT" \
|
||||
--total-color "${{ env.COLOR_TOTAL }}" \
|
||||
--files-color "${{ env.COLOR_FILES }}" \
|
||||
--language-count-color "${{ env.COLOR_LANGUAGE_COUNT }}" \
|
||||
--total-code "${{ steps.total.outputs.total_code }}" \
|
||||
--formatted-total-code "${{ steps.total.outputs.formatted_code }}" \
|
||||
--total-files "${{ steps.total.outputs.total_files }}" \
|
||||
--formatted-total-files "${{ steps.total.outputs.formatted_files }}" \
|
||||
--language-count "${{ steps.languages.outputs.language_count }}" \
|
||||
--exclude-dirs "${{ env.EXCLUDE_DIRS }}" \
|
||||
--min-lines-threshold "${{ env.MIN_LINES_THRESHOLD }}" \
|
||||
--lang-summary /tmp/lang_summary.txt
|
||||
|
||||
git checkout ${{ env.BADGE_BRANCH }}
|
||||
|
||||
# 确保徽章目录存在
|
||||
mkdir -p ${{ env.BADGE_DIR }}
|
||||
|
||||
GENERATED_COUNT=0
|
||||
|
||||
# 生成总代码行数徽章
|
||||
echo "📊 生成总代码行数徽章..."
|
||||
cat > ${{ env.BADGE_DIR }}/total-lines.json << EOF
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "代码",
|
||||
"message": "${{ steps.total.outputs.formatted_code }} 行",
|
||||
"color": "${{ env.COLOR_TOTAL }}",
|
||||
"style": "${{ env.BADGE_STYLE }}"
|
||||
}
|
||||
EOF
|
||||
GENERATED_COUNT=$((GENERATED_COUNT + 1))
|
||||
|
||||
# 生成总文件数徽章
|
||||
echo "📁 生成总文件数徽章..."
|
||||
cat > ${{ env.BADGE_DIR }}/total-files.json << EOF
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "文件",
|
||||
"message": "${{ steps.total.outputs.formatted_files }} 个",
|
||||
"color": "${{ env.COLOR_FILES }}",
|
||||
"style": "${{ env.BADGE_STYLE }}"
|
||||
}
|
||||
EOF
|
||||
GENERATED_COUNT=$((GENERATED_COUNT + 1))
|
||||
|
||||
# 生成各语言徽章
|
||||
if [ -f /tmp/lang_summary.txt ] && [ -s /tmp/lang_summary.txt ]; then
|
||||
echo ""
|
||||
echo "🌐 生成语言徽章..."
|
||||
|
||||
while IFS='|' read -r lang_id display_name code_lines formatted_lines file_count color icon; do
|
||||
[ -z "$lang_id" ] && continue
|
||||
|
||||
echo " - $display_name"
|
||||
|
||||
# 生成代码行数徽章(使用 heredoc)
|
||||
if [ -n "$icon" ]; then
|
||||
# 带图标的徽章
|
||||
cat > ${{ env.BADGE_DIR }}/${lang_id}-lines.json << EOFJSON
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "$display_name",
|
||||
"message": "$formatted_lines 行",
|
||||
"color": "$color",
|
||||
"style": "${{ env.BADGE_STYLE }}",
|
||||
"namedLogo": "$icon"
|
||||
}
|
||||
EOFJSON
|
||||
else
|
||||
# 不带图标的徽章
|
||||
cat > ${{ env.BADGE_DIR }}/${lang_id}-lines.json << EOFJSON
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "$display_name",
|
||||
"message": "$formatted_lines 行",
|
||||
"color": "$color",
|
||||
"style": "${{ env.BADGE_STYLE }}"
|
||||
}
|
||||
EOFJSON
|
||||
fi
|
||||
GENERATED_COUNT=$((GENERATED_COUNT + 1))
|
||||
|
||||
# 生成文件数徽章
|
||||
cat > ${{ env.BADGE_DIR }}/${lang_id}-files.json << EOFJSON
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "$display_name 文件",
|
||||
"message": "$file_count 个",
|
||||
"color": "$color",
|
||||
"style": "${{ env.BADGE_STYLE }}"
|
||||
}
|
||||
EOFJSON
|
||||
GENERATED_COUNT=$((GENERATED_COUNT + 1))
|
||||
done < /tmp/lang_summary.txt
|
||||
fi
|
||||
rm -rf "${{ env.BADGE_DIR }}"
|
||||
mkdir -p "${{ env.BADGE_DIR }}"
|
||||
cp -f "$RENDER_ROOT/README.md" README.md
|
||||
cp -f "$RENDER_ROOT/${{ env.BADGE_DIR }}"/* "${{ env.BADGE_DIR }}/"
|
||||
GENERATED_COUNT=$(find "$RENDER_ROOT/${{ env.BADGE_DIR }}" -maxdepth 1 -type f | wc -l | tr -d ' ')
|
||||
rm -rf "$RENDER_ROOT"
|
||||
|
||||
echo ""
|
||||
echo "generated_count=$GENERATED_COUNT" >> $GITHUB_OUTPUT
|
||||
echo "✅ 已生成 $GENERATED_COUNT 个徽章"
|
||||
echo "======================================"
|
||||
echo ""
|
||||
|
||||
- name: 📝 生成详细统计报告
|
||||
if: env.GENERATE_DETAILED_REPORT == 'true'
|
||||
run: |
|
||||
echo "======================================"
|
||||
echo "📝 生成详细统计报告"
|
||||
echo "======================================"
|
||||
|
||||
cd "${{ env.REPO_DIR }}"
|
||||
|
||||
# 确保在统计分支
|
||||
git checkout ${{ env.BADGE_BRANCH }}
|
||||
|
||||
# 生成 README
|
||||
cat > ${{ env.BADGE_DIR }}/README.md << 'EOFMD'
|
||||
# 📊 代码统计详细报告
|
||||
|
||||
> 🤖 由 GitHub Actions 自动生成
|
||||
>
|
||||
> 📅 更新时间: TIMESTAMP_PLACEHOLDER
|
||||
|
||||
## 📈 总体统计
|
||||
|
||||
| 统计项 | 数值 | 徽章 |
|
||||
|--------|------|------|
|
||||
| 💻 总代码行数 | **TOTAL_CODE_PLACEHOLDER** 行 |  |
|
||||
| 📁 总文件数 | **TOTAL_FILES_PLACEHOLDER** 个 |  |
|
||||
| 🌐 语言种类 | **LANG_COUNT_PLACEHOLDER** 种 | - |
|
||||
|
||||
## 🌈 语言分布
|
||||
|
||||
EOFMD
|
||||
|
||||
# 替换占位符
|
||||
sed -i "s|TIMESTAMP_PLACEHOLDER|$(date -u '+%Y-%m-%d %H:%M:%S UTC')|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|TOTAL_CODE_PLACEHOLDER|${{ steps.total.outputs.formatted_code }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|TOTAL_FILES_PLACEHOLDER|${{ steps.total.outputs.formatted_files }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|LANG_COUNT_PLACEHOLDER|${{ steps.languages.outputs.language_count }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|REPO_PLACEHOLDER|${{ github.repository }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|BRANCH_PLACEHOLDER|${{ env.BADGE_BRANCH }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|BADGE_DIR_PLACEHOLDER|${{ env.BADGE_DIR }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
sed -i "s|RAW_URL_PLACEHOLDER|${{ env.RAW_URL_BASE }}|g" ${{ env.BADGE_DIR }}/README.md
|
||||
|
||||
# 添加语言统计表格
|
||||
if [ -f /tmp/lang_summary.txt ] && [ -s /tmp/lang_summary.txt ]; then
|
||||
cat >> ${{ env.BADGE_DIR }}/README.md << 'EOFTABLE'
|
||||
| 语言 | 代码行数 | 文件数 | 占比 | 徽章 |
|
||||
|------|----------|--------|------|------|
|
||||
EOFTABLE
|
||||
|
||||
TOTAL_CODE=${{ steps.total.outputs.total_code }}
|
||||
while IFS='|' read -r lang_id display_name code_lines formatted_lines file_count color icon; do
|
||||
[ -z "$lang_id" ] && continue
|
||||
|
||||
if [ "$TOTAL_CODE" -gt 0 ]; then
|
||||
PERCENT=$(echo "scale=1; $code_lines * 100 / $TOTAL_CODE" | bc)
|
||||
else
|
||||
PERCENT="0.0"
|
||||
fi
|
||||
|
||||
cat >> ${{ env.BADGE_DIR }}/README.md << EOFLANG
|
||||
| **${display_name}** | ${formatted_lines} | ${file_count} | ${PERCENT}% |  |
|
||||
EOFLANG
|
||||
done < /tmp/lang_summary.txt
|
||||
fi
|
||||
|
||||
# 添加配置说明
|
||||
cat >> ${{ env.BADGE_DIR }}/README.md << EOFMD
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 配置说明
|
||||
|
||||
### Token 配置
|
||||
|
||||
- 当前使用: **${{ steps.validate_token.outputs.token_type }}**
|
||||
- 需要在 Settings -> Secrets 中配置 `WORKFLOW`
|
||||
|
||||
### 排除规则
|
||||
|
||||
当前排除的目录:
|
||||
```
|
||||
${{ env.EXCLUDE_DIRS }}
|
||||
```
|
||||
|
||||
### 阈值设置
|
||||
|
||||
- 最小代码行数阈值: **${{ env.MIN_LINES_THRESHOLD }}** 行
|
||||
- 低于此阈值的语言将不会生成徽章
|
||||
|
||||
### 徽章样式
|
||||
|
||||
- 当前样式: **${{ env.BADGE_STYLE }}**
|
||||
- 可选样式: flat, flat-square, plastic, for-the-badge, social
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
*📊 由 [GitHub Actions](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions) 自动生成和更新*
|
||||
|
||||
*🤖 生成时间: $(date -u '+%Y-%m-%d %H:%M:%S UTC')*
|
||||
|
||||
</div>
|
||||
EOFMD
|
||||
|
||||
echo "✅ 详细统计报告已生成"
|
||||
echo "✅ 已生成 $GENERATED_COUNT 个 SVG 徽章"
|
||||
echo "======================================"
|
||||
echo ""
|
||||
|
||||
@@ -781,7 +602,7 @@ jobs:
|
||||
git config user.email "${{ env.GIT_USER_EMAIL }}"
|
||||
|
||||
# 添加所有更改
|
||||
git add ${{ env.BADGE_DIR }}/
|
||||
git add README.md ${{ env.BADGE_DIR }}/
|
||||
|
||||
# 检查是否有变更
|
||||
if git diff --staged --quiet; then
|
||||
@@ -801,7 +622,7 @@ jobs:
|
||||
- 徽章数: ${{ steps.generate_badges.outputs.generated_count }} 个
|
||||
|
||||
🔗 触发提交: ${GITHUB_SHA:0:7}
|
||||
🤖 由 GitHub Actions 自动生成"
|
||||
🤖 由 Gitea Actions 自动生成"
|
||||
|
||||
git commit -m "$COMMIT_MSG"
|
||||
|
||||
@@ -842,7 +663,7 @@ jobs:
|
||||
|
||||
## 🔗 快速链接
|
||||
|
||||
- 📊 [查看详细统计报告](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/${{ env.BADGE_DIR }}/README.md)
|
||||
- 📊 [查看详细统计报告](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/README.md)
|
||||
- 🎨 [浏览徽章文件](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/${{ env.BADGE_DIR }})
|
||||
- 🔧 [查看 Workflow 配置](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ github.ref_name }}/.gitea/workflows/update_stats_badge.yaml)
|
||||
|
||||
@@ -924,7 +745,7 @@ jobs:
|
||||
echo " - 统计分支: ${{ env.BADGE_BRANCH }}"
|
||||
echo ""
|
||||
echo "🔗 查看详细报告:"
|
||||
echo " ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/${{ env.BADGE_DIR }}/README.md"
|
||||
echo " ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/README.md"
|
||||
echo ""
|
||||
echo "🎨 徽章目录:"
|
||||
echo " ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/src/branch/${{ env.BADGE_BRANCH }}/${{ env.BADGE_DIR }}"
|
||||
@@ -957,7 +778,7 @@ jobs:
|
||||
if: always()
|
||||
run: |
|
||||
echo "🧹 清理临时文件..."
|
||||
rm -rf /tmp/lang_stats /tmp/lang_summary.txt /tmp/total_stats*.json
|
||||
rm -rf /tmp/lang_stats /tmp/lang_summary.txt
|
||||
if [ -n "${{ env.JOB_WORKSPACE }}" ] && [ "${{ env.JOB_WORKSPACE }}" != "/" ]; then
|
||||
echo "🧹 清理 Job 工作区: ${{ env.JOB_WORKSPACE }}"
|
||||
rm -rf "${{ env.JOB_WORKSPACE }}"
|
||||
|
||||
Reference in New Issue
Block a user