- 移除了 .gitlab-ci.yml 中的安全扫描配置 - 调整了 CI/CD 流水线的阶段 - 优化了 update_files.py 脚本的输出信息 - 添加了脚本执行开始的提示信息 - 修改了没有更新文件时的提示信息
84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
#!/usr/bin/env python
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import yaml
|
|
|
|
|
|
def download_file(url):
|
|
"""使用 curl 下载文件内容"""
|
|
result = subprocess.run(["curl", "-s", url], capture_output=True, text=True)
|
|
if result.returncode != 0:
|
|
print(f"❌ 下载 {url} 时出错,跳过。")
|
|
return None
|
|
return result.stdout
|
|
|
|
|
|
def main():
|
|
# 读取 list.yaml
|
|
try:
|
|
with open("list.yaml", "r", encoding="utf-8") as f:
|
|
items = yaml.safe_load(f)
|
|
except FileNotFoundError:
|
|
print("❌ list.yaml 文件不存在。")
|
|
sys.exit(0)
|
|
|
|
print("🚀 开始更新文件")
|
|
modified = False
|
|
|
|
for item in items:
|
|
file_path = item.get("file")
|
|
source = item.get("source")
|
|
if not file_path or not source:
|
|
print("条目缺少 file 或 source 字段,跳过。")
|
|
continue
|
|
|
|
print(f"处理 {file_path} 从 {source}")
|
|
new_content = download_file(source)
|
|
if new_content is None:
|
|
# 如果下载失败,继续处理下一个文件
|
|
continue
|
|
|
|
# 去掉前导斜杠(如果希望相对于仓库根目录存放,也可以自行调整目录结构)
|
|
rel_path = file_path.lstrip("/")
|
|
# 创建必要目录
|
|
os.makedirs(os.path.dirname(rel_path), exist_ok=True)
|
|
|
|
# 如果文件存在,检查内容是否已更新
|
|
if os.path.exists(rel_path):
|
|
with open(rel_path, "r", encoding="utf-8") as f:
|
|
old_content = f.read()
|
|
if old_content == new_content:
|
|
print(f"{rel_path} 内容未改变。")
|
|
continue
|
|
|
|
with open(rel_path, "w", encoding="utf-8") as f:
|
|
f.write(new_content)
|
|
print(f"🚀 更新了 {rel_path}")
|
|
modified = True
|
|
|
|
# 如果有修改则提交到仓库
|
|
if modified:
|
|
# 配置 git 用户信息
|
|
subprocess.run(["git", "config", "--global", "user.email", "cicd@sugarscat.cn"], check=True)
|
|
subprocess.run(["git", "config", "--global", "user.name", "CI/CD"], check=True)
|
|
|
|
repo_url = os.environ.get("THE_REPO")
|
|
# 将 https:// 替换为 https://oauth2:token@ 形式
|
|
token = os.environ.get("REPO_TOKEN")
|
|
new_repo_url = repo_url.replace("https://", f"https://oauth2:{token}@")
|
|
subprocess.run(["git", "remote", "set-url", "origin", new_repo_url], check=True)
|
|
subprocess.run(["git", "checkout", "-B", "main"], check=True)
|
|
subprocess.run(["git", "add", "."], check=True)
|
|
commit_message = "自动更新:从 list.yaml 下载最新文件"
|
|
# 如果没有变更,则 git commit 会返回非零状态,可用 || true 处理
|
|
subprocess.run(["git", "commit", "-m", commit_message], check=False)
|
|
subprocess.run(["git", "push", "origin", "main"], check=True)
|
|
else:
|
|
print("📦 没有需要更新的文件。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|