maneshtrader/skills/macos-selfcontained-webapp/scripts/scaffold_web_mac_layout.sh

100 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <repo-root> [app-name]"
echo "Example: $0 ~/Code/trader-app Trader"
exit 1
fi
REPO_ROOT="$1"
APP_NAME="${2:-WebShellApp}"
mkdir -p "$REPO_ROOT/web/src"
mkdir -p "$REPO_ROOT/web/src/web_core"
mkdir -p "$REPO_ROOT/web/src/tests"
mkdir -p "$REPO_ROOT/mac/src/App/EmbeddedBackend"
mkdir -p "$REPO_ROOT/mac/src/App/Help"
mkdir -p "$REPO_ROOT/mac/src/AppTests"
mkdir -p "$REPO_ROOT/mac/src/AppUITests"
mkdir -p "$REPO_ROOT/scripts"
mkdir -p "$REPO_ROOT/docs"
cat > "$REPO_ROOT/docs/architecture.md" <<DOC
# ${APP_NAME} Architecture
- web backend source: ./web/src
- mac shell source: ./mac/src
- embedded backend binary: ./mac/src/App/EmbeddedBackend/WebBackend
- native help page: ./mac/src/App/Help/help.html
DOC
cat > "$REPO_ROOT/scripts/README.build.md" <<DOC
# Build Script Placeholders
Add:
- build_embedded_backend.sh
- build_selfcontained_mac_app.sh
- create_installer_dmg.sh
Suggested script behaviors:
- Discover \`*.xcodeproj\` under \`mac/src\` unless \`MAC_PROJECT_PATH\` is provided.
- Discover scheme via \`xcodebuild -list -json\` unless \`MAC_SCHEME\` is provided.
- Default backend binary name: \`WebBackend\` (override with \`BACKEND_BIN_NAME\`).
- Write DMG artifacts to \`build/dmg/\`.
DOC
cat > "$REPO_ROOT/web/src/ONBOARDING.md" <<DOC
# ${APP_NAME} Onboarding
Add your web help/onboarding content here.
DOC
cat > "$REPO_ROOT/mac/src/App/Help/help.html" <<DOC
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Help</title>
</head>
<body>
<h1>${APP_NAME} Help</h1>
<p>Replace this with your quick start and onboarding content.</p>
</body>
</html>
DOC
cat > "$REPO_ROOT/web/run.sh" <<'DOC'
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VENV_DIR="$ROOT_DIR/.venv"
WEB_SRC_DIR="$ROOT_DIR/web/src"
if [[ ! -d "$VENV_DIR" ]]; then
python3 -m venv "$VENV_DIR"
fi
# shellcheck disable=SC1091
source "$VENV_DIR/bin/activate"
pip install -r "$WEB_SRC_DIR/requirements.txt"
exec streamlit run "$WEB_SRC_DIR/app.py"
DOC
chmod +x "$REPO_ROOT/web/run.sh"
touch "$REPO_ROOT/.gitignore"
for line in "build/" "*.dmg" "rw.*.dmg"; do
if ! grep -Fxq "$line" "$REPO_ROOT/.gitignore"; then
printf "%s\n" "$line" >> "$REPO_ROOT/.gitignore"
fi
done
echo "Created layout for ${APP_NAME}:"
echo "- $REPO_ROOT/web/src"
echo "- $REPO_ROOT/mac/src"
echo "- $REPO_ROOT/scripts"
echo "- $REPO_ROOT/docs"
echo "- $REPO_ROOT/.gitignore (updated with build/DMG ignore rules)"