Initial import from garrytan/gstack@026751e (main snapshot via local relay)
Some checks failed
Workflow Lint / actionlint (push) Has been cancelled
Build CI Image / build (push) Has been cancelled
Skill Docs Freshness / check-freshness (push) Has been cancelled
Periodic Evals / build-image (push) Has been cancelled
Periodic Evals / evals (map[file:test/codex-e2e.test.ts name:e2e-codex]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/gemini-e2e.test.ts name:e2e-gemini]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-design.test.ts name:e2e-design]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-plan.test.ts name:e2e-plan]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-bugs.test.ts name:e2e-qa-bugs]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-workflow.test.ts name:e2e-qa-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-review.test.ts name:e2e-review]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-workflow.test.ts name:e2e-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-routing-e2e.test.ts name:e2e-routing]) (push) Has been cancelled
Some checks failed
Workflow Lint / actionlint (push) Has been cancelled
Build CI Image / build (push) Has been cancelled
Skill Docs Freshness / check-freshness (push) Has been cancelled
Periodic Evals / build-image (push) Has been cancelled
Periodic Evals / evals (map[file:test/codex-e2e.test.ts name:e2e-codex]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/gemini-e2e.test.ts name:e2e-gemini]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-design.test.ts name:e2e-design]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-plan.test.ts name:e2e-plan]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-bugs.test.ts name:e2e-qa-bugs]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-qa-workflow.test.ts name:e2e-qa-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-review.test.ts name:e2e-review]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-e2e-workflow.test.ts name:e2e-workflow]) (push) Has been cancelled
Periodic Evals / evals (map[file:test/skill-routing-e2e.test.ts name:e2e-routing]) (push) Has been cancelled
Source: https://github.com/garrytan/gstack/commit/026751e
This commit is contained in:
68
bin/dev-setup
Executable file
68
bin/dev-setup
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
# Set up gstack for local development — test skills from within this repo.
|
||||
#
|
||||
# Creates .claude/skills/gstack → (symlink to repo root) so Claude Code
|
||||
# discovers skills from your working tree. Changes take effect immediately.
|
||||
#
|
||||
# Also copies .env from the main worktree if this is a Conductor workspace
|
||||
# or git worktree (so API keys carry over automatically).
|
||||
#
|
||||
# Usage: bin/dev-setup # set up
|
||||
# bin/dev-teardown # clean up
|
||||
set -e
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
# 1. Copy .env from main worktree (if we're a worktree and don't have one)
|
||||
if [ ! -f "$REPO_ROOT/.env" ]; then
|
||||
MAIN_WORKTREE="$(git -C "$REPO_ROOT" worktree list --porcelain 2>/dev/null | head -1 | sed 's/^worktree //')"
|
||||
if [ -n "$MAIN_WORKTREE" ] && [ "$MAIN_WORKTREE" != "$REPO_ROOT" ] && [ -f "$MAIN_WORKTREE/.env" ]; then
|
||||
cp "$MAIN_WORKTREE/.env" "$REPO_ROOT/.env"
|
||||
echo "Copied .env from main worktree ($MAIN_WORKTREE)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. Install dependencies
|
||||
if [ ! -d "$REPO_ROOT/node_modules" ]; then
|
||||
echo "Installing dependencies..."
|
||||
(cd "$REPO_ROOT" && bun install)
|
||||
fi
|
||||
|
||||
# 3. Create .claude/skills/ inside the repo
|
||||
mkdir -p "$REPO_ROOT/.claude/skills"
|
||||
|
||||
# 4. Symlink .claude/skills/gstack → repo root
|
||||
# This makes setup think it's inside a real .claude/skills/ directory
|
||||
GSTACK_LINK="$REPO_ROOT/.claude/skills/gstack"
|
||||
if [ -L "$GSTACK_LINK" ]; then
|
||||
echo "Updating existing symlink..."
|
||||
rm "$GSTACK_LINK"
|
||||
elif [ -d "$GSTACK_LINK" ]; then
|
||||
echo "Error: .claude/skills/gstack is a real directory, not a symlink." >&2
|
||||
echo "Remove it manually if you want to use dev mode." >&2
|
||||
exit 1
|
||||
fi
|
||||
ln -s "$REPO_ROOT" "$GSTACK_LINK"
|
||||
|
||||
# 5. Create .agents/skills/gstack → repo root (for Codex/Gemini/Cursor)
|
||||
mkdir -p "$REPO_ROOT/.agents/skills"
|
||||
AGENTS_LINK="$REPO_ROOT/.agents/skills/gstack"
|
||||
if [ -L "$AGENTS_LINK" ]; then
|
||||
rm "$AGENTS_LINK"
|
||||
elif [ -d "$AGENTS_LINK" ]; then
|
||||
echo "Warning: .agents/skills/gstack is a real directory, skipping." >&2
|
||||
fi
|
||||
if [ ! -e "$AGENTS_LINK" ]; then
|
||||
ln -s "$REPO_ROOT" "$AGENTS_LINK"
|
||||
fi
|
||||
|
||||
# 6. Run setup via the symlink so it detects .claude/skills/ as its parent
|
||||
"$GSTACK_LINK/setup"
|
||||
|
||||
echo ""
|
||||
echo "Dev mode active. Skills resolve from this working tree."
|
||||
echo " .claude/skills/gstack → $REPO_ROOT"
|
||||
echo " .agents/skills/gstack → $REPO_ROOT"
|
||||
echo "Edit any SKILL.md and test immediately — no copy/deploy needed."
|
||||
echo ""
|
||||
echo "To tear down: bin/dev-teardown"
|
||||
Reference in New Issue
Block a user