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

137 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())