Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuous Delivery at GitHub

Rob Sanheim
September 18, 2014

Continuous Delivery at GitHub

Rob Sanheim

September 18, 2014
Tweet

Other Decks in Programming

Transcript

  1. !

  2. Releases over one year Release 1 Build Test Deploy Bugs

    Change Requests Release 2 Build Test, Perf, Scaling Deploy Support Requests Complaints QA Revenue $$
  3. Releases over half a year Build Deploy Bugs Issues Team

    Feedback Build & Scale Deploy Bugs Perf Staff Feedback Build Deploy Bugs Genpop Feedback Polish Deploy Bugs Genpop Feedback Polish Deploy Profit - Done!
  4. ! SLOC! ! ! ! Directory! ! 60995 test/models! 34526

    test/integration! 31106 test/controllers! 25339 test/lib! 12440 test/view_models! 1423 test/jobs! 1029 test/mailers! ! ! ! ruby test loc: 167k! ruby app loc: 158k! ! test / app ratio: 1.06! ! ! generated using David A. Wheeler's 'SLOCCount'
  5. !

  6. ! ! ! $ RAILS3=true script/bootstrap Bootstrapping the Rails 3

    gem environment… ! $ script/bootstrap Bootstrapping the Rails 2 gem environment…
  7. ! source "https://rubygems.org" ! def rails3? ENV["RAILS3"] end ! if

    rails3? gem "rails", "3.0.20.github11" else gem "rails", "2.3.14.github50" gem "actionmailer", "2.3.14.github50" gem "actionpack", "2.3.14.github50" gem "activerecord", "2.3.14.github50" gem "activesupport", "2.3.14.github50" end ! gem "will_paginate", rails3? ? "3.0.3" : "2.3.9.github"
  8. ! ! # Disable plugins on Rails 3 GitHub.only_on_rails_3 do

    config.plugins = [] end ! # Rails 2 needs the session to be configured before initializing GitHub.only_on_rails_2 do require_relative "initializers/session_store" end
  9. ! require "dat/science" ! class User include Dat::Science ! def

    can_read?(model) science "user-can-read" do |e| e.context :caller => caller, :login => login e.enabled { self.id % 3 == 0 } e.control { model.readable_by?(user) } # old way e.candidate { self.can?(:read, model) } # new way end end end
  10. !

  11. ! /deploy github/my-feature to production /deploy github/my-feature to branch-lab /deploy

    github/my-feature to production/fe1,fe2,fe3 /deploy github to production /ci build github/master /queue me for github
  12. !