Class: Underlay::Adapters::Heroku

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

Instance Method Summary collapse

Constructor Details

#initialize(app_builder) ⇒ Heroku

Returns a new instance of Heroku.



6
7
8
# File 'lib/underlay/adapters/heroku.rb', line 6

def initialize(app_builder)
  @app_builder = app_builder
end

Instance Method Details

#create_heroku_application_manifest_fileObject



60
61
62
# File 'lib/underlay/adapters/heroku.rb', line 60

def create_heroku_application_manifest_file
  app_builder.template 'app.json.erb', 'app.json'
end

#create_heroku_pipelineObject



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

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/underlay/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_review_apps_setup_scriptObject



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

def create_review_apps_setup_script
  app_builder.template(
    'bin_setup_review_app.erb',
    'bin/setup_review_app',
    force: true
  )
  app_builder.run 'chmod a+x bin/setup_review_app'
end

#create_staging_heroku_app(flags) ⇒ Object



21
22
23
24
25
# File 'lib/underlay/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



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

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_backup_scheduleObject



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

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

#set_heroku_rails_secretsObject



33
34
35
36
37
38
39
40
# File 'lib/underlay/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



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

def set_heroku_remotes
  remotes = "    \#{command_to_join_heroku_app('staging')}\n    \#{command_to_join_heroku_app('production')}\n\n    git config heroku.remote staging\n  SHELL\n\n  app_builder.append_file 'bin/setup', remotes\nend\n"