boxen 2.9.0 → 3.0.0.beta1
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/boxen.gemspec +12 -12
 - data/lib/boxen/check.rb +8 -39
 - data/lib/boxen/cli.rb +19 -45
 - data/lib/boxen/command.rb +142 -0
 - data/lib/boxen/command/help.rb +40 -0
 - data/lib/boxen/command/preflight.rb +38 -0
 - data/lib/boxen/command/project.rb +49 -0
 - data/lib/boxen/command/project/install.rb +33 -0
 - data/lib/boxen/command/run.rb +199 -0
 - data/lib/boxen/command/service.rb +61 -0
 - data/lib/boxen/command/service/disable.rb +15 -0
 - data/lib/boxen/command/service/enable.rb +15 -0
 - data/lib/boxen/command/service/restart.rb +24 -0
 - data/lib/boxen/command/version.rb +29 -0
 - data/lib/boxen/command_status.rb +15 -0
 - data/lib/boxen/config.rb +43 -61
 - data/lib/boxen/hook.rb +15 -8
 - data/lib/boxen/keychain.rb +1 -1
 - data/lib/boxen/postflight/env.rb +1 -1
 - data/lib/boxen/postflight/github_issue.rb +124 -0
 - data/lib/boxen/postflight/hooks.rb +16 -0
 - data/lib/boxen/postflight/web_hook.rb +63 -0
 - data/lib/boxen/preflight.rb +4 -7
 - data/lib/boxen/preflight/creds.rb +8 -47
 - data/lib/boxen/preflight/facts.rb +36 -0
 - data/lib/boxen/preflight/homebrew.rb +13 -0
 - data/lib/boxen/preflight/identity.rb +2 -0
 - data/lib/boxen/preflight/offline.rb +33 -0
 - data/lib/boxen/preflight/os.rb +1 -1
 - data/lib/boxen/preflight/update.rb +109 -0
 - data/lib/boxen/util/logging.rb +59 -0
 - data/lib/boxen/version.rb +3 -0
 - data/script/bootstrap +1 -1
 - data/script/tests +1 -0
 - data/test/boxen/test.rb +1 -1
 - data/test/boxen_cli_test.rb +8 -31
 - data/test/boxen_command_test.rb +93 -0
 - data/test/boxen_config_test.rb +1 -31
 - data/test/boxen_directories_test.rb +4 -4
 - data/test/boxen_hook_test.rb +25 -0
 - data/test/command/help_test.rb +49 -0
 - data/test/command/project/install_test.rb +34 -0
 - data/test/command/project_test.rb +32 -0
 - data/test/command/run_test.rb +21 -0
 - data/test/command/service/disable_test.rb +49 -0
 - data/test/command/service/enable_test.rb +49 -0
 - data/test/command/service/restart_test.rb +53 -0
 - data/test/command/service_test.rb +55 -0
 - data/test/command/version_test.rb +15 -0
 - data/test/{boxen_postflight_active_test.rb → postflight/boxen_postflight_active_test.rb} +3 -3
 - data/test/{boxen_postflight_env_test.rb → postflight/boxen_postflight_env_test.rb} +0 -0
 - data/test/{boxen_hook_github_issue_test.rb → postflight/boxen_postflight_github_issue_test.rb} +72 -82
 - data/test/{boxen_hook_web_test.rb → postflight/boxen_postflight_web_hook_test.rb} +12 -11
 - data/test/preflight/boxen_preflight_creds_test.rb +82 -0
 - data/test/{boxen_preflight_etc_my_cnf_test.rb → preflight/boxen_preflight_etc_my_cnf_test.rb} +1 -1
 - data/test/preflight/boxen_preflight_homebrew_test.rb +10 -0
 - data/test/{boxen_preflight_rvm_test.rb → preflight/boxen_preflight_rvm_test.rb} +1 -1
 - metadata +247 -171
 - checksums.yaml +0 -7
 - data/lib/boxen/flags.rb +0 -282
 - data/lib/boxen/hook/github_issue.rb +0 -120
 - data/lib/boxen/hook/web.rb +0 -56
 - data/lib/boxen/puppeteer.rb +0 -121
 - data/lib/boxen/runner.rb +0 -149
 - data/test/boxen_check_test.rb +0 -55
 - data/test/boxen_flags_test.rb +0 -217
 - data/test/boxen_preflight_creds_test.rb +0 -177
 - data/test/boxen_puppeteer_test.rb +0 -101
 - data/test/boxen_runner_test.rb +0 -171
 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command/project"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Boxen::Command::Project::Install < Boxen::Command::Project
         
     | 
| 
      
 4 
     | 
    
         
            +
              def self.detailed_help
         
     | 
| 
      
 5 
     | 
    
         
            +
                <<-EOS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                boxen project:install <project1> [<project2> ...]
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    Install one or more Boxen-managed projects.
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def self.help
         
     | 
