deploys_controller.rb 1.43 KB
class DeploysController < ApplicationController

  protect_from_forgery :except => :create

  skip_before_action :verify_authenticity_token, :only => :create
  skip_before_action :authenticate_user!, :only => :create

  def create
    @app = App.find_by_api_key!(params[:api_key])
    @deploy = @app.deploys.create!(default_deploy || heroku_deploy)
    render :xml => @deploy
  end

  def index
    # See AppsController#find_app for the reasoning behind this code.
    app = App.find(params[:app_id])
    raise Mongoid::Errors::DocumentNotFound.new(App, app.id) unless current_user.admin? || current_user.watching?(app)

    @deploys = Kaminari.paginate_array(app.deploys.order_by(:created_at.desc)).
      page(params[:page]).per(10)
    @app = app
  end

  private

    def default_deploy
      if params[:deploy]
        {
          :username     => params[:deploy][:local_username],
          :environment  => params[:deploy][:rails_env],
          :repository   => params[:deploy][:scm_repository],
          :revision     => params[:deploy][:scm_revision],
          :message      => params[:deploy][:message]
        }
      end
    end

    # handle Heroku's HTTP post deployhook format
    def heroku_deploy
      {
        :username     => params[:user],
        :environment  => params[:rack_env].try(:downcase) || params[:app],
        :repository   => "git@heroku.com:#{params[:app]}.git",
        :revision     => params[:head],
      }
    end

end