#!/bin/bash # publish_sdk.sh — 把主仓的公开 SDK 内容增量同步到公开 SDK 仓 MeowOS-SDK。 # # ============ 背景 ============ # 公开仓:ssh://git@git.yeij.top:2222/AskaEth/MeowOS-SDK.git(**MIT**;面向第三方开发者)。 # 仅含公开内容:sdk/(meow_ui)+ examples/hello/ + docs/ + README + LICENSE + .gitignore; # 不含主仓系统组件(launcher/amsd/audiod/svc_*)、固件、签名工具、密钥。 # # 由本仓经 git subtree split 拆出(顶层布局与主仓 patch_v2 不同): # sdk/ ← 本仓 patch_v2/sdk/ # examples/hello/ ← 本仓 patch_v2/hello_app/ # 顶层 docs/ + README + LICENSE + .gitignore 为手工维护(初始拆仓与后续改动见下)。 # # ⚠️ 差异声明:公开仓内的 sdk/build_sdk.sh、examples/hello/build_hello.sh 已改**自包含** # (meow_ipc.h / meow_font.h / meow_notif.h / meow_font.c 均 vendored 进 sdk/,不依赖 # 本仓 meow_launcherd/;工具链默认 $HOME/Project/R3ProII/.tools/zig-mipsel-cc,可用 # MEOW_CC / MEOW_SYSROOT 覆盖)。故**增量同步只推 sdk/ 与 examples/hello/ 的源码子树**, # build_sdk.sh / build_hello.sh 的本地改动需单独留意(若公开仓改过,pull 会合并冲突)。 # ============ 初始拆仓(已执行一次,记录备查) ============ # # 主仓侧:subtree split 出两个分支 # git subtree split --prefix=patch_v2/sdk -b pub/sdk # git subtree split --prefix=patch_v2/hello_app -b pub/hello # # 公开仓侧(~git init -b main,提交 README/LICENSE/.gitignore/docs 作根,然后): # git fetch <主仓> +refs/heads/pub/sdk:refs/heads/pub/sdk +refs/heads/pub/hello:refs/heads/pub/hello # git subtree add --prefix=sdk pub/sdk # git subtree add --prefix=examples/hello pub/hello # # 之后在公开仓做适配 commit:剔除构建产物/宿主测试二进制、vendored 依赖、改写脚本。 # ============ 增量同步(主仓 sdk/ 更新后再推) ============ # 用法:先保证主仓 patch_v2/sdk 的改动已 commit,然后: # bash scripts/publish_sdk.sh [--push] # 脚本会在主仓重跑 split,再进公开仓 subtree pull 两个子树;加 --push 则把公开仓 push 到 Gitea。 # 前提:Gitea 已建 public 仓 AskaEth/MeowOS-SDK(未建:push-to-create 默认关闭,需手动建)。 set -euo pipefail MAIN_REPO="${MAIN_REPO:-$(cd "$(dirname "$0")/.." && pwd)}" # 主仓(本仓) SDK_REPO="${SDK_REPO:-$HOME/Project/MeowOS-SDK}" # 公开仓本地路径 UPSTREAM="${UPSTREAM:-upstream}" # 公开仓里指向「主仓」的 remote 名(非 origin) SDK_URL="ssh://git@git.yeij.top:2222/AskaEth/MeowOS-SDK.git" # 公开仓远端 DO_PUSH=0; [ "${1:-}" = "--push" ] && DO_PUSH=1 [ -d "$SDK_REPO" ] || { echo "❌ 公开仓不存在: $SDK_REPO"; echo " 请先 Gitea 建 $SDK_URL 并 git clone 到 $SDK_REPO"; exit 1; } # 0) 公开仓配 upstream(指向主仓,供 subtree pull 取 split 分支) cd "$SDK_REPO" if ! git remote get-url "$UPSTREAM" >/dev/null 2>&1; then git remote add "$UPSTREAM" "$MAIN_REPO" echo " ↑ 公开仓已加 remote $UPSTREAM = $MAIN_REPO" fi # 1) 主仓侧:重新 subtree split(产出最新 pub/sdk、pub/hello) echo "== [主仓] subtree split ==" ( cd "$MAIN_REPO" && \ git subtree split --prefix=patch_v2/sdk -b pub/sdk && \ git subtree split --prefix=patch_v2/hello_app -b pub/hello ) # 2) 公开仓侧:subtree pull 两个子树(把主仓新提交合进 sdk/、examples/hello/) echo "== [公开仓] subtree pull sdk ==" git subtree pull --prefix=sdk "$UPSTREAM" pub/sdk echo "== [公开仓] subtree pull examples/hello ==" git subtree pull --prefix=examples/hello "$UPSTREAM" pub/hello echo "== 完成。git status 如下,请人工检查是否一致到期待内容: ==" git status --short if [ "$DO_PUSH" = 1 ]; then echo "== push 到 $SDK_URL ==" git push origin main fi echo "== 若 docs/README/LICENSE 也要同步:手动拷贝主仓 docs/APP_DEV_GUIDE.md 与 MEOW_APP_SDK.md 的**公开改写版**并 commit(公开仓内这两份已改写为自包含/注明主仓内幕)。=="