bonethug 0.0.73 → 0.0.75
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.
- data/README.md +18 -63
- data/TODO.txt +3 -2
- data/config/deploy.rb +31 -30
- data/lib/bonethug/cli.rb +64 -17
- data/lib/bonethug/installer.rb +3 -3
- data/lib/bonethug/syncer.rb +113 -0
- data/lib/bonethug/utils.rb +23 -23
- data/lib/bonethug/version.rb +2 -2
- data/lib/bonethug.rb +1 -0
- data/skel/project_types/drupal/composer.json +359 -20
- data/skel/project_types/drupal/drupal-console +3 -0
- data/skel/project_types/drupal/lib/boris.php +7 -0
- data/skel/project_types/drupal/lib/drupal_bootstrap.php +13 -0
- data/skel/project_types/drupal/lib/drupal_flush_cache.php +5 -0
- data/skel/project_types/drupal6/composer.json +359 -20
- data/skel/project_types/drupal6/drupal-console +3 -0
- data/skel/project_types/drupal6/lib/boris.php +7 -0
- data/skel/project_types/drupal6/lib/drupal_bootstrap.php +13 -0
- data/skel/project_types/drupal6/lib/drupal_flush_cache.php +5 -0
- data/skel/project_types/drupal7/composer.json +347 -8
- data/skel/project_types/drupal7/drupal-console +3 -0
- data/skel/project_types/drupal7/lib/boris.php +7 -0
- data/skel/project_types/drupal7/lib/drupal_bootstrap.php +13 -0
- data/skel/project_types/drupal7/lib/drupal_flush_cache.php +5 -0
- data/skel/project_types/drupal8/composer.json +359 -20
- data/skel/project_types/drupal8/drupal-console +3 -0
- data/skel/project_types/drupal8/lib/boris.php +7 -0
- data/skel/project_types/drupal8/lib/drupal_bootstrap.php +13 -0
- data/skel/project_types/drupal8/lib/drupal_flush_cache.php +5 -0
- data/skel/project_types/silverstripe3/bower.json +7 -5
- data/skel/project_types/silverstripe3/composer.json +2 -1
- data/skel/project_types/silverstripe3/lib/boris.php +7 -0
- data/skel/project_types/silverstripe3/lib/ss_bootstrap.php +123 -0
- data/skel/project_types/silverstripe3/lib/ss_loadconf.php +104 -104
- data/skel/project_types/silverstripe3/public/.htaccess +1 -1
- data/skel/project_types/silverstripe3/public/project/_config.php +17 -17
- data/skel/project_types/silverstripe3/public/project/code/DataObjects/.gitkeep +0 -0
- data/skel/project_types/silverstripe3/public/themes/project/scss/_base.scss +58 -0
- data/skel/project_types/silverstripe3/public/themes/project/scss/_colours.scss +12 -0
- data/skel/project_types/silverstripe3/public/themes/project/scss/_functions.scss +18 -14
- data/skel/project_types/silverstripe3/public/themes/project/scss/_mixins.scss +17 -9
- data/skel/project_types/silverstripe3/public/themes/project/scss/_vars.scss +5 -2
- data/skel/project_types/silverstripe3/public/themes/project/scss/main.scss +26 -3
- data/skel/project_types/silverstripe3/public/themes/project/scss/typography.scss +28 -26
- data/skel/project_types/silverstripe3/ss-console +3 -0
- data/skel/skel.yml +39 -24
- metadata +27 -8
- data/config/syncer.rb +0 -101
- data/skel/project_types/drupal6/lib/flush_drupal_cache.php +0 -15
- data/skel/project_types/drupal7/lib/flush_drupal_cache.php +0 -15
- data/skel/project_types/drupal8/lib/flush_drupal_cache.php +0 -11
    
        data/README.md
    CHANGED
    
    | @@ -121,24 +121,6 @@ settings in your config/cnf.yml file* | |
| 121 121 |  | 
| 122 122 | 
             
            ### Remote Commands
         | 
| 123 123 |  | 
| 124 | 
            -
            *UPDATE:* Bonethug now supports interactive prompts so this may no longer be
         | 
| 125 | 
            -
            necessary
         | 
| 126 | 
            -
             | 
