ship_it 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/Gemfile +16 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +46 -0
  6. data/Rakefile +6 -0
  7. data/app/assets/images/.keep +0 -0
  8. data/app/assets/javascripts/application.js +28 -0
  9. data/app/assets/javascripts/polling.coffee +44 -0
  10. data/app/assets/stylesheets/application.css +24 -0
  11. data/app/controllers/application_controller.rb +34 -0
  12. data/app/controllers/branches_controller.rb +2 -0
  13. data/app/controllers/commits_controller.rb +2 -0
  14. data/app/controllers/concerns/.keep +0 -0
  15. data/app/controllers/deploy_options_controller.rb +38 -0
  16. data/app/controllers/deployments_controller.rb +70 -0
  17. data/app/controllers/environments_controller.rb +23 -0
  18. data/app/controllers/projects_controller.rb +51 -0
  19. data/app/controllers/sessions_controller.rb +31 -0
  20. data/app/controllers/users_controller.rb +2 -0
  21. data/app/helpers/application_helper.rb +70 -0
  22. data/app/mailers/.keep +0 -0
  23. data/app/models/.keep +0 -0
  24. data/app/models/branch.rb +15 -0
  25. data/app/models/commit.rb +8 -0
  26. data/app/models/concerns/.keep +0 -0
  27. data/app/models/deploy_option.rb +11 -0
  28. data/app/models/deployment.rb +137 -0
  29. data/app/models/environment.rb +29 -0
  30. data/app/models/project.rb +79 -0
  31. data/app/models/user.rb +18 -0
  32. data/app/views/deploy_options/new.html.slim +15 -0
  33. data/app/views/deployments/_current.html.slim +15 -0
  34. data/app/views/deployments/_deployment.html.slim +15 -0
  35. data/app/views/deployments/_details.html.slim +26 -0
  36. data/app/views/deployments/_progress.html.slim +2 -0
  37. data/app/views/deployments/in_progress.js.erb +1 -0
  38. data/app/views/deployments/show.html.slim +38 -0
  39. data/app/views/deployments/show.js.erb +1 -0
  40. data/app/views/environments/_changes.html.slim +24 -0
  41. data/app/views/environments/changes.js.erb +1 -0
  42. data/app/views/environments/show.html.slim +36 -0
  43. data/app/views/layouts/application.html.slim +30 -0
  44. data/app/views/layouts/homepage.html.slim +10 -0
  45. data/app/views/projects/edit.html.slim +27 -0
  46. data/app/views/projects/index.html.slim +22 -0
  47. data/app/views/projects/new.html.slim +11 -0
  48. data/app/views/projects/show.html.slim +29 -0
  49. data/app/views/sessions/homepage.html.slim +6 -0
  50. data/app/views/sessions/new.html.slim +7 -0
  51. data/bin/bundle +3 -0
  52. data/bin/rails +4 -0
  53. data/bin/rake +4 -0
  54. data/bin/ship_it +44 -0
  55. data/config.ru +4 -0
  56. data/config/application.rb +23 -0
  57. data/config/boot.rb +4 -0
  58. data/config/environment.rb +5 -0
  59. data/config/environments/development.rb +29 -0
  60. data/config/environments/production.rb +80 -0
  61. data/config/environments/test.rb +36 -0
  62. data/config/initializers/backtrace_silencers.rb +7 -0
  63. data/config/initializers/filter_parameter_logging.rb +4 -0
  64. data/config/initializers/inflections.rb +16 -0
  65. data/config/initializers/mime_types.rb +5 -0
  66. data/config/initializers/omniauth_providers_patch.rb +16 -0
  67. data/config/initializers/secret_token.rb +12 -0
  68. data/config/initializers/session_store.rb +3 -0
  69. data/config/initializers/wrap_parameters.rb +14 -0
  70. data/config/locales/en.yml +23 -0
  71. data/config/routes.rb +28 -0
  72. data/db/migrate/20130828221203_create_projects.rb +9 -0
  73. data/db/migrate/20130828232058_create_deployments.rb +16 -0
  74. data/db/migrate/20130828234740_create_users.rb +9 -0
  75. data/db/migrate/20130828234748_create_deploy_options.rb +11 -0
  76. data/db/migrate/20130828234808_create_branches.rb +9 -0
  77. data/db/migrate/20130828234814_create_commits.rb +10 -0
  78. data/db/migrate/20130828234822_create_environments.rb +9 -0
  79. data/db/schema.rb +80 -0
  80. data/db/seeds.rb +7 -0
  81. data/lib/assets/.keep +0 -0
  82. data/lib/ship_it.rb +9 -0
  83. data/lib/ship_it/rails_app.rb +12 -0
  84. data/lib/ship_it/version.rb +3 -0
  85. data/lib/tasks/.keep +0 -0
  86. data/lib/tasks/ship_it.rake +76 -0
  87. data/log/.keep +0 -0
  88. data/public/404.html +58 -0
  89. data/public/422.html +58 -0
  90. data/public/500.html +57 -0
  91. data/public/favicon.ico +0 -0
  92. data/public/robots.txt +5 -0
  93. data/ship_it.gemspec +38 -0
  94. data/templates/project/.gitignore +6 -0
  95. data/templates/project/Gemfile +6 -0
  96. data/templates/project/config.ru +8 -0
  97. data/templates/project/config/database.yml +23 -0
  98. data/templates/project/db/.gitkeep +0 -0
  99. data/templates/project/db/schema.rb +75 -0
  100. data/templates/project/lib/ship_it/railtie.rb +20 -0
  101. data/templates/project/log/.gitkeep +0 -0
  102. data/test/controllers/.keep +0 -0
  103. data/test/controllers/branches_controller_test.rb +7 -0
  104. data/test/controllers/commits_controller_test.rb +7 -0
  105. data/test/controllers/configurations_controller_test.rb +7 -0
  106. data/test/controllers/deploy_options_controller_test.rb +7 -0
  107. data/test/controllers/deployments_controller_test.rb +7 -0
  108. data/test/controllers/environments_controller_test.rb +7 -0
  109. data/test/controllers/projects_controller_test.rb +7 -0
  110. data/test/controllers/users_controller_test.rb +7 -0
  111. data/test/fixtures/.keep +0 -0
  112. data/test/fixtures/branches.yml +11 -0
  113. data/test/fixtures/commits.yml +11 -0
  114. data/test/fixtures/configurations.yml +11 -0
  115. data/test/fixtures/deploy_options.yml +11 -0
  116. data/test/fixtures/deployments.yml +11 -0
  117. data/test/fixtures/environments.yml +11 -0
  118. data/test/fixtures/projects.yml +11 -0
  119. data/test/fixtures/users.yml +11 -0
  120. data/test/helpers/.keep +0 -0
  121. data/test/helpers/branches_helper_test.rb +4 -0
  122. data/test/helpers/commits_helper_test.rb +4 -0
  123. data/test/helpers/configurations_helper_test.rb +4 -0
  124. data/test/helpers/deploy_options_helper_test.rb +4 -0
  125. data/test/helpers/deployments_helper_test.rb +4 -0
  126. data/test/helpers/environments_helper_test.rb +4 -0
  127. data/test/helpers/projects_helper_test.rb +4 -0
  128. data/test/helpers/users_helper_test.rb +4 -0
  129. data/test/integration/.keep +0 -0
  130. data/test/mailers/.keep +0 -0
  131. data/test/models/.keep +0 -0
  132. data/test/models/branch_test.rb +7 -0
  133. data/test/models/commit_test.rb +7 -0
  134. data/test/models/configuration_test.rb +7 -0
  135. data/test/models/deploy_option_test.rb +7 -0
  136. data/test/models/deployment_test.rb +7 -0
  137. data/test/models/environment_test.rb +7 -0
  138. data/test/models/project_test.rb +7 -0
  139. data/test/models/user_test.rb +7 -0
  140. data/test/test_helper.rb +15 -0
  141. data/vendor/assets/javascripts/.keep +0 -0
  142. data/vendor/assets/stylesheets/.keep +0 -0
  143. metadata +431 -0
