-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
Β·281 lines (238 loc) Β· 8.37 KB
/
deploy.sh
File metadata and controls
executable file
Β·281 lines (238 loc) Β· 8.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
#!/bin/bash
# Complete Vercel Deployment Script for Telegram Issue Bot
# Handles installation, deployment, env setup, and webhook configuration
set -e
echo "π Telegram Issue Bot - Vercel Deployment"
echo "=========================================="
echo ""
# Check if running on macOS
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "β Running on macOS"
else
echo "β οΈ This script is optimized for macOS but should work on other Unix systems"
fi
# Check Node.js
if ! command -v node &> /dev/null; then
echo "β Node.js is not installed!"
echo ""
echo "Install Node.js:"
if [[ "$OSTYPE" == "darwin"* ]]; then
echo " brew install node"
fi
echo " OR download from: https://nodejs.org/"
exit 1
fi
echo "β Node.js $(node --version) detected"
echo ""
# Check/Install Vercel CLI
if ! command -v vercel &> /dev/null; then
echo "π¦ Installing Vercel CLI..."
npm install -g vercel
echo "β Vercel CLI installed"
else
echo "β Vercel CLI $(vercel --version) detected"
fi
echo ""
echo "=========================================="
echo "Select deployment type:"
echo "=========================================="
echo ""
echo "1) First-time setup (guided)"
echo "2) Quick deploy (existing project)"
echo "3) Deploy with environment variables"
echo "4) Production deploy"
echo ""
read -p "Select option [1]: " DEPLOY_TYPE
DEPLOY_TYPE=${DEPLOY_TYPE:-1}
case $DEPLOY_TYPE in
1)
echo ""
echo "π― First-time Setup"
echo "==================="
echo ""
echo "This will:"
echo " 1. Deploy your bot to Vercel"
echo " 2. Help you set environment variables"
echo " 3. Configure the Telegram webhook"
echo ""
read -p "Continue? [Y/n]: " CONFIRM
CONFIRM=${CONFIRM:-Y}
if [[ ! "$CONFIRM" =~ ^[Yy] ]]; then
echo "Aborted"
exit 0
fi
# Collect credentials
echo ""
echo "π Let's gather your credentials..."
echo ""
# Check if .env exists
if [ -f .env ]; then
echo "Found existing .env file"
read -p "Load credentials from .env? [Y/n]: " LOAD_ENV
LOAD_ENV=${LOAD_ENV:-Y}
if [[ "$LOAD_ENV" =~ ^[Yy] ]]; then
source .env
fi
fi
# Telegram Bot Token
if [ -z "$TELEGRAM_BOT_TOKEN" ]; then
echo ""
echo "π€ Telegram Bot Token"
echo " Get it from: https://t.me/BotFather"
echo " Command: /newbot"
echo ""
read -p "Enter TELEGRAM_BOT_TOKEN: " TELEGRAM_BOT_TOKEN
else
echo "β Using TELEGRAM_BOT_TOKEN from .env"
fi
# Asana credentials
if [ -z "$ASANA_ACCESS_TOKEN" ]; then
echo ""
echo "π Asana Access Token"
echo " Get it from: https://app.asana.com/0/my-apps"
echo " Create a Personal Access Token"
echo ""
read -p "Enter ASANA_ACCESS_TOKEN: " ASANA_ACCESS_TOKEN
else
echo "β Using ASANA_ACCESS_TOKEN from .env"
fi
if [ -z "$ASANA_WORKSPACE_ID" ]; then
echo ""
read -p "Enter ASANA_WORKSPACE_ID: " ASANA_WORKSPACE_ID
else
echo "β Using ASANA_WORKSPACE_ID from .env"
fi
if [ -z "$ASANA_PROJECT_ID" ]; then
echo ""
read -p "Enter ASANA_PROJECT_ID: " ASANA_PROJECT_ID
else
echo "β Using ASANA_PROJECT_ID from .env"
fi
# Deploy to Vercel
echo ""
echo "π Deploying to Vercel..."
echo ""
DEPLOYMENT_OUTPUT=$(vercel --prod 2>&1)
echo "$DEPLOYMENT_OUTPUT"
# Extract URL from output
VERCEL_URL=$(echo "$DEPLOYMENT_OUTPUT" | grep -o 'https://[^[:space:]]*\.vercel\.app' | head -1)
if [ -z "$VERCEL_URL" ]; then
echo ""
echo "β οΈ Could not auto-detect Vercel URL"
read -p "Enter your Vercel deployment URL: " VERCEL_URL
fi
echo ""
echo "β Deployed to: $VERCEL_URL"
# Set environment variables in Vercel
echo ""
echo "βοΈ Setting environment variables in Vercel..."
echo ""
vercel env add TELEGRAM_BOT_TOKEN production <<< "$TELEGRAM_BOT_TOKEN" 2>/dev/null || echo "β οΈ Could not auto-set TELEGRAM_BOT_TOKEN (you may need to set it manually)"
vercel env add ASANA_ACCESS_TOKEN production <<< "$ASANA_ACCESS_TOKEN" 2>/dev/null || echo "β οΈ Could not auto-set ASANA_ACCESS_TOKEN (you may need to set it manually)"
vercel env add ASANA_WORKSPACE_ID production <<< "$ASANA_WORKSPACE_ID" 2>/dev/null || echo "β οΈ Could not auto-set ASANA_WORKSPACE_ID (you may need to set it manually)"
vercel env add ASANA_PROJECT_ID production <<< "$ASANA_PROJECT_ID" 2>/dev/null || echo "β οΈ Could not auto-set ASANA_PROJECT_ID (you may need to set it manually)"
echo ""
echo "Note: You may need to set environment variables manually in Vercel dashboard:"
echo "https://vercel.com/dashboard β Your Project β Settings β Environment Variables"
# Redeploy to apply env vars
echo ""
read -p "Redeploy to apply environment variables? [Y/n]: " REDEPLOY
REDEPLOY=${REDEPLOY:-Y}
if [[ "$REDEPLOY" =~ ^[Yy] ]]; then
echo ""
echo "π Redeploying..."
vercel --prod
echo "β Redeployed"
fi
# Set webhook
echo ""
echo "π‘ Setting Telegram webhook..."
WEBHOOK_URL="${VERCEL_URL}/api/webhook"
WEBHOOK_RESULT=$(curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/setWebhook?url=${WEBHOOK_URL}")
if echo "$WEBHOOK_RESULT" | grep -q '"ok":true'; then
echo "β Webhook set successfully!"
else
echo "β Failed to set webhook"
echo "$WEBHOOK_RESULT"
echo ""
echo "Set it manually:"
echo "curl \"https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/setWebhook?url=${WEBHOOK_URL}\""
fi
# Test webhook
echo ""
echo "π§ͺ Testing webhook..."
WEBHOOK_INFO=$(curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getWebhookInfo")
echo "$WEBHOOK_INFO" | grep -o '"url":"[^"]*"' || echo "Could not verify webhook"
echo ""
echo "=========================================="
echo "β
DEPLOYMENT COMPLETE!"
echo "=========================================="
echo ""
echo "Your bot is live at: $VERCEL_URL"
echo "Webhook: $WEBHOOK_URL"
echo ""
echo "Test it now:"
echo " 1. Open Telegram"
echo " 2. Find your bot"
echo " 3. Send: /start"
echo ""
echo "Monitor logs:"
echo " vercel logs"
echo ""
;;
2)
echo ""
echo "π Quick Deploy"
echo ""
vercel --prod
echo ""
echo "β Deployed!"
echo ""
;;
3)
echo ""
echo "βοΈ Deploy with Environment Variables"
echo ""
# Load from .env if exists
if [ -f .env ]; then
source .env
echo "Loaded .env file"
fi
# Deploy
vercel --prod \
-e TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN}" \
-e ASANA_ACCESS_TOKEN="${ASANA_ACCESS_TOKEN}" \
-e ASANA_WORKSPACE_ID="${ASANA_WORKSPACE_ID}" \
-e ASANA_PROJECT_ID="${ASANA_PROJECT_ID}"
echo ""
echo "β Deployed with environment variables!"
echo ""
;;
4)
echo ""
echo "π Production Deploy"
echo ""
# Build check
echo "Running pre-deployment checks..."
npm run build 2>/dev/null || npx tsc
echo "β Build successful"
# Deploy
echo ""
echo "Deploying to production..."
vercel --prod
echo ""
echo "β Production deployment complete!"
echo ""
;;
*)
echo "Invalid option"
exit 1
;;
esac
echo ""
echo "Useful commands:"
echo " vercel --prod # Deploy to production"
echo " vercel logs # View deployment logs"
echo " vercel env ls # List environment variables"
echo " ./setup-telegram.sh # Configure Telegram webhook"
echo ""