@gv-sh/specgen-app 0.4.0 โ†’ 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,203 @@
1
+ #!/bin/bash
2
+
3
+ # SpecGen Low-Memory Setup Script
4
+ set -e
5
+
6
+ echo "๐Ÿš€ Setting up SpecGen App (Low Memory Mode)..."
7
+
8
+ # Check Node.js
9
+ if ! command -v npm &> /dev/null; then
10
+ echo "โŒ npm not found. Please install Node.js from https://nodejs.org/"
11
+ exit 1
12
+ fi
13
+
14
+ # Function to safely remove directories with permission handling
15
+ safe_remove() {
16
+ if [ -d "$1" ]; then
17
+ echo "Removing $1..."
18
+ chmod -R u+w "$1" 2>/dev/null || true
19
+ rm -rf "$1" 2>/dev/null || true
20
+ # If still exists, try with sudo
21
+ if [ -d "$1" ]; then
22
+ echo "Using elevated permissions to remove $1..."
23
+ sudo rm -rf "$1" 2>/dev/null || true
24
+ fi
25
+ fi
26
+ }
27
+
28
+ # Clean existing directories with proper permission handling
29
+ echo "Cleaning existing directories..."
30
+ safe_remove "server"
31
+ safe_remove "admin"
32
+ safe_remove "user"
33
+ rm -f *.tgz package 2>/dev/null || true
34
+
35
+ # Install dependencies one at a time with reduced memory usage
36
+ echo "๐Ÿ“ฆ Installing dependencies (low memory mode)..."
37
+ npm install --no-fund --no-audit --ignore-scripts --production=false --maxsockets=2 --loglevel=warn
38
+
39
+ # Create a .npmrc file that ignores engine requirements
40
+ echo "engine-strict=false" > .npmrc
41
+
42
+ # Download npm packages one at a time
43
+ echo "๐Ÿ“ฆ Downloading packages..."
44
+ npm pack @gv-sh/specgen-server --loglevel=warn
45
+ npm pack @gv-sh/specgen-admin --loglevel=warn
46
+ npm pack @gv-sh/specgen-user --loglevel=warn
47
+
48
+ # Extract packages
49
+ echo "๐Ÿ“ Extracting packages..."
50
+
51
+ # Extract server
52
+ if [ -f "gv-sh-specgen-server-"*.tgz ]; then
53
+ echo "Extracting server..."
54
+ tar -xzf gv-sh-specgen-server-*.tgz
55
+ mv package server
56
+ rm gv-sh-specgen-server-*.tgz
57
+ fi
58
+
59
+ # Extract admin
60
+ if [ -f "gv-sh-specgen-admin-"*.tgz ]; then
61
+ echo "Extracting admin..."
62
+ tar -xzf gv-sh-specgen-admin-*.tgz
63
+ mv package admin
64
+ rm gv-sh-specgen-admin-*.tgz
65
+ fi
66
+
67
+ # Extract user
68
+ if [ -f "gv-sh-specgen-user-"*.tgz ]; then
69
+ echo "Extracting user..."
70
+ tar -xzf gv-sh-specgen-user-*.tgz
71
+ mv package user
72
+ rm gv-sh-specgen-user-*.tgz
73
+ fi
74
+
75
+ # Patch package.json files to fix React scripts
76
+ echo "๐Ÿ”ง Patching package scripts..."
77
+
78
+ # Fix user package start script
79
+ if [ -f "user/package.json" ]; then
80
+ echo "Fixing user package start script..."
81
+ # Replace the start script to use react-scripts instead of missing scripts/start.js
82
+ sed -i.bak 's|"start": "cross-env PORT=3002 REACT_APP_API_URL=http://localhost:3000 node scripts/start.js"|"start": "cross-env PORT=3002 REACT_APP_API_URL=http://localhost:3000 react-scripts start"|g' user/package.json
83
+ rm -f user/package.json.bak
84
+ fi
85
+
86
+ # Fix admin package start script if needed
87
+ if [ -f "admin/package.json" ]; then
88
+ echo "Checking admin package start script..."
89
+ # Check if admin has similar issue
90
+ if grep -q "node scripts/start.js" admin/package.json; then
91
+ echo "Fixing admin package start script..."
92
+ sed -i.bak 's|node scripts/start.js|react-scripts start|g' admin/package.json
93
+ rm -f admin/package.json.bak
94
+ fi
95
+ fi
96
+
97
+ # Create .npmrc files with engine-strict=false in each directory
98
+ echo "Creating .npmrc files to ignore engine requirements..."
99
+ for dir in server admin user; do
100
+ if [ -d "$dir" ]; then
101
+ echo "engine-strict=false" > "$dir/.npmrc"
102
+ fi
103
+ done
104
+
105
+ # Install dependencies for each component with memory optimizations
106
+ echo "๐Ÿ“š Installing dependencies (low memory mode)..."
107
+ for dir in server admin user; do
108
+ if [ -d "$dir" ]; then
109
+ echo "Installing $dir dependencies..."
110
+ (cd "$dir" && npm install --no-fund --no-audit --ignore-scripts --loglevel=warn --production=false --maxsockets=2 --force --omit=dev)
111
+ else
112
+ echo "โš ๏ธ Warning: $dir directory not found"
113
+ fi
114
+ done
115
+
116
+ # Setup environment files
117
+ echo "๐Ÿ”ง Setting up environment files..."
118
+
119
+ # Server .env
120
+ if [ ! -f server/.env ] || [ "$CI" = "true" ]; then
121
+ # If in CI mode, use a dummy key
122
+ if [ "$CI" = "true" ]; then
123
+ # If in CI environment and .env already exists, just use it
124
+ if [ -f server/.env ]; then
125
+ echo "Using existing .env file for CI environment"
126
+ else
127
+ # Create a CI .env file
128
+ cat > server/.env << EOF
129
+ OPENAI_API_KEY=sk-test1234
130
+ NODE_ENV=test
131
+ PORT=3000
132
+ EOF
133
+ echo "Created test .env file for CI environment"
134
+ fi
135
+ KEY_PROVIDED=true
136
+ else
137
+ # Normal interactive mode
138
+ # Prompt for OpenAI API key
139
+ echo "To use SpecGen, you need an OpenAI API key."
140
+ echo "Enter your OpenAI API key (or press enter to set it later): "
141
+ read -r OPENAI_KEY
142
+
143
+ # If key is provided, use it, otherwise use placeholder
144
+ if [ -z "$OPENAI_KEY" ]; then
145
+ OPENAI_KEY="your_openai_api_key_here"
146
+ KEY_PROVIDED=false
147
+ else
148
+ KEY_PROVIDED=true
149
+ fi
150
+
151
+ cat > server/.env << EOF
152
+ # OpenAI API key
153
+ OPENAI_API_KEY=$OPENAI_KEY
154
+ NODE_ENV=development
155
+ PORT=3000
156
+ EOF
157
+
158
+ if [ "$KEY_PROVIDED" = true ]; then
159
+ echo "โœ… OpenAI API key saved to server/.env"
160
+ else
161
+ echo "โš ๏ธ No OpenAI API key provided. You'll need to add it later to server/.env"
162
+ fi
163
+ fi
164
+ fi
165
+
166
+ # Admin .env.development
167
+ if [ -d admin ]; then
168
+ cat > admin/.env.development << 'EOF'
169
+ REACT_APP_API_URL=http://localhost:3000
170
+ PORT=3001
171
+ SKIP_PREFLIGHT_CHECK=true
172
+ GENERATE_SOURCEMAP=false
173
+ EOF
174
+ fi
175
+
176
+ # User .env.development
177
+ if [ -d user ]; then
178
+ cat > user/.env.development << 'EOF'
179
+ REACT_APP_API_URL=http://localhost:3000
180
+ PORT=3002
181
+ SKIP_PREFLIGHT_CHECK=true
182
+ GENERATE_SOURCEMAP=false
183
+ EOF
184
+ fi
185
+
186
+ echo "โœ… Low-memory setup complete!"
187
+ echo ""
188
+ echo "Next steps:"
189
+ if [ "$KEY_PROVIDED" = false ]; then
190
+ echo "1. Add your OpenAI API key to server/.env"
191
+ echo "2. Use 'npm run dev' to start all services"
192
+ else
193
+ echo "1. Use 'npm run dev' to start all services"
194
+ fi
195
+ echo ""
196
+ echo "If you're deploying on a low-memory system, we recommend:"
197
+ echo "1. npm run build (to create optimized bundles)"
198
+ echo "2. npm run production (to start in production mode)"
199
+ echo ""
200
+ echo "Access URLs:"
201
+ echo " ๐ŸŒ User Interface: http://localhost:3002"
202
+ echo " โš™๏ธ Admin Interface: http://localhost:3001"
203
+ echo " ๐Ÿ”ง API: http://localhost:3000"
package/scripts/setup.sh CHANGED
@@ -1,9 +1,10 @@
1
1
  #!/bin/bash
