# -*- coding: utf-8 -*- """REQ-通用-006 预生产测试通道 — H5 版本化升级 v20260808 -> v20260811(幂等)""" import shutil import sys NGINX_CONF = "/opt/wecom-it-desk/nginx/nginx.conf" BAK = "/opt/wecom-it-desk/nginx/nginx.conf.bak-h5v20260811-20260811" NEW_VER = "v20260811" OLD_VER = "v20260808" def build_ver_block(prefix: str) -> str: return f"""location /{prefix}/{NEW_VER}/ {{ alias /usr/share/nginx/html/h5/; index index.html; try_files $uri /{prefix}/{NEW_VER}/index.html; add_header Cache-Control "no-store" always; add_header Strict-Transport-Security "max-age=31536000" always; add_header X-Frame-Options "SAMEORIGIN" always; }} """ def main() -> int: with open(NGINX_CONF, encoding="utf-8") as f: src = f.read() if NEW_VER in src: print("ALREADY_EXISTS") return 0 shutil.copy2(NGINX_CONF, BAK) # 1. 插 /h5/v20260811/ 与 /itservice/v20260811/ 块(在各自 v20260808 块后) for prefix in ("h5", "itservice"): anchor_old = f"location /{prefix}/{OLD_VER}/ {{\n" anchor_tail = "add_header X-Frame-Options \"SAMEORIGIN\" always;\n}\n" i = src.find(anchor_old) if i < 0: print(f"ANCHOR_NOT_FOUND: {prefix}/{OLD_VER}") return 1 j = src.find(anchor_tail, i) if j < 0: print(f"TAIL_NOT_FOUND: {prefix}/{OLD_VER}") return 1 j += len(anchor_tail) src = src[:j] + build_ver_block(prefix) + src[j:] # 2. 生产 server 的 go 302 重指新版本(替换第一次出现的 return 302) for prefix in ("h5", "itservice"): old_ret = f"return 302 /{prefix}/{OLD_VER}/$is_args$args;" new_ret = f"return 302 /{prefix}/{NEW_VER}/$is_args$args;" if old_ret in src: src = src.replace(old_ret, new_ret, 1) else: print(f"GO_RETURN_NOT_FOUND: {prefix}") return 1 with open(NGINX_CONF, "w", encoding="utf-8") as f: f.write(src) print("H5_VERSION_UPGRADED_OK") return 0 if __name__ == "__main__": sys.exit(main())