KapostDeploy

Gem Version Code Climate GPA Code Climate Coverage

Table of Contents

Features

KapostDeploy::Task.define creates the following rake tasks to aid in the pipeline promotion deployment of Heroku applications

[promote]
  Promotes a source environment to production

[promote:before_promote]
  Executes application-defined before promotion code as defined in task config (See below)

[promote:after_promote]
  Executes application-defined after promotion code as defined in task config (See below)

Simple Example:

require "kapost_deploy/task"

KapostDeploy::Task.define do |config|
  config.app = "cabbage-staging"
  config.to = "cabbage-production"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.after do
    puts "It's Miller time"
  end
end

A slightly more complex example which will create 6 rake tasks: stage:before_stage, stage, stage:after_stage, promote:before_promote, promote, promote:after_promote

require "kapost_deploy/task"
require "kapost_deploy/plugins/slack_after_promote"
require "kapost_deploy/plugins/slack_github_diff"
require "kapost_deploy/plugins/db_migrate"

CONFIG = {
  slack_config: {
    webhook_url: "https://hooks.slack.com/services/34326/FDSJFH127/68357sdhfjhHSJGFNMDngsd",
    channel: "#danger",
    icon_url: "http://yourcompany.s3.amazonaws.com/logo.png"
  },
  git_config: {
    github_repo: "yourcompany/widget"
  }
}.freeze

KapostDeploy::Task.define(:stage) do |config|
  config.app = "cabbage-staging"
  config.to = "cabbage-sandbox"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.options = CONFIG

  config.after do
    sleep 60*2 wait for dynos to restart
    slack.notify "The eagle has landed. [Go validate](https://testbed.sandbox.com/dashboard)!"
    Launchy.open("https://testbed.sandbox.com/dashboard")
  end

  config.add_plugin(KapostDeploy::Plugins::DbMigrate)
end

KapostDeploy::Task.define do |config|
  config.app = "cabbage-sandboxc"
  config.to = "cabbage-production"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.options = CONFIG

  config.before do
    puts "Are you sure you did x, y, and z? yes/no: "
    confirm = gets.strip
    exit(1) unless confirm.downcase == "yes"
  end

  config.add_plugin(KapostDeploy::Plugins::SlackGithubDiff)
  config.add_plugin(KapostDeploy::Plugins::DbMigrate)
  config.add_plugin(KapostDeploy::Plugins::SlackAfterPromote)
end

Requirements

  1. MRI 2.3.0
  2. Heroku Toolbelt installed

Configuration Options

  • pipeline: The application pipeline to promote
  • heroku_api_token: Your platform api token. You can retrieve this using heroku auth:token
  • app: The application to be promoted
  • to: The downstream application(s) to receive the promotion. For multiple environments, use an array.
  • options: An options hash containing plugin options:
    • git_config: If using github plugins, an options hash containing the following keys:
    • github_repo: The owner/repo string, such as kapost/kapost_deploy
    • slack_config: If using slack plugins, an options hash containing the following keys:
    • webhook_url: The webhook URL you added to your slack integrations
    • username: The apparent username of the notifier defaults to "webhooks bot"
    • channel: The channel name to post the notification to defaults to "#general"
    • icon_url: A URL for the icon image optional
    • icon_emoji: Emoji name to use instead of an icon optional

Setup

To install, type the following:

gem install kapost_deploy

Add the following to your Gemfile:

gem "kapost_deploy"

Tests

To test, run:

bundle exec rake

Versioning

Read Semantic Versioning for details. Briefly, it means:

  • Patch (x.y.Z) - Incremented for small, backwards compatible bug fixes.
  • Minor (x.Y.z) - Incremented for new, backwards compatible public API enhancements and/or bug fixes.
  • Major (X.y.z) - Incremented for any backwards incompatible public API changes.

Contributions

Fork the project. Make your feature addition or bug fix. Do not bump the version number. Send me a pull request. Bonus points for topic branches.

License

MIT

Copyright (c) 2016 Kapost.

History

Read the CHANGELOG for details. Built with Gemsmith.

Credits

Developed by Brandon Croft at [email protected].