2
2
 
3
- # SpecGen App Setup Script
3
+ # SpecGen App Setup Script - Low Memory Default with Full Cleanup
4
4
  set -e
5
5
 
6
- echo "๐Ÿš€ Setting up SpecGen App..."
6
+ echo "๐Ÿš€ Setting up SpecGen App (Low Memory Mode)..."
7
+ echo "๐Ÿงน This will clean up any existing installations..."
7
8
 
8
9
  # Check Node.js
9
10
  if ! command -v npm &> /dev/null; then
@@ -25,16 +26,88 @@ safe_remove() {
25
26
  fi
26
27
  }
27
28
 
28
- # Clean existing directories with proper permission handling
29
- echo "Cleaning existing directories..."
29
+ # ========================================
30
+ # CLEANUP EXISTING INSTALLATIONS
31
+ # ========================================
32
+
33
+ echo "๐Ÿงน Cleaning up existing installations..."
34
+
35
+ # 1. Stop and remove all PM2 processes
36
+ echo "Stopping PM2 processes..."
37
+ npx pm2 stop all 2>/dev/null || true
38
+ npx pm2 delete all 2>/dev/null || true
39
+ npx pm2 kill 2>/dev/null || true
40
+
41
+ # Remove PM2 configuration files
42
+ rm -f ecosystem.config.js 2>/dev/null || true
43
+ rm -f pm2.config.js 2>/dev/null || true
44
+ rm -rf ~/.pm2/logs/* 2>/dev/null || true
45
+
46
+ # 2. Kill processes on ports we'll use
47
+ echo "Freeing up ports..."
48
+ for port in 8080 3000 3001 3002; do
49
+ if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
50
+ echo "Killing processes on port $port..."
51
+ lsof -ti:$port | xargs kill -9 2>/dev/null || true
52
+ sleep 1
53
+ fi
54
+ done
55
+
56
+ # 3. Stop nginx if running and remove specgen configs
57
+ echo "Cleaning up nginx..."
58
+ if command -v nginx &> /dev/null; then
59
+ sudo systemctl stop nginx 2>/dev/null || true
60
+
61
+ # Remove any specgen-related nginx configs
62
+ sudo rm -f /etc/nginx/sites-available/specgen* 2>/dev/null || true
63
+ sudo rm -f /etc/nginx/sites-enabled/specgen* 2>/dev/null || true
64
+ sudo rm -f /etc/nginx/conf.d/specgen* 2>/dev/null || true
65
+
66
+ # Test nginx config and restart if valid
67
+ if sudo nginx -t 2>/dev/null; then
68
+ sudo systemctl start nginx 2>/dev/null || true
69
+ else
70
+ echo "โš ๏ธ Nginx config has issues, leaving it stopped"
71
+ fi
72
+ fi
73
+
74
+ # 4. Clean up any systemd services
75
+ echo "Cleaning up systemd services..."
76
+ if systemctl list-units --type=service | grep -q specgen; then
77
+ sudo systemctl stop specgen* 2>/dev/null || true
78
+ sudo systemctl disable specgen* 2>/dev/null || true
79
+ sudo rm -f /etc/systemd/system/specgen* 2>/dev/null || true
80
+ sudo systemctl daemon-reload 2>/dev/null || true
81
+ fi
82
+
83
+ # 5. Clean up Docker containers if any
84
+ if command -v docker &> /dev/null; then
85
+ echo "Cleaning up Docker containers..."
86
+ docker stop $(docker ps -q --filter "name=specgen") 2>/dev/null || true
87
+ docker rm $(docker ps -aq --filter "name=specgen") 2>/dev/null || true
88
+ fi
89
+
90
+ # ========================================
91
+ # CLEAN PROJECT DIRECTORIES
92
+ # ========================================
93
+
94
+ echo "Cleaning existing project directories..."
30
95
  safe_remove "server"
31
96
  safe_remove "admin"
32
97
  safe_remove "user"
98
+ safe_remove "logs"
99
+ safe_remove "node_modules"
33
100
  rm -f *.tgz package 2>/dev/null || true
101
+ rm -f *.log 2>/dev/null || true
102
+ rm -f ecosystem.config.js 2>/dev/null || true
103
+
104
+ # ========================================
105
+ # FRESH INSTALLATION
106
+ # ========================================
34
107
 
35
108
  # Install dependencies to get latest versions
36
- echo "๐Ÿ“ฆ Installing dependencies..."
37
- npm install
109
+ echo "๐Ÿ“ฆ Installing dependencies (low memory mode)..."
110
+ npm install --no-fund --no-audit --maxsockets=2 --loglevel=warn
38
111
 
39
112
  # Download npm packages
40
113
  echo "๐Ÿ“ฆ Downloading packages..."
@@ -69,63 +142,44 @@ if [ -f "gv-sh-specgen-user-"*.tgz ]; then
69
142
  rm gv-sh-specgen-user-*.tgz
70
143
  fi
71
144
 
72
- # Patch package.json files to fix React scripts
73
- echo "๐Ÿ”ง Patching package scripts..."
74
-
75
- # Fix user package start script
76
- if [ -f "user/package.json" ]; then
77
- echo "Fixing user package start script..."
78
- # Replace the start script to use react-scripts instead of missing scripts/start.js
79
- sed -i.bak 's|"start": "cross-env PORT=3002 REACT_APP_API_URL=http://localhost:3000 node scripts/start.js"|"start": "cross-env PORT=3002 REACT_APP_API_URL=http://localhost:3000 react-scripts start"|g' user/package.json
80
- rm -f user/package.json.bak
81
- fi
82
-
83
- # Fix admin package start script if needed
84
- if [ -f "admin/package.json" ]; then
85
- echo "Checking admin package start script..."
86
- # Check if admin has similar issue
87
- if grep -q "node scripts/start.js" admin/package.json; then
88
- echo "Fixing admin package start script..."
89
- sed -i.bak 's|node scripts/start.js|react-scripts start|g' admin/package.json
90
- rm -f admin/package.json.bak
91
- fi
92
- fi
93
-
94
- # Install dependencies for each component
95
- echo "๐Ÿ“š Installing dependencies..."
145
+ # Install dependencies for each component (low memory)
146
+ echo "๐Ÿ“š Installing dependencies (low memory mode)..."
96
147
  for dir in server admin user; do
97
148
  if [ -d "$dir" ]; then
98
149
  echo "Installing $dir dependencies..."
99
- cd "$dir" && npm install
150
+ cd "$dir"
151
+ # Create .npmrc for low memory mode
152
+ echo "engine-strict=false" > .npmrc
153
+ npm install --no-fund --no-audit --production --maxsockets=2 --loglevel=warn
100
154
  cd ..
101
155
  else
102
156
  echo "โš ๏ธ Warning: $dir directory not found"
103
157
  fi
104
158
  done
105
159
 
106
- # Setup environment files
160
+ # ========================================
161
+ # SETUP ENVIRONMENT FILES
162
+ # ========================================
163
+
107
164
  echo "๐Ÿ”ง Setting up environment files..."
108
165
 
109
- # Server .env
166
+ # Server .env (default to port 8080)
110
167
  if [ ! -f server/.env ] || [ "$CI" = "true" ]; then
111
168
  # If in CI mode, use a dummy key
112
169
  if [ "$CI" = "true" ]; then
113
- # If in CI environment and .env already exists, just use it
114
170
  if [ -f server/.env ]; then
115
171
  echo "Using existing .env file for CI environment"
116
172
  else
117
- # Create a CI .env file
118
173
  cat > server/.env << EOF
119
174
  OPENAI_API_KEY=sk-test1234
120
175
  NODE_ENV=test
121
- PORT=3000
176
+ PORT=8080
122
177
  EOF
123
178
  echo "Created test .env file for CI environment"
124
179
  fi
125
180
  KEY_PROVIDED=true
126
181
  else
127
182
  # Normal interactive mode
128
- # Prompt for OpenAI API key
129
183
  echo "To use SpecGen, you need an OpenAI API key."
130
184
  echo "Enter your OpenAI API key (or press enter to set it later): "
131
185
  read -r OPENAI_KEY
@@ -142,7 +196,7 @@ EOF
142
196
  # OpenAI API key
143
197
  OPENAI_API_KEY=$OPENAI_KEY
144
198
  NODE_ENV=development
145
- PORT=3000
199
+ PORT=8080
146
200
  EOF
147
201
 
148
202
  if [ "$KEY_PROVIDED" = true ]; then
@@ -156,34 +210,54 @@ fi
156
210
  # Admin .env.development
157
211
  if [ -d admin ]; then
158
212
  cat > admin/.env.development << 'EOF'
159
- REACT_APP_API_URL=http://localhost:3000
213
+ REACT_APP_API_URL=http://localhost:8080
160
214
  PORT=3001
161
215
  SKIP_PREFLIGHT_CHECK=true
162
- GENERATE_SOURCEMAP=true
216
+ GENERATE_SOURCEMAP=false
163
217
  EOF
164
218
  fi
165
219
 
166
220
  # User .env.development
167
221
  if [ -d user ]; then
168
222
  cat > user/.env.development << 'EOF'
169
- REACT_APP_API_URL=http://localhost:3000
223
+ REACT_APP_API_URL=http://localhost:8080
170
224
  PORT=3002
171
225
  SKIP_PREFLIGHT_CHECK=true
172
- GENERATE_SOURCEMAP=true
226
+ GENERATE_SOURCEMAP=false
173
227
  EOF
174
228
  fi
175
229
 
176
- echo "โœ… Setup complete!"
230
+ # Create logs directory
231
+ mkdir -p logs
232
+
233
+ echo ""
234
+ echo "โœ… Setup complete! All previous installations cleaned up."
235
+ echo ""
236
+ echo "๐Ÿงน Cleaned up:"
237
+ echo " - PM2 processes and configurations"
238
+ echo " - Nginx specgen configurations"
239
+ echo " - Systemd services"
240
+ echo " - Docker containers"
241
+ echo " - Old project files"
242
+ echo " - Freed ports: 8080, 3000, 3001, 3002"
177
243
  echo ""
178
244
  echo "Next steps:"
179
245
  if [ "$KEY_PROVIDED" = false ]; then
180
246
  echo "1. Add your OpenAI API key to server/.env"
181
247
  echo "2. Run 'npm run dev' to start all services"
248
+ echo "3. Or run 'npm run production' for production mode on port 8080"
182
249
  else
183
250
  echo "1. Run 'npm run dev' to start all services"
251
+ echo "2. Or run 'npm run production' for production mode on port 8080"
184
252
  fi
185
253
  echo ""
186
254
  echo "Access URLs:"
255
+ echo " ๐ŸŒ Production: http://localhost:8080 (main app)"
256
+ echo " ๐Ÿ“ฑ Production User: http://localhost:8080/app"
257
+ echo " โš™๏ธ Production Admin: http://localhost:8080/admin"
258
+ echo " ๐Ÿ“š API Docs: http://localhost:8080/api-docs"
259
+ echo ""
260
+ echo "Development URLs:"
187
261
  echo " ๐ŸŒ User Interface: http://localhost:3002"
188
- echo " โš™๏ธ Admin Interface: http://localhost:3001"
189
- echo " ๐Ÿ”ง API: http://localhost:3000"
262
+ echo " โš™๏ธ Admin Interface: http://localhost:3001"
263
+ echo " ๐Ÿ”ง API: http://localhost:8080"