137 lines
4.5 KiB
Python
137 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
Soul 创业派对 - 小程序一键上传(项目根目录运行)
|
||
|
||
将**当前仓库 miniprogram/ 目录的小程序代码**完整上传到微信公众平台。
|
||
AppID、项目路径等见 miniprogram/project.config.json 或 .cursorrules。
|
||
|
||
说明:
|
||
- 本脚本是「把仓库里已有小程序代码原样上传」,不是「把 Web 站转成小程序」。
|
||
- Web(Next.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())
|