| 
      
 15 
     | 
    
         
            +
                "Install one or more projects"
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def run
         
     | 
| 
      
 19 
     | 
    
         
            +
                File.open("#{config.repodir}/.projects", "w+") do |f|
         
     | 
| 
      
 20 
     | 
    
         
            +
                  f.truncate 0
         
     | 
| 
      
 21 
     | 
    
         
            +
                  f.write projects
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                Boxen::Command.invoke 'run', config
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def projects
         
     | 
| 
      
 28 
     | 
    
         
            +
                @args.join ','
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            Boxen::Command.register :"project:install",  Boxen::Command::Project::Install
         
     | 
| 
      
 33 
     | 
    
         
            +
            Boxen::Command.register :"projects:install", Boxen::Command::Project::Install
         
     | 
| 
         @@ -0,0 +1,199 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Boxen::Command::Run < Boxen::Command
         
     | 
| 
      
 4 
     | 
    
         
            +
              preflight \
         
     | 
| 
      
 5 
     | 
    
         
            +
                Boxen::Preflight::OS,
         
     | 
| 
      
 6 
     | 
    
         
            +
                Boxen::Preflight::Directories,
         
     | 
| 
      
 7 
     | 
    
         
            +
                Boxen::Preflight::EtcMyCnf,
         
     | 
| 
      
 8 
     | 
    
         
            +
                Boxen::Preflight::Homebrew,
         
     | 
| 
      
 9 
     | 
    
         
            +
                Boxen::Preflight::Rbenv,
         
     | 
| 
      
 10 
     | 
    
         
            +
                Boxen::Preflight::RVM,
         
     | 
| 
      
 11 
     | 
    
         
            +
                Boxen::Preflight::Offline,
         
     | 
| 
      
 12 
     | 
    
         
            +
                Boxen::Preflight::Creds,
         
     | 
| 
      
 13 
     | 
    
         
            +
                Boxen::Preflight::Identity,
         
     | 
| 
      
 14 
     | 
    
         
            +
                Boxen::Preflight::Update,
         
     | 
| 
      
 15 
     | 
    
         
            +
                Boxen::Preflight::Facts
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              postflight \
         
     | 
| 
      
 18 
     | 
    
         
            +
                Boxen::Postflight::Active,
         
     | 
| 
      
 19 
     | 
    
         
            +
                Boxen::Postflight::Hooks,
         
     | 
| 
      
 20 
     | 
    
         
            +
                Boxen::Postflight::GithubIssue,
         
     | 
| 
      
 21 
     | 
    
         
            +
                Boxen::Postflight::Env
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def self.help
         
     | 
| 
      
 24 
     | 
    
         
            +
                "run Boxen's managed puppet environment"
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def self.detailed_help
         
     | 
| 
      
 28 
     | 
    
         
            +
                <<-EOS
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                boxen run [options]
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    Runs Puppet via Boxen's environment.
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    Some options you may find useful:
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                        --debug                 Be really, really verbose. Like incredibly verbose.
         
     | 
| 
      
 37 
     | 
    
         
            +
                        --no-issue              Don't file an issue if the Boxen run fails.
         
     | 
| 
      
 38 
     | 
    
         
            +
                        --no-color              Don't output any colored text to the tty.
         
     | 
| 
      
 39 
     | 
    
         
            +
                        --report                Generate graphs and catalog data from Puppet.
         
     | 
| 
      
 40 
     | 
    
         
            +
                        --profile               Display very high-level performance details from the Puppet run.
         
     | 
| 
      
 41 
     | 
    
         
            +
                        --future-parser         Use Puppet's upcoming future parser
         
     | 
| 
      
 42 
     | 
    
         
            +
                        --graph                 Enable puppet dependency graph output
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                boxen run:noop [options]
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    The same thing as run, but acts as a dry run where no changes are made.
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              def run
         
     | 
| 
      
 52 
     | 
    
         
            +
                info "Updating librarian-puppet modules"
         
     | 
| 
      
 53 
     | 
    
         
            +
                create_clean_working_environment
         
     | 
| 
      
 54 
     | 
    
         
            +
                run_librarian_puppet
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                warn command.join(" ") if debug?
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                info "Running puppet"
         
     | 
| 
      
 59 
     | 
    
         
            +
                Boxen::Util.sudo(*command)
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                Boxen::CommandStatus.new($?.exitstatus, [0, 2])
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              def noop
         
     | 
| 
      
 65 
     | 
    
         
            +
                false
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              def report?
         
     | 
| 
      
 69 
     | 
    
         
            +
                @args.include? "--report"
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              def profile?
         
     | 
| 
      
 73 
     | 
    
         
            +
                @args.include? "--profile"
         
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
              def future_parser?
         
     | 
| 
      
 77 
     | 
    
         
            +
                @args.include? "--future-parser"
         
     | 
| 
      
 78 
     | 
    
         
            +
              end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
              def graph?
         
     | 
