mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-21 03:40:00 +08:00
merge: integrate origin/main (v0.5.1-v0.6.4) into team-supabase-store
Resolves conflicts in package.json (keep unified cli-eval.ts + add eval:select) and test/skill-llm-eval.test.ts (keep judgeCost/judgeCosts helpers + add diff-based test selection). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
71
bin/gstack-diff-scope
Executable file
71
bin/gstack-diff-scope
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
# gstack-diff-scope — categorize what changed in the diff against a base branch
|
||||
# Usage: eval $(gstack-diff-scope main) → sets SCOPE_FRONTEND=true SCOPE_BACKEND=false ...
|
||||
# Or: gstack-diff-scope main → prints SCOPE_*=... lines
|
||||
set -euo pipefail
|
||||
|
||||
BASE="${1:-main}"
|
||||
|
||||
# Get changed file list
|
||||
FILES=$(git diff "${BASE}...HEAD" --name-only 2>/dev/null || git diff "${BASE}" --name-only 2>/dev/null || echo "")
|
||||
|
||||
if [ -z "$FILES" ]; then
|
||||
echo "SCOPE_FRONTEND=false"
|
||||
echo "SCOPE_BACKEND=false"
|
||||
echo "SCOPE_PROMPTS=false"
|
||||
echo "SCOPE_TESTS=false"
|
||||
echo "SCOPE_DOCS=false"
|
||||
echo "SCOPE_CONFIG=false"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
FRONTEND=false
|
||||
BACKEND=false
|
||||
PROMPTS=false
|
||||
TESTS=false
|
||||
DOCS=false
|
||||
CONFIG=false
|
||||
|
||||
while IFS= read -r f; do
|
||||
case "$f" in
|
||||
# Frontend: CSS, views, components, templates
|
||||
*.css|*.scss|*.less|*.sass|*.pcss|*.module.css|*.module.scss) FRONTEND=true ;;
|
||||
*.tsx|*.jsx|*.vue|*.svelte|*.astro) FRONTEND=true ;;
|
||||
*.erb|*.haml|*.slim|*.hbs|*.ejs) FRONTEND=true ;;
|
||||
*.html) FRONTEND=true ;;
|
||||
tailwind.config.*|postcss.config.*) FRONTEND=true ;;
|
||||
app/views/*|*/components/*|styles/*|css/*|app/assets/stylesheets/*) FRONTEND=true ;;
|
||||
|
||||
# Prompts: prompt builders, system prompts, generation services
|
||||
*prompt_builder*|*generation_service*|*writer_service*|*designer_service*) PROMPTS=true ;;
|
||||
*evaluator*|*scorer*|*classifier_service*|*analyzer*) PROMPTS=true ;;
|
||||
*voice*.rb|*writing*.rb|*prompt*.rb|*token*.rb) PROMPTS=true ;;
|
||||
app/services/chat_tools/*|app/services/x_thread_tools/*) PROMPTS=true ;;
|
||||
config/system_prompts/*) PROMPTS=true ;;
|
||||
|
||||
# Tests
|
||||
*.test.*|*.spec.*|*_test.*|*_spec.*) TESTS=true ;;
|
||||
test/*|tests/*|spec/*|__tests__/*|cypress/*|e2e/*) TESTS=true ;;
|
||||
|
||||
# Docs
|
||||
*.md) DOCS=true ;;
|
||||
|
||||
# Config
|
||||
package.json|package-lock.json|yarn.lock|bun.lockb) CONFIG=true ;;
|
||||
Gemfile|Gemfile.lock) CONFIG=true ;;
|
||||
*.yml|*.yaml) CONFIG=true ;;
|
||||
.github/*) CONFIG=true ;;
|
||||
requirements.txt|pyproject.toml|go.mod|Cargo.toml|composer.json) CONFIG=true ;;
|
||||
|
||||
# Backend: everything else that's code (excluding views/components already matched)
|
||||
*.rb|*.py|*.go|*.rs|*.java|*.php|*.ex|*.exs) BACKEND=true ;;
|
||||
*.ts|*.js) BACKEND=true ;; # Non-component TS/JS is backend
|
||||
esac
|
||||
done <<< "$FILES"
|
||||
|
||||
echo "SCOPE_FRONTEND=$FRONTEND"
|
||||
echo "SCOPE_BACKEND=$BACKEND"
|
||||
echo "SCOPE_PROMPTS=$PROMPTS"
|
||||
echo "SCOPE_TESTS=$TESTS"
|
||||
echo "SCOPE_DOCS=$DOCS"
|
||||
echo "SCOPE_CONFIG=$CONFIG"
|
||||
9
bin/gstack-slug
Executable file
9
bin/gstack-slug
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# gstack-slug — output project slug and sanitized branch name
|
||||
# Usage: eval $(gstack-slug) → sets SLUG and BRANCH variables
|
||||
# Or: gstack-slug → prints SLUG=... and BRANCH=... lines
|
||||
set -euo pipefail
|
||||
SLUG=$(git remote get-url origin 2>/dev/null | sed 's|.*[:/]\([^/]*/[^/]*\)\.git$|\1|;s|.*[:/]\([^/]*/[^/]*\)$|\1|' | tr '/' '-')
|
||||
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null | tr '/' '-')
|
||||
echo "SLUG=$SLUG"
|
||||
echo "BRANCH=$BRANCH"
|
||||
Reference in New Issue
Block a user