Class: Clacky::DeployTools::ExecuteDeployment

Inherits:
Object
  • Object
show all
Defined in:
lib/clacky/default_skills/deploy/tools/execute_deployment.rb

Overview

Trigger a Railway deployment via ‘railway up` (blocking, with live logs). Uses RAILWAY_TOKEN passed through environment — no clackycli wrapper needed.

Class Method Summary collapse

Class Method Details

.execute(service_name:, platform_token:) ⇒ Hash

Trigger deployment for a service (blocking - waits for completion).

Parameters:

  • service_name (String)

    Railway service name (from railway.toml or service list)

  • platform_token (String)

    RAILWAY_TOKEN for this deploy task

Returns:

  • (Hash)

    { success: true, url: String } or { success: false, error: String }



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
# File 'lib/clacky/default_skills/deploy/tools/execute_deployment.rb', line 14

def self.execute(service_name:, platform_token:)
  if service_name.nil? || service_name.strip.empty?
    return { success: false, error: "service_name is required" }
  end

  if platform_token.nil? || platform_token.strip.empty?
    return { success: false, error: "platform_token is required" }
  end

  puts "🚀 Deploying service: #{service_name}"
  puts "    (This may take several minutes - you'll see live build logs below)"
  puts ""

  env = { "RAILWAY_TOKEN" => platform_token }
  
  # Use railway up without --detach to block and show live logs
  success = system(
    env,
    "railway", "up", "--service", service_name,
    in: :close  # Don't redirect stdout/stderr - let user see live logs
  )

  if success
    puts ""
    puts "✅ Deployment completed successfully"
    
    # Extract URL from railway status after successful deployment
    url = extract_url(env, service_name)
    
    return { success: true, url: url }
  else
    puts ""
    puts "❌ Deployment failed"
    return { success: false, error: "railway up exited with error code" }
  end

rescue => e
  { success: false, error: "Unexpected error: #{e.message}" }
end