#!/usr/bin/env bash # # Single source of truth for optimization project scaffolding. # # Usage: # bash scripts/scaffold.sh # # Called by: # - make bootstrap ORG=roboflow PROJECTS="supervision" # - .claude/hooks/session-start.sh (auto-scaffolds .codeflash/{teammember}/{org}/{project}/) set -euo pipefail ORG="${1:?Usage: $0 }" PROJECT="${2:?Usage: $0 }" DEST="${3:?Usage: $0 }" if [ -d "$DEST" ]; then echo " Skipping $ORG/$PROJECT (already exists at $DEST)" exit 0 fi # Uppercase variants for Azure resource naming ORG_UPPER=$(echo "$ORG" | tr '[:lower:]' '[:upper:]') PROJECT_UPPER=$(echo "$PROJECT" | tr '[:lower:]' '[:upper:]') mkdir -p "$DEST/bench" "$DEST/data" "$DEST/infra" # --- status.md --- cat > "$DEST/status.md" < "$DEST/README.md" <<'README_HEADER' # Performance Optimization ## Results **Environment**: , , hyperfine (warmup 5, min-runs 30) | Benchmark | Before | After | Speedup | |---|---:|---:|---:| | | | | | ## What We Changed ### Startup / Import - ### Architecture - ### Micro-optimizations - ### I/O - ## Upstream Contributions | PR | Status | Description | |---|---|---| | [org/repo#N](https://github.com/org/repo/pull/N) | | | ## Methodology ### Environment - **VM**: - **OS**: Ubuntu 24.04 LTS - **Language**: - **Tooling**: hyperfine (warmup 5, min-runs 30) ### Profiling approach 1. 2. 3. ## Repo Structure ``` . ├── README.md # This file ├── status.md # Session state tracking ├── bench/ # Benchmark scripts ├── data/ # Raw benchmark data │ └── results.tsv └── infra/ # VM provisioning ├── cloud-init.yaml └── vm-manage.sh ``` README_HEADER # Substitute project name into README sed -i '' "s||$PROJECT|g" "$DEST/README.md" # --- bench/.gitkeep --- touch "$DEST/bench/.gitkeep" # --- data/results.tsv --- cat > "$DEST/data/results.tsv" <<'TSV' date commit target metric before after speedup notes TSV # --- infra/cloud-init.yaml --- cat > "$DEST/infra/cloud-init.yaml" < 'bash ~/bin/gh-auth-token.sh'" exit 1 fi echo "\$GH_TOKEN" | gh auth login --with-token gh auth status runcmd: - wget -q https://github.com/sharkdp/hyperfine/releases/download/v1.19.0/hyperfine_1.19.0_amd64.deb -O /tmp/hyperfine.deb - dpkg -i /tmp/hyperfine.deb # Install GitHub CLI - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg -o /usr/share/keyrings/githubcli-archive-keyring.gpg - chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg - echo "deb [arch=amd64 signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list - apt-get update -qq && apt-get install -y gh - su - azureuser -c 'bash /home/azureuser/setup_${PROJECT}.sh' CLOUDINIT # --- infra/vm-manage.sh --- cat > "$DEST/infra/vm-manage.sh" <|gh-auth|destroy}" echo "" echo " create - Provision VM with cloud-init" echo " start - Start deallocated VM" echo " stop - Deallocate VM (stops billing)" echo " ip - Show VM public IP" echo " ssh - SSH into VM (with agent forwarding)" echo " bench - Run benchmarks on a branch" echo " gh-auth - Authenticate gh CLI on VM (requires GH_TOKEN)" echo " destroy - Delete resource group and all resources" ;; esac VMMANAGE chmod +x "$DEST/infra/vm-manage.sh" echo " Scaffolded $ORG/$PROJECT → $DEST/"