chore: 迁移独立分支到主分支 #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 更新代码统计 | |
on: | |
push: | |
branches: [ main ] | |
schedule: | |
- cron: '0 0 * * *' # 每天凌晨运行一次 | |
jobs: | |
update-stats: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: 安装 cloc | |
run: sudo apt-get install -y cloc | |
- name: 统计代码行数 | |
id: cloc | |
run: | | |
# 生成统计数据,排除指定的文件和目录 | |
STATS=$(cloc . --exclude-dir=vendor,node_modules,docs,tmp --exclude-ext=mod,sum,md --not-match-f="LICENSE|.gitignore|.dockerignore" --json) | |
# 提取各语言数据 | |
GO_FILES=$(echo $STATS | jq -r '.Go.nFiles // 0') | |
GO_CODE=$(echo $STATS | jq -r '.Go.code // 0') | |
GO_COMMENT=$(echo $STATS | jq -r '.Go.comment // 0') | |
GO_BLANK=$(echo $STATS | jq -r '.Go.blank // 0') | |
DOCKER_FILES=$(echo $STATS | jq -r '.Dockerfile.nFiles // 0') | |
DOCKER_CODE=$(echo $STATS | jq -r '.Dockerfile.code // 0') | |
DOCKER_COMMENT=$(echo $STATS | jq -r '.Dockerfile.comment // 0') | |
DOCKER_BLANK=$(echo $STATS | jq -r '.Dockerfile.blank // 0') | |
YAML_FILES=$(echo $STATS | jq -r '.YAML.nFiles // 0') | |
YAML_CODE=$(echo $STATS | jq -r '.YAML.code // 0') | |
YAML_COMMENT=$(echo $STATS | jq -r '.YAML.comment // 0') | |
YAML_BLANK=$(echo $STATS | jq -r '.YAML.blank // 0') | |
# 计算其他语言 | |
TOTAL_FILES=$(echo $STATS | jq -r '.SUM.nFiles // 0') | |
TOTAL_CODE=$(echo $STATS | jq -r '.SUM.code // 0') | |
TOTAL_COMMENT=$(echo $STATS | jq -r '.SUM.comment // 0') | |
TOTAL_BLANK=$(echo $STATS | jq -r '.SUM.blank // 0') | |
OTHER_FILES=$((TOTAL_FILES - GO_FILES - DOCKER_FILES - YAML_FILES)) | |
OTHER_CODE=$((TOTAL_CODE - GO_CODE - DOCKER_CODE - YAML_CODE)) | |
OTHER_COMMENT=$((TOTAL_COMMENT - GO_COMMENT - DOCKER_COMMENT - YAML_COMMENT)) | |
OTHER_BLANK=$((TOTAL_BLANK - GO_BLANK - DOCKER_BLANK - YAML_BLANK)) | |
# 计算百分比 | |
GO_PERCENT=$(awk "BEGIN {printf \"%.1f%%\", ($GO_CODE / $TOTAL_CODE) * 100}") | |
DOCKER_PERCENT=$(awk "BEGIN {printf \"%.1f%%\", ($DOCKER_CODE / $TOTAL_CODE) * 100}") | |
YAML_PERCENT=$(awk "BEGIN {printf \"%.1f%%\", ($YAML_CODE / $TOTAL_CODE) * 100}") | |
OTHER_PERCENT=$(awk "BEGIN {printf \"%.1f%%\", ($OTHER_CODE / $TOTAL_CODE) * 100}") | |
# 更新中文 README | |
README_CONTENT=$(cat README.md) | |
NEW_TABLE="| 语言 | 文件数 | 代码行数 | 注释行数 | 空白行数 | 占比 |\n|:----:|:------:|:--------:|:--------:|:--------:|:----:|\n| Go | $GO_FILES | $GO_CODE | $GO_COMMENT | $GO_BLANK | $GO_PERCENT |\n| Docker | $DOCKER_FILES | $DOCKER_CODE | $DOCKER_COMMENT | $DOCKER_BLANK | $DOCKER_PERCENT |\n| YAML | $YAML_FILES | $YAML_CODE | $YAML_COMMENT | $YAML_BLANK | $YAML_PERCENT |\n| 其他 | $OTHER_FILES | $OTHER_CODE | $OTHER_COMMENT | $OTHER_BLANK | $OTHER_PERCENT |\n| **总计** | **$TOTAL_FILES** | **$TOTAL_CODE** | **$TOTAL_COMMENT** | **$TOTAL_BLANK** | **100%** |" | |
README_CONTENT=$(echo "$README_CONTENT" | sed -e "/| 语言 | 文件数 | 代码行数 | 注释行数 | 空白行数 | 占比 |/,/\*注:统计数据/c\\$NEW_TABLE\n\n*注:统计数据由 GitHub Actions 自动更新,最后更新于 $(date +"%Y-%m-%d")*\n*排除了 docs、tmp 目录和 go.mod、go.sum、LICENSE、.gitignore、.dockerignore、README.md、README_en.md 文件*") | |
echo "$README_CONTENT" > README.md | |
# 更新英文 README | |
README_EN_CONTENT=$(cat README_en.md) | |
NEW_TABLE_EN="| Language | Files | Code Lines | Comment Lines | Blank Lines | Percentage |\n|:--------:|:-----:|:----------:|:-------------:|:-----------:|:----------:|\n| Go | $GO_FILES | $GO_CODE | $GO_COMMENT | $GO_BLANK | $GO_PERCENT |\n| Docker | $DOCKER_FILES | $DOCKER_CODE | $DOCKER_COMMENT | $DOCKER_BLANK | $DOCKER_PERCENT |\n| YAML | $YAML_FILES | $YAML_CODE | $YAML_COMMENT | $YAML_BLANK | $YAML_PERCENT |\n| Others | $OTHER_FILES | $OTHER_CODE | $OTHER_COMMENT | $OTHER_BLANK | $OTHER_PERCENT |\n| **Total** | **$TOTAL_FILES** | **$TOTAL_CODE** | **$TOTAL_COMMENT** | **$TOTAL_BLANK** | **100%** |" | |
README_EN_CONTENT=$(echo "$README_EN_CONTENT" | sed -e "/| Language | Files | Code Lines | Comment Lines | Blank Lines | Percentage |/,/\*Note: Statistics/c\\$NEW_TABLE_EN\n\n*Note: Statistics are automatically updated by GitHub Actions, last updated on $(date +"%Y-%m-%d")*\n*Excluded docs, tmp directories and go.mod, go.sum, LICENSE, .gitignore, .dockerignore, README.md, README_en.md files*") | |
echo "$README_EN_CONTENT" > README_en.md | |
- name: 提交更改 | |
run: | | |
git config --local user.email "[email protected]" | |
git config --local user.name "GitHub Action" | |
git add README.md README_en.md | |
git commit -m "chore(docs): 更新代码统计报告 [skip ci]" || echo "没有变更需要提交" | |
git push |