| 127 | 
            -
            Most of these are piped through mina.  Mina uses SSH to send a bash script to
         | 
| 128 | 
            -
            the remote server where it is executed.  For these commands to work you need to
         | 
| 129 | 
            -
            have the desired host already added to your known hosts file: ~/.ssh/known_hosts
         | 
| 130 | 
            -
            which means you can either connect to the host first, manually add it or switch
         | 
| 131 | 
            -
            off the checking by adding the following to ~/.ssh/config.
         | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 136 | 
            -
            Host *
         | 
| 137 | 
            -
                StrictHostKeyChecking no
         | 
| 138 | 
            -
                UserKnownHostsFile=/dev/null
         | 
| 139 | 
            -
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 124 |  | 
| 143 125 | 
             
            **Setup a remote server**
         | 
| 144 126 |  | 
| @@ -210,20 +192,17 @@ wipe the files from your deploy copy. | |
| 210 192 |  | 
| 211 193 | 
             
            *Sync local application state from another application environment*
         | 
| 212 194 |  | 
| 213 | 
            -
            `thug sync-local | 
| 195 | 
            +
            `thug sync-state push-to-local {local-environment} pull-from-remote {environment-to-pull-data-from}`
         | 
| 214 196 |  | 
| 215 197 | 
             
            *Sync another application's state in another environment to the local application state*
         | 
| 216 198 |  | 
| 217 | 
            -
            `thug sync-local | 
| 199 | 
            +
            `thug sync-state pull-from-local {local-environment} push-to-remote {environment-to-push-data-to}`
         | 
| 218 200 |  | 
| 219 201 |  | 
| 220 202 | 
             
            *Sync remote application state with the application state environment - this wraps mina to trigger the sync actions above on a remote server*
         | 