| 
      
 81 
     | 
    
         
            +
                @args.include? "--graph"
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              def debug?
         
     | 
| 
      
 85 
     | 
    
         
            +
                @args.include? "--debug"
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              def no_color?
         
     | 
| 
      
 89 
     | 
    
         
            +
                @args.include? "--no-color"
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
              private
         
     | 
| 
      
 93 
     | 
    
         
            +
              def command
         
     | 
| 
      
 94 
     | 
    
         
            +
                [
         
     | 
| 
      
 95 
     | 
    
         
            +
                 "#{config.repodir}/bin/puppet",
         
     | 
| 
      
 96 
     | 
    
         
            +
                 "apply",
         
     | 
| 
      
 97 
     | 
    
         
            +
                 puppet_flags,
         
     | 
| 
      
 98 
     | 
    
         
            +
                 "#{config.repodir}/manifests/site.pp"
         
     | 
| 
      
 99 
     | 
    
         
            +
                ].flatten
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
              def run_librarian_puppet
         
     | 
| 
      
 103 
     | 
    
         
            +
                if File.file? "#{config.repodir}/Puppetfile"
         
     | 
| 
      
 104 
     | 
    
         
            +
                  librarian = "#{config.repodir}/bin/librarian-puppet"
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                  unless config.enterprise?
         
     | 
| 
      
 107 
     | 
    
         
            +
                    ENV["GITHUB_API_TOKEN"] = config.token
         
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  librarian_command = [librarian, "install", "--path=#{config.repodir}/shared"]
         
     | 
| 
      
 111 
     | 
    
         
            +
                  librarian_command << "--verbose" if debug?
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  warn librarian_command.join(" ") if debug?
         
     | 
| 
      
 114 
     | 
    
         
            +
                  unless system(*librarian_command)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    abort "Can't run Puppet, fetching dependencies with librarian failed."
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
                end
         
     | 
| 
      
 118 
     | 
    
         
            +
              end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
              def create_clean_working_environment
         
     | 
| 
      
 121 
     | 
    
         
            +
                FileUtils.mkdir_p config.puppetdir
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                FileUtils.rm_f config.logfile
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                FileUtils.rm_rf "#{config.puppetdir}/var/reports" if report?
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                FileUtils.mkdir_p File.dirname config.logfile
         
     | 
| 
      
 128 
     | 
    
         
            +
                FileUtils.touch config.logfile
         
     | 
| 
      
 129 
     | 
    
         
            +
              end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
              def hiera_config
         
     | 
| 
      
 132 
     | 
    
         
            +
                hiera_yaml = "#{config.repodir}/config/hiera.yaml"
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                File.exists?(hiera_yaml) ? hiera_yaml : "/dev/null"
         
     | 
| 
      
 135 
     | 
    
         
            +
              end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              def puppet_flags
         
     | 
| 
      
 138 
     | 
    
         
            +
                _flags = []
         
     | 
| 
      
 139 
     | 
    
         
            +
                root  = File.expand_path "../../..", __FILE__
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                _flags << ["--group",          "admin"]
         
     | 
| 
      
 142 
     | 
    
         
            +
                _flags << ["--confdir",        "#{config.puppetdir}/conf"]
         
     | 
| 
      
 143 
     | 
    
         
            +
                _flags << ["--vardir",         "#{config.puppetdir}/var"]
         
     | 
| 
      
 144 
     | 
    
         
            +
                _flags << ["--libdir",         "#{config.repodir}/lib"]#:#{root}/lib"]
         
     | 
| 
      
 145 
     | 
    
         
            +
                _flags << ["--libdir",         "#{root}/lib"]
         
     | 
| 
      
 146 
     | 
    
         
            +
                _flags << ["--manifestdir",    "#{config.repodir}/manifests"]
         
     | 
| 
      
 147 
     | 
    
         
            +
                _flags << ["--modulepath",     "#{config.repodir}/modules:#{config.repodir}/shared"]
         
     | 
| 
      
 148 
     | 
    
         
            +
                _flags << ["--hiera_config",   hiera_config]
         
     | 
| 
      
 149 
     | 
    
         
            +
                _flags << ["--logdest",        "#{config.repodir}/log/puppet.log"]
         
     | 
| 
      
 150 
     | 
    
         
            +
                _flags << ["--logdest",        "console"]
         
     | 
| 
      
 151 
     | 
    
         
            +
                _flags << ["--pluginfactdest", "#{config.homedir}/facts.d"]
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                _flags << "--no-report" unless report?
         
     | 
| 
      
 154 
     | 
    
         
            +
                _flags << "--detailed-exitcodes"
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                _flags << "--show_diff"
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                if profile?
         
     | 
| 
      
 159 
     | 
    
         
            +
                  _flags << "--evaltrace"
         
     | 
| 
      
 160 
     | 
    
         
            +
                  _flags << "--summarize"
         
     | 
| 
      
 161 
     | 
    
         
            +
                end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                _flags << "--parser=future" if future_parser?
         
     | 
