Add project workspace init script

This commit is contained in:
hotwa
2026-03-18 00:36:10 +08:00
parent f635fff3e6
commit 13285e7a8b
2 changed files with 141 additions and 0 deletions

View File

@@ -59,3 +59,8 @@
- 若 Pixi 失效或不适用,可使用 UV 作为后备方案
- 默认应把 Pixi 作为首选项目环境管理器
- 已新增长期决策文档:`shared/long-term/decisions/project-workspace-layout.md`
- 已新增可复用初始化脚本:`scripts/init-project-workspace.sh`
- 用于快速创建标准项目容器目录
- 会初始化 `repos/``worktrees/``shared/``docs/``scripts/``tmp/`
- 会生成项目级 `docs/PROJECT-RULES.md`
- 该规则文档内已包含 Pixi 优先、`.pixi/` 不跟踪、UV 作为后备方案的说明

136
scripts/init-project-workspace.sh Executable file
View File

@@ -0,0 +1,136 @@
#!/usr/bin/env bash
set -euo pipefail
PROJECT_ROOT_BASE="${PROJECT_ROOT_BASE:-$HOME/project/workspace}"
usage() {
cat <<'EOF'
Usage:
init-project-workspace.sh <project-name>
Description:
Create a standard project container under ~/project/workspace with:
repos/
worktrees/
shared/
docs/
scripts/
tmp/
Also creates:
- docs/PROJECT-RULES.md
- .gitignore at project container root
- shared/.gitkeep
- tmp/.gitkeep
Notes:
- Project repos inside repos/ should prefer Pixi for environment management.
- Each repo should include pixi.toml.
- .pixi/ must not be tracked by git.
- UV may be used only as a fallback when Pixi is not suitable.
EOF
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 1 ]]; then
usage
exit 0
fi
PROJECT_NAME="$1"
PROJECT_DIR="$PROJECT_ROOT_BASE/$PROJECT_NAME"
mkdir -p \
"$PROJECT_DIR/repos" \
"$PROJECT_DIR/worktrees" \
"$PROJECT_DIR/shared" \
"$PROJECT_DIR/docs" \
"$PROJECT_DIR/scripts" \
"$PROJECT_DIR/tmp"
cat > "$PROJECT_DIR/.gitignore" <<'EOF'
# macOS
.DS_Store
# Editor / IDE
.vscode/
.idea/
# Logs / temp
*.log
*.tmp
# Local scratch / caches
.cache/
EOF
cat > "$PROJECT_DIR/docs/PROJECT-RULES.md" <<'EOF'
# Project Rules
## Workspace Layout
This project follows the standard OpenClaw multi-machine project container layout:
```text
<project-root>/
├── repos/
├── worktrees/
├── shared/
├── docs/
├── scripts/
└── tmp/
```
## Environment Management
Default rule:
- Prefer **Pixi** for per-project environment management
- Each repo should include `pixi.toml`
- If reproducibility is needed, include `pixi.lock`
- Do **not** track `.pixi/`
- Use **UV** only when Pixi is unsuitable or blocked
Recommended `.gitignore` entries inside each repo:
```gitignore
.pixi/
.venv/
__pycache__/
node_modules/
```
## Multi-Machine Collaboration
- `mac-5` = brain → orchestration / review / final integration
- `mac-6` = hands → execution / implementation / build
- `mac-7` = eyes → browser / verification / acceptance
Collaboration model:
- Each machine keeps its own local project copy
- Code sync uses git remote
- Active `.git` / `git worktree` metadata is not treated as file-sync state
- Final integration and merge should usually happen on `mac-5`
## Worktree Convention
Recommended layout:
```text
worktrees/<repo-name>/<task-or-branch-name>
```
Examples:
- `worktrees/backend/feat-auth`
- `worktrees/frontend/feat-dashboard`
- `worktrees/backend/integration-merge`
EOF
touch "$PROJECT_DIR/shared/.gitkeep" "$PROJECT_DIR/tmp/.gitkeep"
echo "Created project container: $PROJECT_DIR"
echo "Next steps:"
echo " 1) Put real repos under: $PROJECT_DIR/repos"
echo " 2) Put parallel worktrees under: $PROJECT_DIR/worktrees"
echo " 3) For each repo, prefer Pixi with pixi.toml and ignore .pixi/"