From 00c351d40e3f81da79d47d5a166d1b1000da42ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn>
Date: Mon, 11 Aug 2025 14:24:52 +0800
Subject: [PATCH] Update assets.yml
---
.github/workflows/assets.yml | 51 ++++++++++++++++++++++++------------
1 file changed, 34 insertions(+), 17 deletions(-)
diff --git a/.github/workflows/assets.yml b/.github/workflows/assets.yml
index c90feaaf9..bdbad9e52 100644
--- a/.github/workflows/assets.yml
+++ b/.github/workflows/assets.yml
@@ -35,34 +35,45 @@ jobs:
echo "Files copied to temp directory (before processing):"
ls -la temp-b-repo/out/assets
- # 安装lxml库(用于精确控制XML格式)
+ # 安装lxml库
pip install lxml
- # 生成Python脚本(使用lxml删除注释并控制格式)
+ # 生成Python脚本(修复XML头和注释删除问题)
echo "from lxml import etree" > remove_xml_comments.py
echo "import os" >> remove_xml_comments.py
echo "" >> remove_xml_comments.py
echo "def remove_comments_from_xml(file_path):" >> remove_xml_comments.py
echo " try:" >> remove_xml_comments.py
- echo " # 解析XML并保留注释(禁用自动移除注释)" >> remove_xml_comments.py
- echo " parser = etree.XMLParser(remove_comments=False)" >> remove_xml_comments.py
+ echo " # 解析XML并保留原始声明和注释" >> remove_xml_comments.py
+ echo " parser = etree.XMLParser(remove_comments=False, strip_cdata=False)" >> remove_xml_comments.py
echo " tree = etree.parse(file_path, parser=parser)" >> remove_xml_comments.py
echo " root = tree.getroot()" >> remove_xml_comments.py
echo "" >> remove_xml_comments.py
- echo " # 递归查找并删除所有注释节点" >> remove_xml_comments.py
- echo " for comment in root.xpath('//comment()'):" >> remove_xml_comments.py
- echo " parent = comment.getparent()" >> remove_xml_comments.py
- echo " if parent is not None:" >> remove_xml_comments.py
- echo " parent.remove(comment)" >> remove_xml_comments.py
+ echo " # 关键修复:删除所有层级的注释(包括非root区域)" >> remove_xml_comments.py
+ echo " # 遍历所有节点,强制检查注释类型" >> remove_xml_comments.py
+ echo " for element in root.iter():" >> remove_xml_comments.py
+ echo " # 遍历子节点的副本,避免修改时索引错乱" >> remove_xml_comments.py
+ echo " for child in list(element):" >> remove_xml_comments.py
+ echo " if child.tag is etree.Comment:" >> remove_xml_comments.py
+ echo " element.remove(child)" >> remove_xml_comments.py
echo "" >> remove_xml_comments.py
- echo " # 保存修改后的文件,严格控制格式" >> remove_xml_comments.py
- echo " etree.ElementTree(root).write(" >> remove_xml_comments.py
- echo " file_path," >> remove_xml_comments.py
- echo " encoding='utf-8'," >> remove_xml_comments.py
- echo " xml_declaration=True," >> remove_xml_comments.py
- echo " pretty_print=False, # 禁用自动格式化(避免额外空格)" >> remove_xml_comments.py
- echo " method='xml' # 确保自闭合标签格式为 而非 " >> remove_xml_comments.py
- echo " )" >> remove_xml_comments.py
+ echo " # 保存修改后的文件(修复XML头缺失问题)" >> remove_xml_comments.py
+ echo " # 获取原始XML声明(如果存在)" >> remove_xml_comments.py
+ echo " xml_declaration = tree.docinfo.xml_declaration" >> remove_xml_comments.py
+ echo " encoding = tree.docinfo.encoding or 'utf-8'" >> remove_xml_comments.py
+ echo "" >> remove_xml_comments.py
+ echo " # 写入文件时强制保留XML声明" >> remove_xml_comments.py
+ echo " with open(file_path, 'wb') as f:" >> remove_xml_comments.py
+ echo " # 手动写入XML声明(确保不缺失)" >> remove_xml_comments.py
+ echo " if xml_declaration or xml_declaration is None:" >> remove_xml_comments.py
+ echo " f.write(f'\n'.encode(encoding))" >> remove_xml_comments.py
+ echo " # 写入XML内容,控制自闭合标签格式" >> remove_xml_comments.py
+ echo " tree.write(f," >> remove_xml_comments.py
+ echo " encoding=encoding," >> remove_xml_comments.py
+ echo " pretty_print=False," >> remove_xml_comments.py
+ echo " method='xml'," >> remove_xml_comments.py
+ echo " xml_declaration=False # 已手动处理声明,避免重复" >> remove_xml_comments.py
+ echo " )" >> remove_xml_comments.py
echo " print(f'Processed: {file_path}')" >> remove_xml_comments.py
echo " except Exception as e:" >> remove_xml_comments.py
echo " print(f'Error processing {file_path}: {e}')" >> remove_xml_comments.py
@@ -101,6 +112,12 @@ jobs:
echo "Files in B repo target directory after copy:"
ls -la out/assets
+ # 检查是否有实际变更
+ if git diff --quiet -- out/assets; then
+ echo "No changes to sync. Exiting."
+ exit 0
+ fi
+
git add out/assets
git commit -m "Sync assets (no comments): $(date +'%Y-%m-%d %H:%M:%S')"
git push origin $B_BRANCH || { echo "Failed to push to B repo"; exit 1; }