| 221 203 |  | 
| 222 | 
            -
            `thug sync- | 
| 223 | 
            -
             | 
| 224 | 
            -
            *Sync another application's state in another environment to the local application state*
         | 
| 204 | 
            +
            `thug sync-state pull-from-remote {environment-to-pull-data-from} push-to-remote {environment-to-push-data-to}`
         | 
| 225 205 |  | 
| 226 | 
            -
            `thug sync-backup-to {environment-to-push-data-to} {environment-to-pull-data-from}`
         | 
| 227 206 |  | 
| 228 207 |  | 
| 229 208 | 
             
            Example Workflow
         | 
| @@ -246,6 +225,9 @@ bower install | |
| 246 225 |  | 
| 247 226 | 
             
            # --> edit the config/cnf.yml file!!
         | 
| 248 227 |  | 
| 228 | 
            +
            # setup local db
         | 
| 229 | 
            +
            thug init-db local
         | 
| 230 | 
            +
             | 
| 249 231 | 
             
            # watch for changes to sass and coffeescript
         | 
| 250 232 | 
             
            thug watch
         | 
| 251 233 |  | 
| @@ -262,6 +244,12 @@ thug setup-env staging | |
| 262 244 | 
             
            thug init-db staging
         | 
| 263 245 | 
             
            thug setup staging
         | 
| 264 246 | 
             
            thug deploy staging
         | 
| 247 | 
            +
             | 
| 248 | 
            +
            # push the db and assets up to staging
         | 
| 249 | 
            +
            thug sync-state pull-from-local development push-to-remote staging
         | 
| 250 | 
            +
             | 
| 251 | 
            +
            # pull the db and assets up down to local
         | 
| 252 | 
            +
            thug sync-state pull-from-remote staging push-to-local development
         | 
| 265 253 | 
             
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 266 254 |  | 
| 267 255 |  | 
| @@ -291,45 +279,12 @@ What isn't implemented yet? | |
| 291 279 | 
             
            ---------------------------
         | 
| 292 280 |  | 
| 293 281 |  | 
| 294 | 
            -
             | 
| 295 | 
            -
             | 
| 296 | 
            -
             | 
| 297 | 
            -
             | 
| 298 | 
            -
             | 
| 299 | 
            -
             | 
| 300 | 
            -
            # clone the repo and install the gems
         | 
| 301 | 
            -
            git clone git@git.domain.com:namespace/project-name.git .
         | 
| 302 | 
            -
            bundle install --path vendor
         | 
| 303 | 
            -
             | 
| 304 | 
            -
            # setup local db
         | 
| 305 | 
            -
            thug init-local-db staging
         | 
| 306 | 
            -
             | 
| 307 | 
            -
            # add ssh key
         | 
| 308 | 
            -
            thug auth staging
         | 
| 309 | 
            -
             | 
| 310 | 
            -
            # do file sync
         | 
| 311 | 
            -
            thug sync-from staging
         | 
| 312 | 
            -
             | 
| 313 | 
            -
            # do db sync
         | 
| 314 | 
            -
            thug sync-local-db staging development
         | 
| 315 | 
            -
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 316 | 
            -
             | 
| 317 | 
            -
             | 
| 318 | 
            -
             | 
| 319 | 
            -
            ### Push local assets etc to a remote (WIP)
         | 
| 320 | 
            -
             | 
| 321 | 
            -
             | 
| 322 | 
            -
             | 
| 323 | 
            -
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 324 | 
            -
            # add ssh key
         | 
| 325 | 
            -
            thug auth staging
         | 
| 326 | 
            -
             | 
| 327 | 
            -
            # do file sync
         | 
| 328 | 
            -
            thug sync-to staging
         | 
| 329 | 
            -
             | 
| 330 | 
            -
            # do db sync
         | 
| 331 | 
            -
            thug sync-remote-db development staging
         | 
| 332 | 
            -
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | 
| 282 | 
            +
            - sync of just db between envs
         | 
| 283 | 
            +
            - sync of just files between envs
         | 
| 284 | 
            +
            - remove a deployment from a target
         | 
| 285 | 
            +
            - support for more project types
         | 
| 286 | 
            +
            - support for other OSes
         | 
| 287 | 
            +
            - support for nginx
         | 
| 333 288 |  | 
| 334 289 |  | 
| 335 290 |  | 
    
        data/TODO.txt
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            - Create front end skeleton
         | 
| 2 2 | 
             
            - Need to have project specific cnf.yml files
         | 
| 3 | 
            -
            - Local sync for assets
         | 
| 4 3 | 
             
            - thug auth {staging|production} - this would inject your ssh pub key into the authorized_keys file
         | 
| 5 | 
            -
            - need to allow support for other environment types
         | 
| 4 | 
            +
            - need to allow support for other environment types
         | 
| 5 | 
            +
            - have some sort of composer.json merge
         | 
| 6 | 
            +
            - thug update needs stil needs to be run twice because the current version gets loaded into memory - need to run some sort of two phase update
         | 
    
        data/config/deploy.rb
    CHANGED
    
    | @@ -24,8 +24,14 @@ require 'mina/whenever' | |
| 24 24 | 
             
            # Config
         | 
| 25 25 | 
             
            # ---------------------------------------------------------------
         | 
| 26 26 |  | 
| 27 | 
            -
            #  | 
| 28 | 
            -
             | 
| 27 | 
            +
            # exec env
         | 
| 28 | 
            +
            exec_path   = File.expand_path(File.dirname(__FILE__) + '/..')
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            # load config
         | 
| 31 | 
            +
            conf = Bonethug::Conf.new.add(exec_path + '/config/cnf.yml')
         | 
| 32 | 
            +
            conf.add(exec_path + '/config/database.yml' => { root: 'dbs.default' }) if File.exist? exec_path + '/config/database.yml'
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            # generate a hash
         | 
| 29 35 | 
             
            cnf = conf.to_hash
         | 
| 30 36 |  | 
| 31 37 | 
             
            # pull config from environment vars
         | 
| @@ -146,15 +152,16 @@ end | |
| 146 152 |  | 
| 147 153 | 
             
            desc "init a db based on the settings in your cnf file"
         | 
| 148 154 | 
             
            task :init_db => :environment do
         | 
| 149 | 
            -
             | 
| 150 | 
            -
               | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 155 | 
            +
              dbs = conf.get 'dbs'
         | 
| 156 | 
            +
              if dbs
         | 
| 157 | 
            +
                dbs.each do |name,envs|
         | 
| 158 | 
            +
                  if envs
         | 
| 159 | 
            +
                    db = envs.get env
         | 
| 160 | 
            +
                    cmd = Bonethug::Installer.init_mysql_db_script db, deploy_to + '/current', ENV['admin_user']
         | 
| 161 | 
            +
                    queue! %[#{cmd}]
         | 
| 162 | 
            +
                  end
         | 
| 163 | 
            +
                end
         | 
| 156 164 | 
             
              end
         | 
| 157 | 
            -
             | 
| 158 165 | 
             
            end
         | 
| 159 166 |  | 
| 160 167 | 
             
            desc "Initialises the db"
         | 
| @@ -163,12 +170,17 @@ task :setup_db => :environment do | |
| 163 170 | 
             
              #rails
         | 
| 164 171 | 
             
              queue! %[cd #{deploy_to}/current && bundle exec rake db:reset RAILS_ENV="#{env}"] if deploy.get('project_type') =~ /rails[0-9]?/
         | 
| 165 172 |  | 
| 166 | 
            -
              #  | 
| 173 | 
            +
              # drupal
         | 
| 167 174 | 
             
              if deploy.get('project_type') =~ /drupal[0-9]?/
         | 
| 168 | 
            -
                conf.get | 
| 169 | 
            -
             | 
| 170 | 
            -
                   | 
| 171 | 
            -
             | 
| 175 | 
            +
                dbs = conf.get 'dbs'
         | 
| 176 | 
            +
                if dbs
         | 
| 177 | 
            +
                  dbs.each do |name,envs|
         | 
| 178 | 
            +
                    if envs
         | 
| 179 | 
            +
                      db = envs.get env
         | 
| 180 | 
            +
                      db_url = "mysql://#{db.get('user')}:#{db.get('pass')}@#{db.get('host')}/#{db.get('name')}"
         | 
| 181 | 
            +
                      queue! %[export APPLICATION_ENV=#{env} && cd #{deploy_to}/current/public && ../vendor/bin/drush site-install standard --account-name=admin --account-pass=admin --db-url=#{db_url}"]
         | 
| 182 | 
            +
                    end
         | 
| 183 | 
            +
                  end
         | 
| 172 184 | 
             
                end
         | 
| 173 185 | 
             
              end
         | 
| 174 186 |  | 
| @@ -180,7 +192,7 @@ task :backup => :environment do | |
| 180 192 | 
             
            end
         | 
| 181 193 |  | 
| 182 194 | 
             
            desc "Syncs application state between two remote environments"
         | 
| 183 | 
            -
            task : | 
| 195 | 
            +
            task :sync_state => :environment do
         | 
| 184 196 |  | 
| 185 197 | 
             
              remote_env = ENV['remote_env']
         | 
| 186 198 |  | 
| @@ -189,20 +201,9 @@ task :sync_remote_from => :environment do | |
| 189 201 | 
             
                exit
         | 
| 190 202 | 
             
              end
         | 
| 191 203 |  | 
| 192 | 
            -
              queue! %[cd #{deploy_to}/current &&  | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 195 | 
            -
            desc "Syncs application state between two remote environments"
         | 
| 196 | 
            -
            task :sync_remote_to => :environment do
         | 
| 197 | 
            -
             | 
| 198 | 
            -
              remote_env = ENV['remote_env']
         | 
| 199 | 
            -
             | 
| 200 | 
            -
              unless conf.get('deploy.environments').has_key? remote_env
         | 
| 201 | 
            -
                puts 'could not find remote deployment environment'
         | 
| 202 | 
            -
                exit
         | 
| 203 | 
            -
              end
         | 
| 204 | 
            +
              #queue! %[cd #{deploy_to}/current && ruby .bonethug/syncer.rb local #{env} remote #{remote_env}]
         | 
| 205 | 
            +
              queue! %[cd #{deploy_to}/current && bundle exec thug sync-state pull-from-local #{env} push-to-remote #{remote_env}]
         | 
| 204 206 |  | 
| 205 | 
            -
              queue! %[cd #{deploy_to}/current && bundle exec thug sync-local-to #{env} #{remote_env}]
         | 
| 206 207 | 
             
            end
         | 
| 207 208 |  | 
| 208 209 | 
             
            desc "Syncs backup with a location"
         | 
| @@ -413,7 +414,7 @@ task :deploy => :environment do | |
| 413 414 |  | 
| 414 415 | 
             
                  # run cache flushes / manifest rebuilds
         | 
| 415 416 | 
             
                  queue! %[export APPLICATION_ENV=#{env} && php #{deploy_to}/current/public/framework/cli-script.php dev/build] if ['silverstripe','silverstripe3'].include? deploy.get('project_type')
         | 
| 416 | 
            -
                  queue! %[export APPLICATION_ENV=#{env} && cd #{deploy_to}/current/lib && php  | 
| 417 | 
            +
                  queue! %[export APPLICATION_ENV=#{env} && cd #{deploy_to}/current/lib && php drupal_flush_cache.php] if ['drupal','drupal6','drupal7','drupal8'].include? deploy.get('project_type')
         | 
| 417 418 |  | 
| 418 419 | 
             
                  # run any project scripts
         | 
| 419 420 | 
             
                  # purge combined files for ss
         | 
    
        data/lib/bonethug/cli.rb
    CHANGED
    
    | @@ -158,31 +158,78 @@ module Bonethug | |
| 158 158 |  | 
| 159 159 | 
             
                    end
         | 
| 160 160 |  | 
| 161 | 
            -
                  when  'sync- | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 161 | 
            +
                  when  'sync-state'
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                    # operation whitelist
         | 
| 164 | 
            +
                    operations = ['pull-from-local', 'push-to-local', 'pull-from-remote', 'push-to-remote']
         | 
| 165 165 |  | 
| 166 166 | 
             
                    # args
         | 
| 167 | 
            -
                     | 
| 168 | 
            -
                     | 
| 167 | 
            +
                    operation1 = ARGV[1]
         | 
| 168 | 
            +
                    env1       = ARGV[2]
         | 
| 169 | 
            +
                    operation2 = ARGV[3]
         | 
| 170 | 
            +
                    env2       = ARGV[4]
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    puts
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                    # validate operation whitelist
         | 
| 175 | 
            +
                    valid_operation = operations.include?(operation1) and operations.include?(operation2)
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                    # ensure there is both a pull and push operation
         | 
| 178 | 
            +
                    if valid_operation
         | 
| 179 | 
            +
                      has_pull = (operation1 == 'pull-from-local' or operation2 == 'pull-from-local' or operation1 == 'pull-from-remote' or operation2 == 'pull-from-remote')
         | 
| 180 | 
            +
                      has_push = (operation1 == 'push-to-local'   or operation2 == 'push-to-local'   or operation1 == 'push-to-remote'   or operation2 == 'push-to-remote')
         | 
| 181 | 
            +
                      valid_operation = has_push and has_push
         | 
| 182 | 
            +
                    end
         | 
| 169 183 |  | 
| 170 184 | 
             
                    # validate
         | 
| 171 | 
            -
                    unless  | 
| 172 | 
            -
                      puts 'Usage: thug  | 
| 173 | 
            -
                       | 
| 185 | 
            +
                    unless operation1 and operation2 and env1 and env2 and valid_operation
         | 
| 186 | 
            +
                      puts 'Usage: thug sync-state [pull-from-{local|remote}] [environment] [push-to-{local|remote}] [environment]'
         | 
| 187 | 
            +
                      exit
         | 
| 188 | 
            +
                    end
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                    # process env data
         | 
| 191 | 
            +
                    pull_env = (operation1 == 'pull-from-remote' or operation1 =='pull-from-local') ? env1 : env2
         | 
| 192 | 
            +
                    push_env = (operation1 == 'push-to-remote'   or operation1 =='push-to-local')   ? env1 : env2
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                    # process operation1
         | 
| 195 | 
            +
                    case operation1
         | 
| 196 | 
            +
                    when 'pull-from-local'
         | 
| 197 | 
            +
                      pull_operation = 'local'
         | 
| 198 | 
            +
                    when 'pull-from-remote'
         | 
| 199 | 
            +
                      pull_operation = 'remote'
         | 
| 200 | 
            +
                    when 'push-to-local'
         | 
| 201 | 
            +
                      push_operation = 'local'
         | 
| 202 | 
            +
                    when 'push-to-remote'
         | 
| 203 | 
            +
                      push_operation = 'remote'
         | 
| 204 | 
            +
                    end
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                    # process operation2
         | 
| 207 | 
            +
                    case operation2
         | 
| 208 | 
            +
                    when 'pull-from-local'
         | 
| 209 | 
            +
                      pull_operation = 'local'
         | 
| 210 | 
            +
                    when 'pull-from-remote'
         | 
| 211 | 
            +
                      pull_operation = 'remote'
         | 
| 212 | 
            +
                    when 'push-to-local'
         | 
| 213 | 
            +
                      push_operation = 'local'
         | 
| 214 | 
            +
                    when 'push-to-remote'
         | 
| 215 | 
            +
                      push_operation = 'remote'
         | 
| 216 | 
            +
                    end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                    # stop here if its a local to local because we wont know the file system location of the non-calling local
         | 
| 219 | 
            +
                    if pull_operation == 'local' and push_operation == 'local'
         | 
| 220 | 
            +
                      puts 'local to local sync is not supported at this time'
         | 
| 221 | 
            +
                      exit
         | 
| 174 222 | 
             
                    end
         | 
| 175 223 |  | 
| 176 224 | 
             
                    # Do Sync
         | 
| 177 | 
            -
                     | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
                      exec "export to=#{ | 
| 182 | 
            -
                    when 'sync-remote-from'
         | 
| 183 | 
            -
                      exec "export to=#{env_local} && export remote_env=#{env_remote} && bundle exec mina -f .bonethug/deploy.rb sync_remote_from --verbose"
         | 
| 225 | 
            +
                    if pull_operation == 'local' or push_operation == 'local'
         | 
| 226 | 
            +
                      Syncer.sync pull_operation, pull_env, push_operation, push_env
         | 
| 227 | 
            +
                    else
         | 
| 228 | 
            +
                      # this will call ruby .bonethug/syncer.rb local #{pull_env} remote #{push_env}
         | 
| 229 | 
            +
                      exec "export to=#{pull_env} && export remote_env=#{push_env} && bundle exec mina -f .bonethug/deploy.rb sync_state --verbose"
         | 
| 184 230 | 
             
                    end
         | 
| 185 231 |  | 
| 232 | 
            +
             | 
| 186 233 | 
             
                  when  'deploy',
         | 
| 187 234 | 
             
                        'setup',
         | 
| 188 235 | 
             
                        'remote-backup',
         | 
| @@ -242,7 +289,7 @@ module Bonethug | |
| 242 289 | 
             
                  when 'clean'
         | 
| 243 290 |  | 
| 244 291 | 
             
                    location = ARGV[1] || '.'
         | 
| 245 | 
            -
                    Installer.clean location | 
| 292 | 
            +
                    Installer.clean location
         | 
| 246 293 |  | 
| 247 294 | 
             
                  else
         | 
| 248 295 |  | 
    
        data/lib/bonethug/installer.rb
    CHANGED
    
    | @@ -24,7 +24,7 @@ module Bonethug | |
| 24 24 | 
             
                @@bonthug_gem_dir = File.expand_path(File.dirname(__FILE__) + '/../..')
         | 
| 25 25 | 
             
                @@skel_dir = @@bonthug_gem_dir + '/skel'
         | 
| 26 26 | 
             
                @@conf = Conf.new.add(@@skel_dir + '/skel.yml')
         | 
| 27 | 
            -
                @@project_config_files = {editable: ['cnf.yml','schedule.rb'], generated: [' | 
| 27 | 
            +
                @@project_config_files = {editable: ['cnf.yml','schedule.rb'], generated: ['backup.rb','deploy.rb']}
         | 
| 28 28 |  | 
| 29 29 | 
             
                def self.install(type, target = '.')
         | 
| 30 30 |  | 
| @@ -137,7 +137,7 @@ module Bonethug | |
| 137 137 |  | 
| 138 138 | 
             
                  script_content = "
         | 
| 139 139 | 
             
                    CREATE DATABASE IF NOT EXISTS " + db.get('name') + ";
         | 
| 140 | 
            -
                    GRANT ALL ON " + db.get('name') + ".* TO " + db.get('user') + "@" + db.get('host') + (db.get('pass') ? " IDENTIFIED BY " + db.get('pass') : "") + ";     
         | 
| 140 | 
            +
                    GRANT ALL ON " + db.get('name') + ".* TO " + db.get('user') + "@" + db.get('host') + (db.get('pass') ? " IDENTIFIED BY '" + db.get('pass') + "'" : "") + ";     
         | 
| 141 141 | 
             
                    FLUSH PRIVILEGES;
         | 
| 142 142 | 
             
                  "
         | 
| 143 143 | 
             
                  cmd = 'cd ' + path + ' && ' +
         | 
| @@ -335,7 +335,7 @@ module Bonethug | |
| 335 335 |  | 
| 336 336 | 
             
                      if gem_reg =~ gemfile_contents
         | 
| 337 337 | 
             
                        puts 'Found '+gem_name+' in gem file.'
         | 
| 338 | 
            -
                        if github | 
| 338 | 
            +
                        if github
         | 
| 339 339 | 
             
                          puts 'Requires github version, checking...'
         | 
| 340 340 | 
             
                          unless git_reg =~ gemfile_contents
         | 
| 341 341 | 
             
                            puts 'Couldn\'t find '+gem_name+' (github) in gem file adding...'
         | 
| @@ -0,0 +1,113 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require 'rubygems'
         | 
| 3 | 
            +
            require 'bonethug/conf'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Bonethug
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              class Syncer
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def self.sync(pull, pull_env, push, push_env)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # exec env
         | 
| 12 | 
            +
                  exec_path   = File.expand_path('.')
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # load config
         | 
| 15 | 
            +
                  conf = Bonethug::Conf.new.add(exec_path + '/config/cnf.yml')
         | 
| 16 | 
            +
                  conf.add(exec_path + '/config/database.yml' => { root: 'dbs.default' }) if File.exist? exec_path + '/config/database.yml'
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  # extract some data
         | 
| 19 | 
            +
                  cnf  = conf.to_hash
         | 
| 20 | 
            +
                  envs = conf.get('deploy.environments').to_hash
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  # validate
         | 
| 23 | 
            +
                  unless pull and pull_env and push and push_env
         | 
| 24 | 
            +
                    puts 'Usage: syncer.rb [pull target] [pull environment] [push target] [push environment]'
         | 
| 25 | 
            +
                    exit
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  unless envs.has_key? pull_env
         | 
| 29 | 
            +
                    puts 'could not find pull environment'
         | 
| 30 | 
            +
                    exit
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  unless envs.has_key? push_env
         | 
| 34 | 
            +
                    puts 'could not find push environment'
         | 
| 35 | 
            +
                    exit
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  if pull == 'local' and push == 'local'
         | 
| 39 | 
            +
                    puts 'local to local sync is not supported at this time'
         | 
| 40 | 
            +
                    exit
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  if pull == 'remote' and push == 'remote'
         | 
| 44 | 
            +
                    puts 'remote to remote sync is not supported via this interface'
         | 
| 45 | 
            +
                    exit
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  # identify the local and the remote
         | 
| 49 | 
            +
                  env_local  = pull == 'local' ? pull_env : push_env
         | 
| 50 | 
            +
                  env_remote = pull == 'local' ? push_env : pull_env
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  # build config
         | 
| 53 | 
            +
                  dbs           = conf.get 'dbs'
         | 
| 54 | 
            +
                  remote_deploy = conf.node_merge 'deploy.common', 'deploy.environments.' + env_remote
         | 
| 55 | 
            +
                  local_deploy  = conf.node_merge 'deploy.common', 'deploy.environments.' + env_local
         | 
| 56 | 
            +
                  resources     = conf.get('resources','Array') || []
         | 
| 57 | 
            +
                  log_dirs      = conf.get('log_dirs','Array') || []
         | 
| 58 | 
            +
                  remote_vhost  = remote_deploy.get('project_slug') + '_' + env_remote
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  # directories we need to track
         | 
| 61 | 
            +
                  resources += ['backups']
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  # logs
         | 
| 64 | 
            +
                  log_dirs.push 'log' unless log_dirs.include? 'log'
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  # do the common work
         | 
| 67 | 
            +
                  remote_path = remote_deploy.get('base_dir') + '/' + remote_vhost
         | 
| 68 | 
            +
                  remote_ssh  = "ssh -p #{remote_deploy.get 'port'} #{remote_deploy.get 'user'}@#{remote_deploy.get 'domain'}"
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  # output
         | 
| 71 | 
            +
                  puts "Cloning Databases... "
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  # output
         | 
| 74 | 
            +
                  dbs.each do |index, db|
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    db_remote = db.get env_remote
         | 
| 77 | 
            +
                    db_local  = db.get env_local
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                    if push == 'local' and pull == 'remote'
         | 
| 80 | 
            +
                      cmd = "#{remote_ssh} \"mysqldump -u #{db_remote.get 'user'} -p#{db_remote.get 'pass'} #{db_remote.get 'name'} --verbose | bzip2 -c\" | bunzip2 -c | mysql -u #{db_local.get 'user'} -p#{db_local.get 'pass'} #{db_local.get 'name'}"
         | 
| 81 | 
            +
                    elsif pull == 'local' and push == 'remote'
         | 
| 82 | 
            +
                      cmd = "mysqldump -u #{db_local.get 'user'} -p#{db_local.get 'pass'} #{db_local.get 'name'} --verbose | bzip2 -c | #{remote_ssh} \"bunzip2 -c | mysql -u #{db_remote.get 'user'} -p#{db_remote.get 'pass'} #{db_remote.get 'name'}\""
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                    puts cmd
         | 
| 86 | 
            +
                    system cmd
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  puts "Done."
         | 
| 91 | 
            +
                  puts "Syncing Files... "
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  # sync the files
         | 
| 94 | 
            +
                  (resources + log_dirs).each do |item|
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                    if push == 'local' and pull == 'remote'
         | 
| 97 | 
            +
                      cmd = "rsync -zrav -e \"ssh -p #{remote_deploy.get('port')} -l #{remote_deploy.get('user')}\" --delete --copy-dirlinks #{remote_deploy.get('domain')}:#{remote_path}/current/#{item}/ #{exec_path}/#{item}/"
         | 
| 98 | 
            +
                    elsif pull == 'local' and push == 'remote'
         | 
| 99 | 
            +
                      cmd = "rsync -zrav -e \"ssh -p #{remote_deploy.get('port')} -l #{remote_deploy.get('user')}\" --delete --copy-dirlinks #{exec_path}/#{item}/ #{remote_deploy.get('domain')}:#{remote_path}/current/#{item}/"
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    puts cmd
         | 
| 103 | 
            +
                    system cmd
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                  puts "Done."
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            end
         | 
    
        data/lib/bonethug/utils.rb
    CHANGED
    
    | @@ -1,24 +1,24 @@ | |
| 1 | 
            -
            require 'fileutils'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Bonethug
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              #arguments can be for example db:migrate
         | 
| 6 | 
            -
              def self.call_rake(arguments)
         | 
| 7 | 
            -
                if RUBY_PLATFORM =~ /mswin/
         | 
| 8 | 
            -
                  rake_cmd = "rake.bat" #very important because windows will break with just "rake"
         | 
| 9 | 
            -
                else
         | 
| 10 | 
            -
                  rake_cmd = "rake"
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
                puts "calling #{rake_cmd} " + arguments
         | 
| 13 | 
            -
                puts system("#{rake_cmd} " + arguments)
         | 
| 14 | 
            -
                puts $?
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
              def self.setup_gitpull(target = '.')
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                path = File.expand_path target
         | 
| 20 | 
            -
                `chown www-data #{path}`
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
             | 
| 1 | 
            +
            require 'fileutils'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Bonethug
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              #arguments can be for example db:migrate
         | 
| 6 | 
            +
              def self.call_rake(arguments)
         | 
| 7 | 
            +
                if RUBY_PLATFORM =~ /mswin/
         | 
| 8 | 
            +
                  rake_cmd = "rake.bat" #very important because windows will break with just "rake"
         | 
| 9 | 
            +
                else
         | 
| 10 | 
            +
                  rake_cmd = "rake"
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                puts "calling #{rake_cmd} " + arguments
         | 
| 13 | 
            +
                puts system("#{rake_cmd} " + arguments)
         | 
| 14 | 
            +
                puts $?
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def self.setup_gitpull(target = '.')
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                path = File.expand_path target
         | 
| 20 | 
            +
                `chown www-data #{path}`
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 24 | 
             
            end
         | 
    
        data/lib/bonethug/version.rb
    CHANGED