92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # 设置默认值
 | |
| TARGET_BRANCH=${targetBranch}
 | |
| CI_MODE=${CI:-false}
 | |
| 
 | |
| # Specify the pattern you want to exclude, using *space* as the separator
 | |
| EXCLUDE_PATTERNS=(
 | |
|   '**/pnpm-lock.yaml'
 | |
|   'packages/arch/bot-api/src/auto-generate/**'
 | |
|   'apps/bot-op/src/services/bam-auto-generate/**'
 | |
|   'apps/prompt-platform/src/services/auto-generate/**'
 | |
|   "**/lib/**"
 | |
|   "**/.*/**"
 | |
|   '**/__tests__/**'
 | |
|   '**/__test__/**'
 | |
|   "**/__mocks__/**"
 | |
|   "**/__mock__/**"
 | |
|   "**/*.test.*/**"
 | |
|   "**/*.spec.*/**"
 | |
|   "**/__snapshots__/**"
 | |
|   "**/*.snap"
 | |
|   '**/e2e/**'
 | |
|   'common/changes/**'
 | |
|   'apps/fornax/**',
 | |
|   "packages/arch/semi-theme-hand01"
 | |
| )
 | |
| 
 | |
| for pattern in "${EXCLUDE_PATTERNS[@]}"; do
 | |
|   EXCLUDE_STRING+=":(exclude)$pattern "
 | |
| done
 | |
| 
 | |
| if [ "$CI_MODE" = true ]; then
 | |
|   files=$(git diff --name-only --diff-filter=AM "origin/$TARGET_BRANCH..." $EXCLUDE_STRING)
 | |
| else
 | |
|   files=$(git diff --name-only --diff-filter=AM --cached $EXCLUDE_STRING)
 | |
| fi
 | |
| 
 | |
| # 体积限制为512KB
 | |
| size_limit=$((512))
 | |
| large_files_info=""
 | |
| 
 | |
| IFS=$'\n' # 处理文件名存在空格情况
 | |
| for file in $files; do
 | |
|   file_size=$(wc -c <"$file" 2>/dev/null)
 | |
|   if [ $? -ne 0 ]; then
 | |
|     echo "错误: 无法获取文件 '$file' 的大小"
 | |
|     continue
 | |
|   fi
 | |
|   file_size_kb=$((file_size / 1024))
 | |
|   echo "$file file size is $file_size_kb KB"
 | |
|   if [ "$file_size_kb" -gt "$size_limit" ]; then
 | |
|     large_files_info+="- \`$file\` ($file_size_kb KB)\n"
 | |
|   fi
 | |
| done
 | |
| unset IFS
 | |
| 
 | |
| output_conclusion() {
 | |
|   local conclusion="$1"
 | |
|   echo "$conclusion" >check-file-size.log
 | |
|   echo "::update-check-run::check-file-size.log"
 | |
| }
 | |
| 
 | |
| if [ -n "$large_files_info" ]; then
 | |
|   if [ "$CI_MODE" = true ]; then
 | |
|     CONCLUSION="{
 | |
|       \"name\": \"文件体积\",
 | |
|       \"conclusion\": \"failed\",
 | |
|       \"output\": {
 | |
|         \"summary\": \"<h1>错误: 文件体积过大</h1> <br />  以下文件体积超过限制 (${size_limit}KB): \\n \\n $large_files_info  \\n \\n <br /> 你可以将资源上传到CDN并通过URL使用。详情请参考此[文档](https://bytedance.larkoffice.com/wiki/MjoIwfyGyiVCBFkBgnXc8LFTniX)。<br /> 如遇紧急情况,可以联系 [@fanwenjie.fe](https://code.byted.org/fanwenjie.fe) 跳过此错误。\"
 | |
|       }
 | |
|     }"
 | |
|     output_conclusion "$CONCLUSION"
 | |
|   else
 | |
|     echo "错误: 以下文件体积超过限制 (${size_limit}KB):"
 | |
|     echo -e "$large_files_info"
 | |
|     echo "请将大文件上传到CDN并通过URL使用。详情请参考: https://bytedance.larkoffice.com/wiki/MjoIwfyGyiVCBFkBgnXc8LFTniX"
 | |
|     exit 1
 | |
|   fi
 | |
| else
 | |
|   if [ "$CI_MODE" = true ]; then
 | |
|     CONCLUSION="{
 | |
|       \"name\": \"文件体积\",
 | |
|       \"conclusion\": \"success\",
 | |
|       \"output\": {
 | |
|         \"summary\": \"GOOD\"
 | |
|       }
 | |
|     }"
 | |
|     output_conclusion "$CONCLUSION"
 | |
|   fi
 | |
| fi
 |