Multi-customer config system: - CUSTOMER env var selects customer (tianpu/zpark) - customers/tianpu/config.yaml — Tianpu branding, collectors, features - customers/zpark/config.yaml — Z-Park branding, Sungrow collector - GET /api/v1/branding endpoint for customer-specific branding - main.py loads customer config for app title, CORS, logging - Collector manager filters by customer's enabled collectors Z-Park (中关村医疗器械园) support: - Sungrow iSolarCloud API collector (sungrow_collector.py) - Z-Park device definitions (10 inverters, 8 combiner boxes, 22+ buildings) - Z-Park TOU pricing config (Beijing 2026 rates) - Z-Park seed script (seed_zpark.py) Gitea migration scripts (Mac Studio → labmac3): - 5 migration scripts + README in scripts/gitea-migration/ - Creates 3-repo structure: ems-core, tp-ems, zpark-ems Version: v1.0.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
77 lines
2.7 KiB
Bash
77 lines
2.7 KiB
Bash
#!/bin/bash
|
|
# Run this AFTER Gitea is running on labmac3
|
|
# Creates the 3-repo structure: ems-core, tp-ems, zpark-ems
|
|
# Usage: bash 05_create_repos.sh
|
|
|
|
GITEA_URL="http://192.168.1.77:3300"
|
|
ADMIN_USER="tianpu"
|
|
ADMIN_PASS="TianpuGit2026!"
|
|
|
|
echo "=== Creating 3-repo structure on Gitea ==="
|
|
|
|
# Get admin token
|
|
TOKEN=$(curl -s -X POST "$GITEA_URL/api/v1/users/$ADMIN_USER/tokens" \
|
|
-u "$ADMIN_USER:$ADMIN_PASS" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"name\":\"setup-$(date +%s)\",\"scopes\":[\"all\"]}" | python -c "import sys,json; print(json.load(sys.stdin).get('sha1',''))")
|
|
|
|
echo "Token: ${TOKEN:0:8}..."
|
|
|
|
# Create ems-core repo
|
|
echo ""
|
|
echo "Creating ems-core repo..."
|
|
curl -s -X POST "$GITEA_URL/api/v1/orgs/tianpu/repos" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "ems-core",
|
|
"description": "EMS标准产品核心代码 - 共享后端/前端/数据模型",
|
|
"private": false,
|
|
"default_branch": "main"
|
|
}' | python -c "import sys,json; d=json.load(sys.stdin); print(f' Created: {d.get(\"full_name\",\"ERROR\")}') if 'id' in d else print(f' {d.get(\"message\",d)}')"
|
|
|
|
# Create tp-ems repo
|
|
echo ""
|
|
echo "Creating tp-ems repo..."
|
|
curl -s -X POST "$GITEA_URL/api/v1/orgs/tianpu/repos" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "tp-ems",
|
|
"description": "天普大兴园区EMS - 客户定制项目",
|
|
"private": false,
|
|
"default_branch": "main"
|
|
}' | python -c "import sys,json; d=json.load(sys.stdin); print(f' Created: {d.get(\"full_name\",\"ERROR\")}') if 'id' in d else print(f' {d.get(\"message\",d)}')"
|
|
|
|
# Create zpark-ems repo
|
|
echo ""
|
|
echo "Creating zpark-ems repo..."
|
|
curl -s -X POST "$GITEA_URL/api/v1/orgs/tianpu/repos" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "zpark-ems",
|
|
"description": "中关村医疗器械园EMS - 客户定制项目",
|
|
"private": false,
|
|
"default_branch": "main"
|
|
}' | python -c "import sys,json; d=json.load(sys.stdin); print(f' Created: {d.get(\"full_name\",\"ERROR\")}') if 'id' in d else print(f' {d.get(\"message\",d)}')"
|
|
|
|
# Add all developers as collaborators to all repos
|
|
echo ""
|
|
echo "Adding collaborators..."
|
|
for REPO in ems-core tp-ems zpark-ems; do
|
|
for USER in duwenbo hanbing zhangshiyue wangliwei yangruixiao; do
|
|
curl -s -o /dev/null -X PUT "$GITEA_URL/api/v1/repos/tianpu/$REPO/collaborators/$USER" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"permission": "write"}'
|
|
done
|
|
echo " $REPO: all 5 developers added"
|
|
done
|
|
|
|
echo ""
|
|
echo "=== All 3 repos created ==="
|
|
echo " $GITEA_URL/tianpu/ems-core"
|
|
echo " $GITEA_URL/tianpu/tp-ems"
|
|
echo " $GITEA_URL/tianpu/zpark-ems"
|