@@ -0,0 +1,15 @@
1
+ li
2
+ = link_to [deployment.project, deployment.environment, deployment] do
3
+ = deployment.project.name
4
+ | /
5
+ = deployment.branch.name
6
+ |  ⇒ 
7
+ = deployment.environment.name
8
+ br
9
+ - if deployment.failed?
10
+ | Failed at
11
+ = deployment.finished_at.to_s(:short)
12
+ - elsif deployment.started?
13
+ | Started at
14
+ = deployment.started_at.to_s(:short)
15
+ = render partial: 'deployments/progress', locals: {deployment: deployment}
@@ -0,0 +1,26 @@
1
+ - environment = deployment.environment
2
+ - project = environment.project
3
+
4
+ dl.status.dl-horizontal data-deployment-id=deployment.id data-poll=(deployment.completed? ? nil : polymorphic_path([project, environment, deployment], format: :js))
5
+ dt Status:
6
+ dd = deployment.status
7
+
8
+ - if deployment.completed?
9
+ dt Duration:
10
+ dd = duration_text(deployment.duration)
11
+ - elsif deployment.started?
12
+ dt Time remaining:
13
+ dd = time_remaining(deployment)
14
+
15
+ dt Progress:
16
+ dd = render partial: 'progress', locals: {deployment: deployment}
17
+
18
+ - unless deployment.user_terminated?
19
+ = link_to "Terminate", [:terminate, project, environment, deployment], remote: true, class: 'btn'
20
+
21
+ - if deployment.failed?
22
+ - new_deployment = Deployment.new(branch_id: deployment.branch_id, revision: deployment.revision)
23
+ = form_for([project, environment, new_deployment], html: {class: 'form form-inline'}) do |form|
24
+ = form.hidden_field :branch_id
25
+ = form.hidden_field :revision
26
+ = form.submit 'Re-deploy', class: 'btn btn-primary'
@@ -0,0 +1,2 @@
1
+ div class="#{progress_classes(deployment).join(" ")}" data-deployment-id=deployment.id
2
+ .bar style="width:#{deployment_percent(deployment)}%"
@@ -0,0 +1 @@
1
+ $(".current_deployments").replaceWith("<%= escape_javascript render partial: "deployments/current" %>");
@@ -0,0 +1,38 @@
1
+ h1 #{@project.name} : #{@environment.name}
2
+
3
+ dl.dl-horizontal
4
+ dt Branch:
5
+ dd = @deployment.branch.name
6
+
7
+ dt Revision:
8
+ dd = @deployment.revision
9
+
10
+ dt Deployed at:
11
+ dd = @deployment.created_at.to_s(:short)
12
+
13
+ dt Deployed by:
14
+ dd = @deployment.created_by.andand.name || "unknown"
15
+
16
+ = render partial: "details", locals: {deployment: @deployment}
17
+
18
+ h3 Commits
19
+ table.table.table-striped
20
+ thead
21
+ tr
22
+ th Revision
23
+ th Message
24
+ tbody
25
+ - @deployment.commits.each do |commit|
26
+ tr
27
+ td = commit.sha[0...8]
28
+ td = commit.message
29
+
30
+ h3 Log
31
+
32
+ - if @deployment.completed?
33
+ pre#log
34
+ = @deployment.log
35
+ - else
36
+ pre#log.uncompleted data-poll-log=polymorphic_path([:log, @project, @environment, @deployment]) data-poll-log-start=(@deployment.log.andand.length || 0)
37
+ = @deployment.log
38
+
@@ -0,0 +1 @@
1
+ $('.status[data-deployment-id="<%= @deployment.id %>"]').replaceWith("<%= escape_javascript render partial: 'details', locals: {deployment: @deployment} %>");
@@ -0,0 +1,24 @@
1
+ / environment
2
+ / branch
3
+ - changes = environment.pending_changes(branch)
4
+
5
+ h3 Pending Commits
6
+ - if changes.present?
7
+ table.table.table-striped
8
+ thead
9
+ tr
10
+ th Revision
11
+ th Message
12
+ tbody
13
+ - changes.each do |commit|
14
+ tr
15
+ td commit.sha[0...8]
16
+ td commit.message
17
+ - elsif branch.last_commit
18
+ p.muted
19
+ | None.
20
+ br
21
+ | Last commit: [#{branch.last_commit.sha[0...8]}] #{branch.last_commit.message}
22
+ - else
23
+ p.muted
24
+ | None.
@@ -0,0 +1 @@
1
+ $("#pending_changes").html("<%= escape_javascript render partial: 'changes', locals: {branch: @branch, environment: @environment} %>");
@@ -0,0 +1,36 @@
1
+ h1 #{@project.name} : #{@environment.name}
2
+
3
+ = form_for [@project, @environment, Deployment.new], html: {class: "form form-inline"} do |form|
4
+ = form.select :branch_id, @project.branches.map{|b| [b.name, b.id]}, {}, data: {change: polymorphic_path([:changes, @project, @environment])}
5
+ | &nbsp;
6
+ = form.submit "Deploy", class: "btn btn-primary"
7
+
8
+ #pending_changes
9
+ = render partial: "changes", locals: {environment: @environment, branch: @environment.current_branch || @project.branches.first}
10
+
11
+ h3 Deployment History
12
+ table.table.table-striped
13
+ thead
14
+ tr
15
+ th Branch
16
+ th Revision
17
+ th Deployed at
18
+ th Deployed by
19
+ th Status
20
+ th Duration
21
+ tbody
22
+ - @environment.deployments.each do |deployment|
23
+ tr[class="#{deployment.failed? ? '.text-error' : ''}"]
24
+ td = deployment.branch.name
25
+ td = deployment.short_revision
26
+ td
27
+ = link_to [@project, @environment, deployment] do
28
+ = deployment.created_at.to_s(:short)
29
+ td = deployment.created_by.andand.name
30
+ td = deployment.status
31
+ td
32
+ - if deployment.completed?
33
+ = duration_text(deployment.duration)
34
+ - else
35
+ | ---
36
+
@@ -0,0 +1,30 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Ship It
5
+ = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true
6
+ = javascript_include_tag "application", "data-turbolinks-track" => true
7
+ = csrf_meta_tags
8
+ body
9
+ .navbar.navbar-inverse.navbar-fixed-top
10
+ .navbar-inner
11
+ .container
12
+ a.btn.btn-navbar data-toggle="collapse" data-target=".nav-collapse"
13
+ span.icon-bar
14
+ span.icon-bar
15
+ span.icon-bar
16
+ = link_to root_path, class: "brand" do
17
+ | Ship It!
18
+ .nav-collapse.collapse
19
+ ul.nav
20
+ - @projects.each do |project|
21
+ li
22
+ = link_to project.name, project
23
+ li
24
+ = link_to "Setup", projects_path
25
+ .container
26
+ .row-fluid
27
+ .span9
28
+ = yield
29
+ .span3
30
+ = render partial: "deployments/current"
@@ -0,0 +1,10 @@
1
+ doctype html
2
+ html
3
+ head
4
+ meta charset="utf-8"
5
+ title Ship It!
6
+ = stylesheet_link_tag "application"
7
+ = javascript_include_tag "application"
8
+ body
9
+ .container
10
+ = yield
@@ -0,0 +1,27 @@
1
+ h1 Edit Project
2
+
3
+ = form_for @project do |form|
4
+ = form.label :name, "Project name"
5
+ = form.text_field :name
6
+
7
+ = form.label :git_repo_url, "Git repo URL"
8
+ = form.text_field :git_repo_url
9
+
10
+ .form-actions
11
+ = form.submit "Update", class: "btn btn-primary"
12
+
13
+ h2 Deploy Options
14
+ - if @project.deploy_options.present?
15
+ dl
16
+ - @project.deploy_options.each do |option|
17
+ dt
18
+ = option.name
19
+ dd
20
+ = option.value
21
+ | -
22
+ = link_to [@project, option], method: :delete, data: {confirm: "Delete this option?"} do
23
+ | Delete
24
+ - else
25
+ p.muted None.
26
+
27
+ = link_to "Add deploy option", [:new, @project, :deploy_option]
@@ -0,0 +1,22 @@
1
+ h1 Projects
2
+
3
+ table.table.table-striped
4
+ thead
5
+ tr
6
+ th
7
+ | Name
8
+ th
9
+ | Git repo URL
10
+ th
11
+ tbody
12
+ - @projects.each do |project|
13
+ tr
14
+ td
15
+ = project.name
16
+ td
17
+ = project.git_repo_url
18
+ td
19
+ = link_to "Edit", [:edit, project]
20
+
21
+ = link_to new_project_path, class: "btn btn-primary" do
22
+ | New Project
@@ -0,0 +1,11 @@
1
+ h1 New Project
2
+
3
+ = form_for @project do |form|
4
+ = form.label :name, "Project name"
5
+ = form.text_field :name
6
+
7
+ = form.label :git_repo_url, "Git repo URL"
8
+ = form.text_field :git_repo_url
9
+
10
+ .form-actions
11
+ = form.submit "Create", class: "btn btn-primary"
@@ -0,0 +1,29 @@
1
+ h1 #{@project.name}
2
+
3
+ table.table.table-striped
4
+ thead
5
+ tr
6
+ th Environment
7
+ th Branch
8
+ th Revision
9
+ th Last deployed
10
+ th Deployed by
11
+ tbody
12
+ - @project.environments.each do |environment|
13
+ tr
14
+ td
15
+ = link_to environment.name, [@project, environment]
16
+ - if deployment = environment.last_deployment
17
+ td
18
+ = deployment.branch.name
19
+ td
20
+ = deployment.short_revision
21
+ td
22
+ = deployment.started_at
23
+ td
24
+ = deployment.created_by.andand.name
25
+ - else
26
+ td
27
+ td
28
+ td
29
+ td
@@ -0,0 +1,6 @@
1
+ .hero-unit
2
+ h1 Ship It!
3
+ p One click deployment for lazy people.
4
+ p
5
+ = link_to login_path, class: "btn btn-primary btn-large" do
6
+ | Login
@@ -0,0 +1,7 @@
1
+ h1 Login
2
+
3
+ ul.unstyled
4
+ - OmniAuth::Builder.providers.each do |provider|
5
+ li
6
+ = link_to "/auth/#{provider}" do
7
+ | Login via #{provider}
data/bin/bundle ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+ load Gem.bin_path('bundler', 'bundle')
data/bin/rails ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
data/bin/rake ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run
data/bin/ship_it ADDED
@@ -0,0 +1,44 @@
1
+ #!env ruby
2
+
3
+ require 'thor'
4
+ require 'cocaine'
5
+
6
+ module ShipIt
7
+ class CLI < Thor
8
+ include Thor::Actions
9
+
10
+ def self.source_root
11
+ File.expand_path("../../templates", __FILE__)
12
+ end
13
+
14
+ desc "new PROJECT_NAME", "Sets up ALL THE THINGS need for your deployment project."
15
+ def new(name)
16
+ @name = Thor::Util.snake_case(name)
17
+ directory :project, @name
18
+ end
19
+
20
+ desc "start", "Starts the thin server"
21
+ def start(*args)
22
+ port_option = args.include?('-p')? '' : ' -p 3030'
23
+ args = args.join(" ")
24
+ command = "bundle exec thin -R config.ru start #{port_option} #{args}"
25
+ system(command)
26
+ end
27
+ map "s" => :start
28
+
29
+ desc "stop", "Stops the thin server"
30
+ def stop
31
+ command = "bundle exec thin stop"
32
+ system(command)
33
+ end
34
+
35
+ desc "runner", "Run the deployment runner"
36
+ def runner
37
+ command = "bundle exec rake ship_it:run -f #{File.expand_path("../../Rakefile", __FILE__)}"
38
+ system(command)
39
+ end
40
+
41
+ end
42
+ end
43
+
44
+ ShipIt::CLI.start
data/config.ru ADDED
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails.application
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ # Require the gems listed in Gemfile, including any gems
6
+ # you've limited to :test, :development, or :production.
7
+ Bundler.require(:default, Rails.env)
8
+
9
+ module ShipIt
10
+ class Application < Rails::Application
11
+ # Settings in config/environments/* take precedence over those specified here.
12
+ # Application configuration should go into files in config/initializers
13
+ # -- all .rb files in that directory are automatically loaded.
14
+
15
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
16
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
17
+ # config.time_zone = 'Central Time (US & Canada)'
18
+
19
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
20
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
21
+ # config.i18n.default_locale = :de
22
+ end
23
+ end
data/config/boot.rb ADDED
@@ -0,0 +1,4 @@
1
+ # Set up gems listed in the Gemfile.
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+
4
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
@@ -0,0 +1,5 @@
1
+ # Load the Rails application.
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the Rails application.
5
+ ShipIt::Application.initialize!
@@ -0,0 +1,29 @@
1
+ ShipIt::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb.
3
+
4
+ # In the development environment your application's code is reloaded on
5
+ # every request. This slows down response time but is perfect for development
6
+ # since you don't have to restart the web server when you make code changes.
7
+ config.cache_classes = false
8
+
9
+ # Do not eager load code on boot.
10
+ config.eager_load = false
11
+
12
+ # Show full error reports and disable caching.
13
+ config.consider_all_requests_local = true
14
+ config.action_controller.perform_caching = false
15
+
16
+ # Don't care if the mailer can't send.
17
+ config.action_mailer.raise_delivery_errors = false
18
+
19
+ # Print deprecation notices to the Rails logger.
20
+ config.active_support.deprecation = :log
21
+
22
+ # Raise an error on page load if there are pending migrations
23
+ config.active_record.migration_error = :page_load
24
+
25
+ # Debug mode disables concatenation and preprocessing of assets.
26
+ # This option may cause significant delays in view rendering with a large
27
+ # number of complex assets.
28
+ config.assets.debug = true
29
+ end