Class: Suspenders::Adapters::Heroku

Inherits:
Object
  • Object
show all
Defined in:
lib/suspenders/adapters/heroku.rb

Instance Method Summary collapse

Constructor Details

#initialize(app_builder) ⇒ Heroku

Returns a new instance of Heroku.



4
5
6
# File 'lib/suspenders/adapters/heroku.rb', line 4

def initialize(app_builder)
  @app_builder = app_builder
end

Instance Method Details

#create_heroku_pipelineObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/suspenders/adapters/heroku.rb', line 68

def create_heroku_pipeline
  pipelines_plugin = `heroku help | grep pipelines`
  if pipelines_plugin.empty?
    puts "You need heroku pipelines plugin. Run: brew upgrade heroku-toolbelt"
    exit 1
  end

  run_toolbelt_command(
    "pipelines:create #{heroku_app_name} \
      -a #{heroku_app_name}-staging --stage staging",
    "staging",
  )

  run_toolbelt_command(
    "pipelines:add #{heroku_app_name} \
      -a #{heroku_app_name}-production --stage production",
    "production",
  )
end

#create_production_heroku_app(flags) ⇒ Object



27
28
29
30
31
# File 'lib/suspenders/adapters/heroku.rb', line 27

def create_production_heroku_app(flags)
  app_name = heroku_app_name_for("production")

  run_toolbelt_command "create #{app_name} #{flags}", "production"
end

#create_staging_heroku_app(flags) ⇒ Object



21
22
23
24
25
# File 'lib/suspenders/adapters/heroku.rb', line 21

def create_staging_heroku_app(flags)
  app_name = heroku_app_name_for("staging")

  run_toolbelt_command "create #{app_name} #{flags}", "staging"
end

#set_heroku_application_hostObject



88
89
90
91
92
93
94
95
# File 'lib/suspenders/adapters/heroku.rb', line 88

def set_heroku_application_host
  %w(staging production).each do |environment|
    run_toolbelt_command(
      "config:add APPLICATION_HOST=#{heroku_app_name}-#{environment}.herokuapp.com",
      environment,
    )
  end
end

#set_heroku_auto_migrateObject



97
98
99
100
101
102
103
104
# File 'lib/suspenders/adapters/heroku.rb', line 97

def set_heroku_auto_migrate
  %w(staging production).each do |environment|
    run_toolbelt_command(
      "config:add AUTO_MIGRATE_DB=true",
      environment,
    )
  end
end

#set_heroku_backup_scheduleObject



59
60
61
62
63
64
65
66
# File 'lib/suspenders/adapters/heroku.rb', line 59

def set_heroku_backup_schedule
  %w(staging production).each do |environment|
    run_toolbelt_command(
      "pg:backups:schedule DATABASE_URL --at '2:00 UTC'",
      environment,
    )
  end
end

#set_heroku_buildpacksObject



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/suspenders/adapters/heroku.rb', line 106

def set_heroku_buildpacks
  %w(staging production).each do |environment|
    run_toolbelt_command(
      "buildpacks:add --index 1 heroku/nodejs",
      environment
    )
    run_toolbelt_command(
      "buildpacks:add --index 2 heroku/ruby",
      environment
    )
  end
end

#set_heroku_rails_secretsObject



33
34
35
36
37
38
39
40
# File 'lib/suspenders/adapters/heroku.rb', line 33

def set_heroku_rails_secrets
  %w(staging production).each do |environment|
    run_toolbelt_command(
      "config:add SECRET_KEY_BASE=#{generate_secret}",
      environment,
    )
  end
end

#set_heroku_remotesObject



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/suspenders/adapters/heroku.rb', line 8

def set_heroku_remotes
  remotes = <<~SHELL
    echo "\n== Adding Heroku remotes =="
    #{command_to_join_heroku_app('staging')}
    #{command_to_join_heroku_app('production')}

    echo "\n== Setting default heroku remote to 'staging' =="
    git config heroku.remote staging
  SHELL

  app_builder.append_file "bin/setup", remotes
end

#set_heroku_sentry_configurationObject



51
52
53
54
55
56
57
# File 'lib/suspenders/adapters/heroku.rb', line 51

def set_heroku_sentry_configuration
  %w(staging production).each do |environment|
    run_toolbelt_command("config:add SENTRY_ENV=#{environment}", environment)
    run_toolbelt_command("config:add SENTRY_DSN='https://[email protected]/changeme'", environment)
    run_toolbelt_command("labs:enable runtime-dyno-metadata", environment)
  end
end

#set_heroku_smtp_settingsObject



42
43
44
45
46
47
48
49
# File 'lib/suspenders/adapters/heroku.rb', line 42

def set_heroku_smtp_settings
  %w(staging production).each do |environment|
    run_toolbelt_command("config:add SMTP_ADDRESS=smtp.example.com", environment)
    run_toolbelt_command("config:add SMTP_DOMAIN=example.com", environment)
    run_toolbelt_command("config:add SMTP_USERNAME=username", environment)
    run_toolbelt_command("config:add SMTP_PASSWORD=password", environment)
  end
end