Files
soul-yongping/scripts/autosysc-weixin.py

137 lines
4.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Soul 创业派对 - 小程序一键上传项目根目录运行
**当前仓库 miniprogram/ 目录的小程序代码**完整上传到微信公众平台
AppID项目路径等见 miniprogram/project.config.json .cursorrules
说明
- 本脚本是把仓库里已有小程序代码原样上传不是 Web 站转成小程序
- WebNext.js与小程序WXML/WXSS是两套技术栈无法 1:1 自动转换
本仓库已提供原生小程序实现miniprogram/本脚本负责将其上传到公众号后台
使用在项目根目录
python scripts/autosysc-weixin.py
# 版本号与描述在 miniprogram/upload.js 或 上传小程序.py 的 CONFIG 中修改
前置条件
- miniprogram/private.key在微信公众平台开发管理 开发设置 小程序代码上传密钥生成并下载重命名为 private.key 放到 miniprogram/
- 已安装微信开发者工具可选用于 CLI 方式 Node.js + miniprogram-ci用于 CI 方式
"""
from __future__ import print_function
import sys
import io
import json
import subprocess
import argparse
from pathlib import Path
# 设置 stdout 编码为 UTF-8解决 Windows 终端编码问题
if sys.platform == "win32":
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
# 项目根目录
ROOT = Path(__file__).resolve().parent.parent
MINIPROGRAM_DIR = ROOT / "miniprogram"
UPLOAD_SCRIPT = MINIPROGRAM_DIR / "上传小程序.py"
def get_appid():
"""从 miniprogram/project.config.json 或 .cursorrules 读取 AppID"""
config_file = MINIPROGRAM_DIR / "project.config.json"
if config_file.exists():
try:
with open(config_file, "r", encoding="utf-8") as f:
data = json.load(f)
appid = data.get("appid", "").strip()
if appid:
return appid
except Exception:
pass
# 与 .cursorrules 中一致
return "wxb8bbb2b10dec74aa"
def check_miniprogram():
"""检查 miniprogram 目录和必要文件"""
if not MINIPROGRAM_DIR.is_dir():
print("❌ 未找到 miniprogram 目录: %s" % MINIPROGRAM_DIR)
return False
app_json = MINIPROGRAM_DIR / "app.json"
if not app_json.exists():
print("❌ miniprogram 目录下未找到 app.json请确认是否为小程序项目根目录")
return False
return True
def check_private_key():
"""检查上传密钥是否存在"""
key_file = MINIPROGRAM_DIR / "private.key"
if key_file.exists():
return True
print("❌ 未找到上传密钥: miniprogram/private.key")
print("")
print("请按以下步骤获取:")
print(" 1. 打开 https://mp.weixin.qq.com/ 登录小程序后台")
print(" 2. 开发管理 → 开发设置 → 小程序代码上传密钥")
print(" 3. 点击「生成」并下载密钥文件")
print(" 4. 将 private.*.key 重命名为 private.key")
print(" 5. 放到项目 miniprogram/ 目录下")
print("")
return False
def main():
parser = argparse.ArgumentParser(description="小程序代码一键上传到微信公众平台")
parser.parse_args()
print("=" * 60)
print(" Soul 创业派对 - 小程序一键上传")
print("=" * 60)
print(" 项目根目录: %s" % ROOT)
print(" 小程序目录: %s" % MINIPROGRAM_DIR)
print(" AppID: %s" % get_appid())
print("=" * 60)
if not check_miniprogram():
return 1
if not check_private_key():
return 1
if not UPLOAD_SCRIPT.exists():
print("❌ 未找到上传脚本: %s" % UPLOAD_SCRIPT)
return 1
print("")
print("🚀 调用 miniprogram/上传小程序.py 执行上传...")
print("")
cmd = [sys.executable, str(UPLOAD_SCRIPT)]
try:
r = subprocess.run(
cmd,
cwd=str(MINIPROGRAM_DIR),
timeout=300,
)
if r.returncode == 0:
print("")
print(" 后台提交审核: https://mp.weixin.qq.com/ → 版本管理 → 开发版本 → 提交审核")
print("=" * 60)
return 0
return r.returncode
except subprocess.TimeoutExpired:
print("❌ 上传超时(超过 5 分钟)")
return 1
except Exception as e:
print("❌ 执行失败: %s" % e)
return 1
if __name__ == "__main__":
sys.exit(main())