| 
      
 164 
     | 
    
         
            +
                _flags << "--graph" if graph?
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                _flags << "--debug" if debug?
         
     | 
| 
      
 167 
     | 
    
         
            +
                _flags << "--noop"  if noop
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                _flags << "--color=false" if no_color?
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                _flags.flatten
         
     | 
| 
      
 172 
     | 
    
         
            +
              end
         
     | 
| 
      
 173 
     | 
    
         
            +
            end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            class Boxen::Command::Run::Noop < Boxen::Command::Run
         
     | 
| 
      
 176 
     | 
    
         
            +
              preflight \
         
     | 
| 
      
 177 
     | 
    
         
            +
                Boxen::Preflight::OS,
         
     | 
| 
      
 178 
     | 
    
         
            +
                Boxen::Preflight::Directories,
         
     | 
| 
      
 179 
     | 
    
         
            +
                Boxen::Preflight::EtcMyCnf,
         
     | 
| 
      
 180 
     | 
    
         
            +
                Boxen::Preflight::Homebrew,
         
     | 
| 
      
 181 
     | 
    
         
            +
                Boxen::Preflight::Rbenv,
         
     | 
| 
      
 182 
     | 
    
         
            +
                Boxen::Preflight::RVM,
         
     | 
| 
      
 183 
     | 
    
         
            +
                Boxen::Preflight::Offline,
         
     | 
| 
      
 184 
     | 
    
         
            +
                Boxen::Preflight::Creds,
         
     | 
| 
      
 185 
     | 
    
         
            +
                Boxen::Preflight::Identity,
         
     | 
| 
      
 186 
     | 
    
         
            +
                Boxen::Preflight::Update,
         
     | 
| 
      
 187 
     | 
    
         
            +
                Boxen::Preflight::Facts
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
              postflight \
         
     | 
| 
      
 190 
     | 
    
         
            +
                Boxen::Postflight::Active,
         
     | 
| 
      
 191 
     | 
    
         
            +
                Boxen::Postflight::Env
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
              def noop
         
     | 
| 
      
 194 
     | 
    
         
            +
                true
         
     | 
| 
      
 195 
     | 
    
         
            +
              end
         
     | 
| 
      
 196 
     | 
    
         
            +
            end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            Boxen::Command.register :run, Boxen::Command::Run
         
     | 
| 
      
 199 
     | 
    
         
            +
            Boxen::Command.register :"run:noop", Boxen::Command::Run::Noop
         
     | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "boxen/service"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class Boxen::Command::Service < Boxen::Command
         
     | 
| 
      
 5 
     | 
    
         
            +
              def self.detailed_help
         
     | 
| 
      
 6 
     | 
    
         
            +
                <<-EOS
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                boxen service
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    Display all services Boxen knows about.
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                boxen service:enable <service1> [<service2> ...]
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    Enable and start a Boxen-managed service. If none are given,
         
     | 
| 
      
 15 
     | 
    
         
            +
                    enables and starts all Boxen-managed services.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                boxen service:disable <service1> [<service2> ...]
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    Disable and stop a Boxen-managed service. If none are given,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    disables and stops all Boxen-managed services.
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                boxen service:restart [<service1> <service2> ...]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    Restart a Boxen-managed service. If none are given, restarts all
         
     | 
| 
      
 25 
     | 
    
         
            +
                    Boxen-managed services.
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                NOTE: 'boxen service' is aliased to 'services' for convenience
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def self.help
         
     | 
| 
      
 33 
     | 
    
         
            +
                "Show and manage Boxen services."
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def run
         
     | 
| 
      
 37 
     | 
    
         
            +
                @args = [] # we don't care about args here
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                puts "Boxen manages the following services:\n\n"
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                services.each do |service|
         
     | 
| 
      
 42 
     | 
    
         
            +
                  puts "    #{service.name}"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                Boxen::CommandStatus.new(0)
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              def services
         
     | 
| 
      
 49 
     | 
    
         
            +
                @services ||= if @args.any?
         
     | 
| 
      
 50 
     | 
    
         
            +
                                @args.map { |s| Boxen::Service.new(s) }
         
     | 
| 
      
 51 
     | 
    
         
            +
                              else
         
     | 
| 
      
 52 
     | 
    
         
            +
                                Boxen::Service.list
         
     | 
| 
      
 53 
     | 
    
         
            +
                              end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            require "boxen/command/service/enable"
         
     | 
| 
      
 58 
     | 
    
         
            +
            require "boxen/command/service/disable"
         
     | 
| 
      
 59 
     | 
    
         
            +
            require "boxen/command/service/restart"
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            Boxen::Command.register :service, Boxen::Command::Service, :services
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command/service"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Boxen::Command::Service::Disable < Boxen::Command::Service
         
     | 
| 
      
 4 
     | 
    
         
            +
              def run
         
     | 
