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; }