mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-17 15:20:11 +02:00
30dc40aaa0
gstack-diff-scope backend detection matched only *.ts|*.js. Modern Node ships backend code as ESM (.mjs) / CommonJS (.cjs) and explicit-module TS (.mts/.cts); none matched any category, so a PR touching only those files reported no backend scope and the Review Army skipped the backend reviewer. Add the four module extensions to the backend case. Test covers all four. Reported by @jbetala7. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
94 lines
3.3 KiB
Bash
Executable File
94 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# gstack-diff-scope — categorize what changed in the diff against a base branch
|
|
# Usage: source <(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"
|
|
echo "SCOPE_MIGRATIONS=false"
|
|
echo "SCOPE_API=false"
|
|
echo "SCOPE_AUTH=false"
|
|
exit 0
|
|
fi
|
|
|
|
FRONTEND=false
|
|
BACKEND=false
|
|
PROMPTS=false
|
|
TESTS=false
|
|
DOCS=false
|
|
CONFIG=false
|
|
MIGRATIONS=false
|
|
API=false
|
|
AUTH=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.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 ;;
|
|
|
|
# Migrations: database migration files
|
|
db/migrate/*|*/migrations/*|alembic/*|prisma/migrations/*) MIGRATIONS=true ;;
|
|
|
|
# API: routes, controllers, endpoints, GraphQL/OpenAPI schemas
|
|
*controller*|*route*|*endpoint*|*/api/*) API=true ;;
|
|
*.graphql|*.gql|openapi.*|swagger.*) API=true ;;
|
|
|
|
# Auth: authentication, authorization, sessions, permissions
|
|
*auth*|*session*|*jwt*|*oauth*|*permission*|*role*) AUTH=true ;;
|
|
|
|
# Backend: everything else that's code (excluding views/components already matched)
|
|
*.rb|*.py|*.go|*.rs|*.java|*.php|*.ex|*.exs) BACKEND=true ;;
|
|
# Non-component TS/JS is backend. Include ESM/CJS (.mjs/.cjs) and
|
|
# explicit-module TS (.mts/.cts) — #1810: these matched no category, so an
|
|
# ESM/CJS-only PR skipped the backend reviewer entirely.
|
|
*.ts|*.js|*.mjs|*.cjs|*.mts|*.cts) BACKEND=true ;;
|
|
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"
|
|
echo "SCOPE_MIGRATIONS=$MIGRATIONS"
|
|
echo "SCOPE_API=$API"
|
|
echo "SCOPE_AUTH=$AUTH"
|