| 
      
 5 
     | 
    
         
            +
                services.each do |service|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  puts "Disabling service: #{service.name}"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  service.disable
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                Boxen::CommandStatus.new(0)
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Boxen::Command.register :"service:disable", Boxen::Command::Service::Disable
         
     | 
| 
      
 15 
     | 
    
         
            +
            Boxen::Command.register :"services:disable", Boxen::Command::Service::Disable
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command/service"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Boxen::Command::Service::Enable < Boxen::Command::Service
         
     | 
| 
      
 4 
     | 
    
         
            +
              def run
         
     | 
| 
      
 5 
     | 
    
         
            +
                services.each do |service|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  puts "Enabling service: #{service.name}"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  service.enable
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                Boxen::CommandStatus.new(0)
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Boxen::Command.register :"service:enable", Boxen::Command::Service::Enable
         
     | 
| 
      
 15 
     | 
    
         
            +
            Boxen::Command.register :"services:enable", Boxen::Command::Service::Enable
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command/service"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Boxen::Command::Service::Restart < Boxen::Command::Service
         
     | 
| 
      
 4 
     | 
    
         
            +
              def run
         
     | 
| 
      
 5 
     | 
    
         
            +
                services.each do |service|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  puts "Restarting service: #{service.name}"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  service.disable
         
     | 
| 
      
 8 
     | 
    
         
            +
                  service.enable
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                Boxen::CommandStatus.new(0)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def services
         
     | 
| 
      
 15 
     | 
    
         
            +
                @services ||= if @args.any?
         
     | 
| 
      
 16 
     | 
    
         
            +
                                @args.map { |s| Boxen::Service.new(s) }
         
     | 
| 
      
 17 
     | 
    
         
            +
                              else
         
     | 
| 
      
 18 
     | 
    
         
            +
                                Boxen::Service.list_enabled
         
     | 
| 
      
 19 
     | 
    
         
            +
                              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            Boxen::Command.register :"service:restart", Boxen::Command::Service::Restart
         
     | 
| 
      
 24 
     | 
    
         
            +
            Boxen::Command.register :"services:restart", Boxen::Command::Service::Restart
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "boxen/command"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "boxen/version"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class Boxen::Command::Version < Boxen::Command
         
     | 
| 
      
 5 
     | 
    
         
            +
              def self.help
         
     | 
| 
      
 6 
     | 
    
         
            +
                "Displays the current version of Boxen"
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def self.detailed_help
         
     | 
| 
      
 10 
     | 
    
         
            +
                <<-EOS
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                boxen version
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    Display the current version of the Boxen gem.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def run
         
     | 
| 
      
 20 
     | 
    
         
            +
                puts "Boxen #{version}"
         
     | 
| 
      
 21 
     | 
    
         
            +
                Boxen::CommandStatus.new(0)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def version
         
     | 
| 
      
 25 
     | 
    
         
            +
                Boxen::VERSION
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            Boxen::Command.register :version, Boxen::Command::Version, :"-v", :"--version"
         
     | 
    
        data/lib/boxen/config.rb
    CHANGED
    
    | 
         @@ -25,9 +25,6 @@ module Boxen 
     | 
|
| 
       25 
25 
     | 
    
         
             
                      end
         
     | 
| 
       26 
26 
     | 
    
         
             
                    end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                    keychain        = Boxen::Keychain.new config.user
         
     | 
| 
       29 
     | 
    
         
            -
                    config.token    = keychain.token
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
28 
     | 
    
         
             
                    if config.enterprise?
         
     | 
| 
       32 
29 
     | 
    
         
             
                      # configure to talk to GitHub Enterprise
         
     | 
| 
       33 
30 
     | 
    
         
             
                      Octokit.configure do |c|
         
     | 
| 
         @@ -80,10 +77,19 @@ module Boxen 
     | 
|
| 
       80 
77 
     | 
    
         
             
                def initialize(&block)
         
     | 
| 
       81 
78 
     | 
    
         
             
                  @fde  = true
         
     | 
| 
       82 
79 
     | 
    
         
             
                  @pull = true
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @debug = false
         
     | 
| 
       83 
81 
     | 
    
         | 
| 
       84 
82 
     | 
    
         
             
                  yield self if block_given?
         
     | 
| 
       85 
83 
     | 
    
         
             
                end
         
     | 
| 
       86 
84 
     | 
    
         | 
| 
      
 85 
     | 
    
         
            +
                def keychain
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @keychain ||= Boxen::Keychain.new self.user
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                def token
         
     | 
| 
      
 90 
     | 
    
         
            +
                  @token ||= keychain.token
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
       87 
93 
     | 
    
         
             
                # Create an API instance using the current user creds. A new
         
     | 
| 
       88 
94 
     | 
    
         
             
                # instance is created any time `token` changes.
         
     | 
| 
       89 
95 
     | 
    
         | 
| 
         @@ -94,11 +100,32 @@ module Boxen 
     | 
|
| 
       94 
