Claude-skill-registry environment-bootstrap
Use for development environment setup - create and maintain init scripts, run smoke tests, ensure consistent environment across sessions
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/environment-bootstrap-troykelly-claude-skills" ~/.claude/skills/majiayu000-claude-skill-registry-environment-bootstrap && rm -rf "$T"
manifest:
skills/data/environment-bootstrap-troykelly-claude-skills/SKILL.mdsource content
Environment Bootstrap
Overview
Set up and maintain consistent development environments.
Core principle: Every session should start with a known-good environment.
Announce at start: "I'm using environment-bootstrap to set up the development environment."
When to Use
| Situation | Action |
|---|---|
| First clone of repository | Create init script |
| Starting new session | Run init script |
| After pulling changes | Re-run init if deps changed |
| Environment seems broken | Run init to reset |
The Init Script
Location
project/ ├── scripts/ │ └── init.sh ← Standard location ├── package.json └── ...
Template
#!/usr/bin/env bash set -euo pipefail # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "=== Development Environment Bootstrap ===" echo "" # Step 1: Check prerequisites echo "Checking prerequisites..." check_command() { if ! command -v "$1" &> /dev/null; then echo -e "${RED}ERROR: $1 is required but not installed${NC}" exit 1 fi echo -e " ${GREEN}✓${NC} $1 found" } check_command node check_command pnpm check_command git check_command gh # Check Node version REQUIRED_NODE="18" CURRENT_NODE=$(node -v | cut -d'v' -f2 | cut -d'.' -f1) if [ "$CURRENT_NODE" -lt "$REQUIRED_NODE" ]; then echo -e "${RED}ERROR: Node $REQUIRED_NODE+ required, found $CURRENT_NODE${NC}" exit 1 fi echo -e " ${GREEN}✓${NC} Node version OK ($CURRENT_NODE)" # Check gh authentication if ! gh auth status &> /dev/null; then echo -e "${RED}ERROR: gh CLI not authenticated. Run 'gh auth login'${NC}" exit 1 fi echo -e " ${GREEN}✓${NC} GitHub CLI authenticated" echo "" # Step 2: Install dependencies echo "Installing dependencies..." pnpm install --frozen-lockfile --silent echo -e "${GREEN}✓${NC} Dependencies installed" echo "" # Step 3: Environment setup echo "Setting up environment..." if [ ! -f .env ]; then if [ -f .env.example ]; then cp .env.example .env echo -e "${YELLOW}!${NC} Created .env from .env.example - review and update values" else echo -e "${YELLOW}!${NC} No .env file and no .env.example found" fi else echo -e " ${GREEN}✓${NC} .env exists" fi echo "" # Step 4: Build echo "Building project..." pnpm build --silent echo -e "${GREEN}✓${NC} Build successful" echo "" # Step 5: Run tests echo "Running tests..." if pnpm test --silent; then echo -e "${GREEN}✓${NC} Tests passed" else echo -e "${RED}✗${NC} Tests failed - environment may have issues" exit 1 fi echo "" # Step 6: Start development services (if docker-compose exists) if [ -f "docker-compose.yml" ] || [ -f "docker-compose.yaml" ]; then echo "Starting development services..." docker-compose up -d echo "Waiting for services to be ready..." sleep 5 # Verify postgres (if defined) if docker-compose config --services 2>/dev/null | grep -q "postgres"; then if docker-compose ps postgres 2>/dev/null | grep -q "Up"; then echo -e "${GREEN}✓${NC} postgres ready" else echo -e "${RED}✗${NC} postgres failed to start" fi fi # Verify redis (if defined) if docker-compose config --services 2>/dev/null | grep -q "redis"; then if docker-compose ps redis 2>/dev/null | grep -q "Up"; then echo -e "${GREEN}✓${NC} redis ready" else echo -e "${RED}✗${NC} redis failed to start" fi fi echo "" fi # Step 7: Start development server (optional) if [ "${START_DEV_SERVER:-false}" = "true" ]; then echo "Starting development server..." pnpm dev & DEV_PID=$! # Wait for server to be ready sleep 5 # Smoke test (IPv6-first: try [::1] before falling back to 127.0.0.1) if curl -sf http://[::1]:3000/health > /dev/null; then echo -e "${GREEN}✓${NC} Development server running on IPv6 (PID: $DEV_PID)" elif curl -sf http://127.0.0.1:3000/health > /dev/null; then echo -e "${YELLOW}!${NC} Development server running on IPv4 legacy (PID: $DEV_PID)" else echo -e "${RED}✗${NC} Development server not responding" kill $DEV_PID 2>/dev/null exit 1 fi fi echo "" echo -e "${GREEN}=== Environment Ready ===${NC}" echo "" echo "Next steps:" echo " pnpm dev - Start development server" echo " pnpm test - Run tests" echo " pnpm build - Build for production"
Making Executable
chmod +x scripts/init.sh
Running the Init Script
Standard Run
./scripts/init.sh
With Dev Server
START_DEV_SERVER=true ./scripts/init.sh
After Pulling Changes
git pull origin main ./scripts/init.sh
Smoke Test
After environment setup, verify basic functionality:
What to Test
| Test | How | Pass Criteria |
|---|---|---|
| Build | | No errors |
| Tests | | All pass |
| Dev server | | Server starts |
| Health check | | 200 OK (IPv6-first) |
| Basic flow | Run E2E test | Passes |
Smoke Test Script
#!/usr/bin/env bash # scripts/smoke-test.sh set -euo pipefail echo "Running smoke tests..." # Start dev server pnpm dev & DEV_PID=$! sleep 10 # Health check (IPv6-first, fallback to IPv4 legacy) if curl -sf http://[::1]:3000/health > /dev/null; then echo "Health check passed (IPv6)" elif curl -sf http://127.0.0.1:3000/health > /dev/null; then echo "Health check passed (IPv4 legacy)" else echo "Health check failed" kill $DEV_PID exit 1 fi # Basic E2E (if available) if [ -f "tests/smoke.test.ts" ]; then pnpm test:e2e tests/smoke.test.ts fi # Clean up kill $DEV_PID echo "Smoke tests passed"
Environment Documentation
README Section
## Development Setup ### Prerequisites - Node.js 18+ - pnpm 8+ - GitHub CLI (`gh`) authenticated ### Quick Start ```bash # Clone repository git clone https://github.com/owner/repo.git cd repo # Run setup ./scripts/init.sh # Start development pnpm dev
Environment Variables
Copy
.env.example to .env and update:
| Variable | Description | Required |
|---|---|---|
| DATABASE_URL | PostgreSQL connection string | Yes |
| JWT_SECRET | Secret for signing tokens | Yes |
| API_KEY | External API key | No |
## Maintaining Init Scripts ### When to Update Update the init script when: - New prerequisite added - New environment variable needed - Build process changes - New verification step needed ### Version in Commit When updating init script: ```bash git add scripts/init.sh git commit -m "chore: Update init script for [change]"
Troubleshooting
Common Issues
| Issue | Solution |
|---|---|
| "command not found" | Install missing prerequisite |
| "permission denied" | |
| "node version" | Use nvm: |
| "pnpm install failed" | Delete node_modules, try again |
| "build failed" | Check for type errors, missing deps |
Reset Environment
When environment is in unknown state:
# Nuclear option rm -rf node_modules dist .cache .next pnpm store prune ./scripts/init.sh
Checklist
Init script should:
- Check all prerequisites
- Verify correct versions
- Install dependencies
- Set up environment files
- Run build
- Run tests
- Start development services (if docker-compose exists)
- Verify services are ready (postgres, redis, etc.)
- Optionally start dev server
- Verify server responds (if started)
- Print clear success/failure
Environment documentation should:
- List prerequisites
- Explain quick start
- Document env variables
- Explain common issues
Integration
This skill is called by:
- Beginning of each sessionsession-start
- Resetting environmenterror-recovery
This skill ensures:
- Consistent development environment
- Quick session startup
- Early detection of environment issues