72 lines
4.1 KiB
Bash
72 lines
4.1 KiB
Bash
#!/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(公开仓内这两份已改写为自包含/注明主仓内幕)。=="
|