100 
     | 
    
         
             
                # Spew a bunch of debug logging? Default is `false`.
         
     | 
| 
       95 
101 
     | 
    
         | 
| 
       96 
102 
     | 
    
         
             
                def debug?
         
     | 
| 
      
 103 
     | 
    
         
            +
                  # TODO: fix this
         
     | 
| 
       97 
104 
     | 
    
         
             
                  !!@debug
         
     | 
| 
       98 
105 
     | 
    
         
             
                end
         
     | 
| 
       99 
106 
     | 
    
         | 
| 
       100 
107 
     | 
    
         
             
                attr_writer :debug
         
     | 
| 
       101 
108 
     | 
    
         | 
| 
      
 109 
     | 
    
         
            +
                def offline?
         
     | 
| 
      
 110 
     | 
    
         
            +
                  @offline ||= false
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                attr_writer :offline
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                def report?
         
     | 
| 
      
 116 
     | 
    
         
            +
                  # TODO: Actually make this a thing
         
     | 
| 
      
 117 
     | 
    
         
            +
                  @report = false
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                attr_writer :report
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                def profile?
         
     | 
| 
      
 123 
     | 
    
         
            +
                  #TODO: Actually make this a thing
         
     | 
| 
      
 124 
     | 
    
         
            +
                  @profile = true
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                attr_writer :profile
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
       102 
129 
     | 
    
         
             
                # A GitHub user's public email.
         
     | 
| 
       103 
130 
     | 
    
         | 
| 
       104 
131 
     | 
    
         
             
                attr_accessor :email
         
     | 
| 
         @@ -122,7 +149,7 @@ module Boxen 
     | 
|
| 
       122 
149 
     | 
    
         
             
                # `BOXEN_HOME` environment variable.
         
     | 
| 
       123 
150 
     | 
    
         | 
| 
       124 
151 
     | 
    
         
             
                def homedir
         
     | 
| 
       125 
     | 
    
         
            -
                  @homedir  
     | 
| 
      
 152 
     | 
    
         
            +
                  @homedir ||= (ENV["BOXEN_HOME"] || "/opt/boxen")
         
     | 
| 
       126 
153 
     | 
    
         
             
                end
         
     | 
| 
       127 
154 
     | 
    
         | 
| 
       128 
155 
     | 
    
         
             
                attr_writer :homedir
         
     | 
| 
         @@ -132,7 +159,7 @@ module Boxen 
     | 
|
| 
       132 
159 
     | 
    
         
             
                # overwritten on every run.
         
     | 
| 
       133 
160 
     | 
    
         | 
| 
       134 
161 
     | 
    
         
             
                def logfile
         
     | 
| 
       135 
     | 
    
         
            -
                  @logfile  
     | 
| 
      
 162 
     | 
    
         
            +
                  @logfile ||= (ENV["BOXEN_LOG_FILE"] || "#{repodir}/log/boxen.log")
         
     | 
| 
       136 
163 
     | 
    
         
             
                end
         
     | 
| 
       137 
164 
     | 
    
         | 
| 
       138 
165 
     | 
    
         
             
                attr_writer :logfile
         
     | 
| 
         @@ -145,46 +172,6 @@ module Boxen 
     | 
|
| 
       145 
172 
     | 
    
         | 
| 
       146 
173 
     | 
    
         
             
                attr_accessor :name
         
     | 
| 
       147 
174 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
                # Just go through the motions? Default is `false`.
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
                def pretend?
         
     | 
| 
       151 
     | 
    
         
            -
                  !!@pretend
         
     | 
| 
       152 
     | 
    
         
            -
                end
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
                attr_writer :pretend
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
                # Run a profiler on Puppet? Default is `false`.
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
                def profile?
         
     | 
| 
       159 
     | 
    
         
            -
                  !!@profile
         
     | 
| 
       160 
     | 
    
         
            -
                end
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
                attr_writer :profile
         
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
     | 
    
         
            -
                # Enable the Puppet future parser? Default is `false`.
         
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                def future_parser?
         
     | 
| 
       167 
     | 
    
         
            -
                  !!@future_parser
         
     | 
| 
       168 
     | 
    
         
            -
                end
         
     | 
| 
       169 
     | 
    
         
            -
             
     | 
| 
       170 
     | 
    
         
            -
                attr_writer :future_parser
         
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
                # Enable puppet reports ? Default is `false`.
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                def report?
         
     | 
| 
       175 
     | 
    
         
            -
                  !!@report
         
     | 
| 
       176 
     | 
    
         
            -
                end
         
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
                attr_writer :report
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                # Enable generation of dependency graphs.
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                def graph?
         
     | 
| 
       183 
     | 
    
         
            -
                  !!@graph
         
     | 
| 
       184 
     | 
    
         
            -
                end
         
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
                attr_writer :graph
         
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
175 
     | 
    
         
             
                # An Array of Boxen::Project entries, one for each project Boxen
         
     | 
| 
       189 
