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



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

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

  heroku_app_name = app_builder.app_name.dasherize
  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_heroku_pipelines_config_fileObject



59
60
61
# File 'lib/suspenders/adapters/heroku.rb', line 59

def create_heroku_pipelines_config_file
  app_builder.template "app.json.erb", "app.json"
end

#create_production_heroku_app(flags) ⇒ Object



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

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



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

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

  run_toolbelt_command "create #{app_name} #{flags}", "staging"
  run_toolbelt_command "config:add #{rack_env}", "staging"
end

#provide_review_apps_setup_scriptObject



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

def provide_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

#set_heroku_rails_secretsObject



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

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
# File 'lib/suspenders/adapters/heroku.rb', line 8

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".strip_heredoc

#set_heroku_serve_static_filesObject



84
85
86
87
88
89
90
91
# File 'lib/suspenders/adapters/heroku.rb', line 84

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

#set_up_heroku_specific_gemsObject



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

def set_up_heroku_specific_gems
  app_builder.inject_into_file(
    "Gemfile",
    %{\n\s\sgem "rails_stdout_logging"},
    after: /group :staging, :production do/,
  )
end