- 分支管理新增「分支 / Tag」类型选择,Tag 存于 config["tags"],与分支不可重名 - 每个 Tag 与分支一样拥有同名独立版本轨道,默认上架轨 - 打包页按「分支」「Tag」分组选择;任务新增 ref_type 字段记录引用类型 - Tag 打包时 fetch --tags --force 后以游离 HEAD 检出 refs/tags/<tag> - 历史记录与下载页按类型显示「分支」或「Tag」 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
iOS Build Server
FastAPI + Vue 3 iOS app auto-packaging service. Supports Ad_Hoc and App_Store builds with web UI, real-time logs, multi-user auth, and health monitoring.
Tech Stack
- Backend: Python 3.9+, FastAPI, SQLAlchemy (SQLite), JWT auth
- Frontend: Vue 3, Vite, Vue Router
- Tests: pytest (backend), vitest (frontend)
- Deploy: macOS launchd, deploy.sh management script
Key Commands
./start.sh # Dev mode (backend + frontend hot reload)
./deploy.sh build # Install deps + build frontend
./deploy.sh start/stop/restart/status
./deploy.sh test # Run all tests (backend + frontend)
Architecture
backend/routers/— API routes: auth, users, config, apps, tasksbackend/services/— build_service (packaging), build_queue (async queue), log_streamer (WebSocket)backend/deps.py— JWT auth dependency used by all protected routesbackend/config.py— loads .env, defines all config constantsfrontend/src/views/— BuildView, HistoryView, ConfigViewconfig.json— runtime config (apps, schemes, servers, upload, branches, versions) managed via web UI- Versions are per-branch: every branch owns a track in
config["versions"]["tracks"], named after the branch (master/main keeps the historical namerelease);config["branch_track"]maps branch → track name, and each track'skindisrelease(build number auto-increments on App_Store) orfeature(never increments) - Tags are buildable refs too:
config["tags"](names never collide with branches), tracked inbranch_tracklike branches (default kindrelease); tasks store the name inbranchplusref_type(branch/tag), and tag builds check outrefs/tags/<tag>detached
Conventions
- All backend routes require JWT auth except
/api/auth/loginand/api/health - Admin-only routes: user management (
/api/users/*) and all of/api/config/*except/api/config/apps* - Config stored in
config.json(apps/schemes/servers),.env(infra), SQLitebuild_configtable (build settings) - Chinese UI and documentation throughout