176 
     | 
    
         
             
                # knows how to manage.
         
     | 
| 
       190 
177 
     | 
    
         
             
                #
         
     | 
| 
         @@ -208,7 +195,7 @@ module Boxen 
     | 
|
| 
       208 
195 
     | 
    
         
             
                # `BOXEN_PUPPET_DIR` environment variable.
         
     | 
| 
       209 
196 
     | 
    
         | 
| 
       210 
197 
     | 
    
         
             
                def puppetdir
         
     | 
| 
       211 
     | 
    
         
            -
                  @puppetdir  
     | 
| 
      
 198 
     | 
    
         
            +
                  @puppetdir ||= (ENV["BOXEN_PUPPET_DIR"] || "/tmp/boxen/puppet")
         
     | 
| 
       212 
199 
     | 
    
         
             
                end
         
     | 
| 
       213 
200 
     | 
    
         | 
| 
       214 
201 
     | 
    
         
             
                attr_writer :puppetdir
         
     | 
| 
         @@ -217,7 +204,7 @@ module Boxen 
     | 
|
| 
       217 
204 
     | 
    
         
             
                # `Dir.pwd`. Respects the `BOXEN_REPO_DIR` environment variable.
         
     | 
| 
       218 
205 
     | 
    
         | 
| 
       219 
206 
     | 
    
         
             
                def repodir
         
     | 
| 
       220 
     | 
    
         
            -
                  @repodir  
     | 
| 
      
 207 
     | 
    
         
            +
                  @repodir ||= (ENV["BOXEN_REPO_DIR"] || Dir.pwd)
         
     | 
| 
       221 
208 
     | 
    
         
             
                end
         
     | 
| 
       222 
209 
     | 
    
         | 
| 
       223 
210 
     | 
    
         
             
                attr_writer :repodir
         
     | 
| 
         @@ -228,7 +215,7 @@ module Boxen 
     | 
|
| 
       228 
215 
     | 
    
         
             
                # Respects the `BOXEN_REPO_NAME` environment variable.
         
     | 
| 
       229 
216 
     | 
    
         | 
| 
       230 
217 
     | 
    
         
             
                def reponame
         
     | 
| 
       231 
     | 
    
         
            -
                  override = @reponame  
     | 
| 
      
 218 
     | 
    
         
            +
                  override = @reponame ||= ENV["BOXEN_REPO_NAME"]
         
     | 
| 
       232 
219 
     | 
    
         
             
                  return override unless override.nil?
         
     | 
| 
       233 
220 
     | 
    
         | 
| 
       234 
221 
     | 
    
         
             
                  if File.directory? repodir
         
     | 
| 
         @@ -238,7 +225,7 @@ module Boxen 
     | 
|
| 
       238 
225 
     | 
    
         
             
                    # find the path and strip off the .git suffix
         
     | 
| 
       239 
226 
     | 
    
         
             
                    repo_exp = Regexp.new Regexp.escape(ghuri.host) + "[/:]([^/]+/[^/]+)"
         
     | 
| 
       240 
227 
     | 
    
         
             
                    if $?.success? && repo_exp.match(url)
         
     | 
| 
       241 
     | 
    
         
            -
                      @reponame = $1.sub 
     | 
| 
      
 228 
     | 
    
         
            +
                      @reponame = $1.sub(/\.git$/, "")
         
     | 
| 
       242 
229 
     | 
    
         
             
                    end
         
     | 
| 
       243 
230 
     | 
    
         
             
                  end
         
     | 
| 
       244 
231 
     | 
    
         
             
                end
         
     | 
| 
         @@ -248,7 +235,7 @@ module Boxen 
     | 
|
| 
       248 
235 
     | 
    
         
             
                # GitHub location (public or GitHub Enterprise)
         
     | 
| 
       249 
236 
     | 
    
         | 
| 
       250 
237 
     | 
    
         
             
                def ghurl
         
     | 
| 
       251 
     | 
    
         
            -
                  @ghurl  
     | 
| 
      
 238 
     | 
    
         
            +
                  @ghurl ||= (ENV["BOXEN_GITHUB_ENTERPRISE_URL"] || "https://github.com")
         
     | 
| 
       252 
239 
     | 
    
         
             
                end
         
     | 
| 
       253 
240 
     | 
    
         | 
| 
       254 
241 
     | 
    
         
             
                attr_writer :ghurl
         
     | 
| 
         @@ -256,8 +243,7 @@ module Boxen 
     | 
|
| 
       256 
243 
     | 
    
         
             
                # Repository URL template (required for GitHub Enterprise)
         
     | 
| 
       257 
244 
     | 
    
         | 
| 
       258 
245 
     | 
    
         
             
                def repotemplate
         
     | 
| 
       259 
     | 
    
         
            -
                   
     | 
| 
       260 
     | 
    
         
            -
                  @repotemplate || ENV["BOXEN_REPO_URL_TEMPLATE"] || default
         
     | 
