Repository navigation
Expand file tree
/
Copy pathdeploy.ps1
More file actions
executable file
·197 lines (169 loc) · 8.04 KB
/
Copy pathdeploy.ps1
File metadata and controls
executable file
·197 lines (169 loc) · 8.04 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
# Heroku Deployment Script for Windows PowerShell
# This script adds Git and Heroku CLI to PATH and deploys to Heroku
# Usage: .\deploy.ps1
param(
[string]$BackendApp = "ronin-backend",
[string]$FrontendApp = "ronin-frontend"
)
# Add Git and Heroku to PATH
$env:Path = "C:\Program Files\Git\bin;C:\Program Files\heroku\bin;" + $env:Path
function Write-Header {
param([string]$Message)
Write-Host ""
Write-Host "================================" -ForegroundColor Cyan
Write-Host $Message -ForegroundColor Cyan
Write-Host "================================" -ForegroundColor Cyan
}
function Write-Success {
param([string]$Message)
Write-Host "[OK] $Message" -ForegroundColor Green
}
function Write-ErrorMsg {
param([string]$Message)
Write-Host "[ERROR] $Message" -ForegroundColor Red
}
# Verify tools
Write-Header "Verifying Prerequisites"
try {
& "C:\Program Files\Git\bin\git.exe" --version | Out-Null
Write-Success "Git is installed"
} catch {
Write-ErrorMsg "Git not found at C:\Program Files\Git\bin"
exit 1
}
try {
& "C:\Program Files\heroku\bin\heroku.cmd" --version | Out-Null
Write-Success "Heroku CLI is installed"
} catch {
Write-ErrorMsg "Heroku CLI not found at C:\Program Files\heroku\bin"
exit 1
}
# Navigate to project
$ProjectRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $ProjectRoot
Write-Success "Working directory: $ProjectRoot"
# Check git status
Write-Header "Checking Git Status"
$gitStatus = & "C:\Program Files\Git\bin\git.exe" status --short
if ($gitStatus) {
Write-Host "Uncommitted changes detected:" -ForegroundColor Yellow
Write-Host $gitStatus
Write-Host ""
$commit = Read-Host "Commit these changes? (y/n)"
if ($commit -eq 'y') {
& "C:\Program Files\Git\bin\git.exe" add .
$message = Read-Host "Commit message"
& "C:\Program Files\Git\bin\git.exe" commit -m $message
Write-Success "Changes committed"
} else {
Write-ErrorMsg "Please commit changes before deploying"
exit 1
}
} else {
Write-Success "Git repository is clean"
}
# Create/Save app names
Write-Header "Heroku Apps Configuration"
Write-Host "Backend app: $BackendApp" -ForegroundColor Yellow
Write-Host "Frontend app: $FrontendApp" -ForegroundColor Yellow
$BackendApp | Out-File -FilePath ".heroku-backend" -Encoding UTF8 -NoNewline
$FrontendApp | Out-File -FilePath ".heroku-frontend" -Encoding UTF8 -NoNewline
Write-Success "App names saved"
# Create backend app
Write-Header "Creating Backend App"
Write-Host "Running: heroku apps:create $BackendApp --buildpack heroku/java"
& "C:\Program Files\heroku\bin\heroku.cmd" apps:create $BackendApp --buildpack heroku/java 2>&1 | Where-Object { $_ -notmatch "is already taken" }
Write-Success "Backend app created or already exists: $BackendApp"
# Create frontend app
Write-Header "Creating Frontend App"
Write-Host "Running: heroku apps:create $FrontendApp --buildpack heroku/nodejs"
& "C:\Program Files\heroku\bin\heroku.cmd" apps:create $FrontendApp --buildpack heroku/nodejs 2>&1 | Where-Object { $_ -notmatch "is already taken" }
Write-Success "Frontend app created or already exists: $FrontendApp"
# Add PostgreSQL database
Write-Header "Adding PostgreSQL Database"
Write-Host "Running: heroku addons:create heroku-postgresql:mini --app $BackendApp"
& "C:\Program Files\heroku\bin\heroku.cmd" addons:create heroku-postgresql:mini --app $BackendApp 2>&1 | Where-Object { $_ -notmatch "already in progress" }
Write-Success "PostgreSQL addon created or already exists"
# Get database URL
Write-Header "Retrieving Database Configuration"
$dbUrl = & "C:\Program Files\heroku\bin\heroku.cmd" config:get DATABASE_URL --app $BackendApp
if ($dbUrl) {
Write-Success "Database configured: $($dbUrl.Substring(0, 30))..."
} else {
Write-Host "Database URL not yet available (may take a moment)" -ForegroundColor Yellow
}
# Configure Backend Environment Variables
Write-Header "Configuring Backend Environment Variables"
$openrouterKey = Read-Host "Enter OpenRouter API Key (or press Enter to skip)"
$googleId = Read-Host "Enter Google OAuth Client ID (or press Enter to skip)"
$googleSecret = Read-Host "Enter Google OAuth Client Secret (or press Enter to skip)"
Write-Host ""
Write-Host "Setting backend config variables..." -ForegroundColor Yellow
$backendInfoJson = & "C:\Program Files\heroku\bin\heroku.cmd" apps:info --json --app $BackendApp
$backendUrl = (ConvertFrom-Json $backendInfoJson).web_url.TrimEnd('/')
$frontendInfoJson = & "C:\Program Files\heroku\bin\heroku.cmd" apps:info --json --app $FrontendApp
$frontendUrl = (ConvertFrom-Json $frontendInfoJson).web_url.TrimEnd('/')
Write-Host "Backend URL: $backendUrl" -ForegroundColor Green
Write-Host "Frontend URL: $frontendUrl" -ForegroundColor Green
if ($openrouterKey) {
& "C:\Program Files\heroku\bin\heroku.cmd" config:set OPENROUTER_API_KEY=$openrouterKey --app $BackendApp | Out-Null
}
if ($googleId) {
& "C:\Program Files\heroku\bin\heroku.cmd" config:set GOOGLE_CLIENT_ID=$googleId --app $BackendApp | Out-Null
}
if ($googleSecret) {
& "C:\Program Files\heroku\bin\heroku.cmd" config:set GOOGLE_CLIENT_SECRET=$googleSecret --app $BackendApp | Out-Null
}
& "C:\Program Files\heroku\bin\heroku.cmd" config:set `
GOOGLE_REDIRECT_URI="$backendUrl/auth/oauth2/callback/google" `
FRONTEND_OAUTH_SUCCESS_URL="$frontendUrl/" `
CORS_ALLOWED_ORIGINS="$frontendUrl" `
--app $BackendApp | Out-Null
Write-Success "Backend environment variables configured"
# Configure Frontend Environment Variables
Write-Header "Configuring Frontend Environment Variables"
Write-Host "Running: heroku config:set VITE_API_URL=$backendUrl --app $FrontendApp"
& "C:\Program Files\heroku\bin\heroku.cmd" config:set VITE_API_URL="$backendUrl" --app $FrontendApp | Out-Null
Write-Success "Frontend environment variables configured"
# Add git remotes
Write-Header "Setting Up Git Remotes"
& "C:\Program Files\Git\bin\git.exe" remote remove heroku-backend 2>$null
& "C:\Program Files\Git\bin\git.exe" remote remove heroku-frontend 2>$null
& "C:\Program Files\Git\bin\git.exe" remote add heroku-backend "https://git.heroku.com/$BackendApp.git"
& "C:\Program Files\Git\bin\git.exe" remote add heroku-frontend "https://git.heroku.com/$FrontendApp.git"
Write-Success "Git remotes configured"
# Deploy Backend
Write-Header "Deploying Backend to $BackendApp"
Write-Host "Running: git subtree push --prefix backend heroku-backend master:main"
& "C:\Program Files\Git\bin\git.exe" subtree push --prefix backend heroku-backend master:main
if ($LASTEXITCODE -eq 0) {
Write-Success "Backend deployed successfully"
} else {
Write-ErrorMsg "Backend deployment failed (exit code: $LASTEXITCODE)"
exit 1
}
# Deploy Frontend
Write-Header "Deploying Frontend to $FrontendApp"
Write-Host "Running: git subtree push --prefix frontend heroku-frontend master:main"
& "C:\Program Files\Git\bin\git.exe" subtree push --prefix frontend heroku-frontend master:main
if ($LASTEXITCODE -eq 0) {
Write-Success "Frontend deployed successfully"
} else {
Write-ErrorMsg "Frontend deployment failed (exit code: $LASTEXITCODE)"
exit 1
}
# Final status
Write-Header "Deployment Complete"
Write-Host ""
Write-Host "Application URLs:" -ForegroundColor Green
Write-Host " Backend: https://$BackendApp.herokuapp.com" -ForegroundColor Yellow
Write-Host " Frontend: https://$FrontendApp.herokuapp.com" -ForegroundColor Yellow
Write-Host ""
Write-Host "View Logs:" -ForegroundColor Green
Write-Host " Backend: heroku logs --app $BackendApp --tail" -ForegroundColor Yellow
Write-Host " Frontend: heroku logs --app $FrontendApp --tail" -ForegroundColor Yellow
Write-Host ""
Write-Host "Next Deploy:" -ForegroundColor Green
Write-Host " git subtree push --prefix backend heroku-backend master:main" -ForegroundColor Yellow
Write-Host " git subtree push --prefix frontend heroku-frontend master:main" -ForegroundColor Yellow
Write-Host ""