72 lines
2.4 KiB
Plaintext
Executable File
72 lines
2.4 KiB
Plaintext
Executable File
#!/usr/bin/env nu
|
|
|
|
# Deploy SD Park Pass Locator to Linode
|
|
# This script copies source files (excluding node_modules) and restarts the service
|
|
|
|
def main [] {
|
|
print "🚀 Starting deployment to Linode..."
|
|
|
|
# Define paths
|
|
let local_path = "."
|
|
let remote_host = "linode"
|
|
let remote_path = "/opt/sd-park-pass-locator"
|
|
|
|
# Files and directories to exclude
|
|
let exclude_patterns = [
|
|
".next/"
|
|
"node_modules/"
|
|
".git/"
|
|
"*.log"
|
|
".DS_Store"
|
|
"coverage/"
|
|
"dist/"
|
|
"build/"
|
|
".env.local"
|
|
".env.development.local"
|
|
".env.test.local"
|
|
".env.production.local"
|
|
]
|
|
|
|
# Build exclude arguments for rsync
|
|
let exclude_args = ($exclude_patterns | each { |pattern| ["--exclude", $pattern] } | flatten)
|
|
|
|
print "📦 Syncing files to remote server..."
|
|
|
|
# Use rsync to sync files efficiently (do NOT delete remote files)
|
|
rsync --archive --verbose --compress ...$exclude_args $"($local_path)/" $"($remote_host):($remote_path)/"
|
|
|
|
if ($env.LAST_EXIT_CODE == 0) {
|
|
print "✅ Files synced successfully"
|
|
|
|
print "📦 Installing dependencies on remote server..."
|
|
ssh $remote_host $"cd ($remote_path) && npm install --omit=dev"
|
|
|
|
if ($env.LAST_EXIT_CODE == 0) {
|
|
print "🏗️ Building application on remote server..."
|
|
ssh $remote_host $"cd ($remote_path) && npm run build"
|
|
|
|
if ($env.LAST_EXIT_CODE == 0) {
|
|
print "🔄 Restarting PM2 service..."
|
|
ssh $remote_host "pm2 restart sd-park-pass-locator || pm2 start /opt/sd-park-pass-locator/ecosystem.config.js"
|
|
|
|
if ($env.LAST_EXIT_CODE == 0) {
|
|
print "🎉 Deployment completed successfully!"
|
|
print "🌐 Your app should be available at your Linode server"
|
|
} else {
|
|
print "❌ Failed to restart PM2 service"
|
|
exit 1
|
|
}
|
|
} else {
|
|
print "❌ Failed to build application on remote server"
|
|
exit 1
|
|
}
|
|
} else {
|
|
print "❌ Failed to install dependencies on remote server"
|
|
exit 1
|
|
}
|
|
} else {
|
|
print "❌ Failed to sync files to remote server"
|
|
exit 1
|
|
}
|
|
}
|