| 
      
 246 
     | 
    
         
            +
                  @repotemplate ||= (ENV["BOXEN_REPO_URL_TEMPLATE"] || "https://github.com/%s")
         
     | 
| 
       261 
247 
     | 
    
         
             
                end
         
     | 
| 
       262 
248 
     | 
    
         | 
| 
       263 
249 
     | 
    
         
             
                attr_writer :repotemplate
         
     | 
| 
         @@ -272,7 +258,7 @@ module Boxen 
     | 
|
| 
       272 
258 
     | 
    
         
             
                # `"/Users/#{user}/src"`.
         
     | 
| 
       273 
259 
     | 
    
         | 
| 
       274 
260 
     | 
    
         
             
                def srcdir
         
     | 
| 
       275 
     | 
    
         
            -
                  @srcdir  
     | 
| 
      
 261 
     | 
    
         
            +
                  @srcdir ||= (ENV["BOXEN_SRC_DIR"] || "/Users/#{user}/src")
         
     | 
| 
       276 
262 
     | 
    
         
             
                end
         
     | 
| 
       277 
263 
     | 
    
         | 
| 
       278 
264 
     | 
    
         
             
                attr_writer :srcdir
         
     | 
| 
         @@ -281,15 +267,11 @@ module Boxen 
     | 
|
| 
       281 
267 
     | 
    
         
             
                # Respects the `BOXEN_NO_ISSUE` environment variable.
         
     | 
| 
       282 
268 
     | 
    
         | 
| 
       283 
269 
     | 
    
         
             
                def stealth?
         
     | 
| 
       284 
     | 
    
         
            -
                  !!ENV["BOXEN_NO_ISSUE"] 
     | 
| 
      
 270 
     | 
    
         
            +
                  @stealth ||= !!ENV["BOXEN_NO_ISSUE"]
         
     | 
| 
       285 
271 
     | 
    
         
             
                end
         
     | 
| 
       286 
272 
     | 
    
         | 
| 
       287 
273 
     | 
    
         
             
                attr_writer :stealth
         
     | 
| 
       288 
274 
     | 
    
         | 
| 
       289 
     | 
    
         
            -
                # A GitHub OAuth token. Default is `nil`.
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
                attr_reader :token
         
     | 
| 
       292 
     | 
    
         
            -
             
     | 
| 
       293 
275 
     | 
    
         
             
                def token=(token)
         
     | 
| 
       294 
276 
     | 
    
         
             
                  @token = token
         
     | 
| 
       295 
277 
     | 
    
         
             
                  @api = nil
         
     | 
| 
         @@ -298,7 +280,7 @@ module Boxen 
     | 
|
| 
       298 
280 
     | 
    
         
             
                # A local user login. Default is the `USER` environment variable.
         
     | 
| 
       299 
281 
     | 
    
         | 
| 
       300 
282 
     | 
    
         
             
                def user
         
     | 
| 
       301 
     | 
    
         
            -
                  @user  
     | 
| 
      
 283 
     | 
    
         
            +
                  @user ||= ENV["USER"]
         
     | 
| 
       302 
284 
     | 
    
         
             
                end
         
     | 
| 
       303 
285 
     | 
    
         | 
| 
       304 
286 
     | 
    
         
             
                attr_writer :user
         
     | 
| 
         @@ -313,7 +295,7 @@ module Boxen 
     | 
|
| 
       313 
295 
     | 
    
         
             
                # Respects the `BOXEN_S3_HOST` environment variable.
         
     | 
| 
       314 
296 
     | 
    
         | 
| 
       315 
297 
     | 
    
         
             
                def s3host
         
     | 
| 
       316 
     | 
    
         
            -
                  @s3host  
     | 
| 
      
 298 
     | 
    
         
            +
                  @s3host ||= (ENV["BOXEN_S3_HOST"] || "s3.amazonaws.com")
         
     | 
| 
       317 
299 
     | 
    
         
             
                end
         
     | 
| 
       318 
300 
     | 
    
         | 
| 
       319 
301 
     | 
    
         
             
                attr_writer :s3host
         
     | 
| 
         @@ -322,7 +304,7 @@ module Boxen 
     | 
|
| 
       322 
304 
     | 
    
         
             
                # Respects the `BOXEN_S3_BUCKET` environment variable.
         
     | 
| 
       323 
305 
     | 
    
         | 
| 
       324 
306 
     | 
    
         
             
                def s3bucket
         
     | 
| 
       325 
     | 
    
         
            -
                  @s3bucket  
     | 
| 
      
 307 
     | 
    
         
            +
                  @s3bucket ||= (ENV["BOXEN_S3_BUCKET"] || "boxen-downloads")
         
     | 
| 
       326 
308 
     | 
    
         
             
                end
         
     | 
| 
       327 
309 
     | 
    
         | 
| 
       328 
310 
     | 
    
         
             
                attr_writer :s3bucket
         
     |