puppet 2.7.23 → 2.7.24
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.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/Gemfile +23 -7
 - data/ext/packaging/LICENSE +17 -0
 - data/ext/packaging/README.md +92 -18
 - data/ext/packaging/spec/tasks/00_utils_spec.rb +28 -21
 - data/ext/packaging/spec/tasks/build_object_spec.rb +6 -4
 - data/ext/packaging/static_artifacts/PackageInfo.plist +3 -0
 - data/ext/packaging/tasks/00_utils.rake +91 -15
 - data/ext/packaging/tasks/10_setupvars.rake +39 -24
 - data/ext/packaging/tasks/20_setupextravars.rake +1 -5
 - data/ext/packaging/tasks/30_metrics.rake +29 -37
 - data/ext/packaging/tasks/apple.rake +8 -6
 - data/ext/packaging/tasks/build.rake +6 -0
 - data/ext/packaging/tasks/deb.rake +1 -4
 - data/ext/packaging/tasks/fetch.rake +22 -12
 - data/ext/packaging/tasks/gem.rake +88 -35
 - data/ext/packaging/tasks/jenkins.rake +25 -1
 - data/ext/packaging/tasks/jenkins_dynamic.rake +10 -1
 - data/ext/packaging/tasks/mock.rake +37 -19
 - data/ext/packaging/tasks/pe_ship.rake +108 -10
 - data/ext/packaging/tasks/pe_sign.rake +3 -3
 - data/ext/packaging/tasks/retrieve.rake +12 -0
 - data/ext/packaging/tasks/rpm_repos.rake +2 -2
 - data/ext/packaging/tasks/ship.rake +51 -12
 - data/ext/packaging/tasks/sign.rake +42 -12
 - data/ext/packaging/tasks/tar.rake +1 -1
 - data/ext/packaging/tasks/template.rake +17 -3
 - data/ext/packaging/tasks/vendor_gems.rake +1 -1
 - data/ext/packaging/templates/downstream.xml.erb +15 -2
 - data/ext/packaging/templates/packaging.xml.erb +143 -1
 - data/ext/packaging/templates/repo.xml.erb +35 -24
 - data/lib/puppet/transaction.rb +1 -1
 - data/lib/puppet/type/file.rb +12 -23
 - data/lib/puppet/type/file/source.rb +2 -2
 - data/lib/puppet/type/service.rb +3 -2
 - data/lib/puppet/util.rb +22 -41
 - data/lib/puppet/version.rb +1 -1
 - data/spec/integration/type/file_spec.rb +22 -35
 - data/spec/spec_helper.rb +12 -0
 - data/spec/unit/application/kick_spec.rb +9 -4
 - data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
 - data/spec/unit/type/file/source_spec.rb +8 -7
 - data/spec/unit/type/file_spec.rb +0 -29
 - metadata +64 -39
 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -1,17 +1,33 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            source  
     | 
| 
      
 1 
     | 
    
         
            +
            source "https://rubygems.org"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            def location_for(place)
         
     | 
| 
      
 4 
     | 
    
         
            +
              if place =~ /^(git:[^#]*)#(.*)/
         
     | 
| 
      
 5 
     | 
    
         
            +
                [{ :git => $1, :branch => $2, :require => false }]
         
     | 
| 
      
 6 
     | 
    
         
            +
              elsif place =~ /^file:\/\/(.*)/
         
     | 
| 
      
 7 
     | 
    
         
            +
                ['>= 0', { :path => File.expand_path($1), :require => false }]
         
     | 
| 
      
 8 
     | 
    
         
            +
              else
         
     | 
| 
      
 9 
     | 
    
         
            +
                [place, { :require => false }]
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
       4 
12 
     | 
    
         | 
| 
       5 
13 
     | 
    
         
             
            group(:development, :test) do
         
     | 
| 
       6 
     | 
    
         
            -
              gem " 
     | 
| 
       7 
     | 
    
         
            -
              gem " 
     | 
| 
       8 
     | 
    
         
            -
              gem " 
     | 
| 
      
 14 
     | 
    
         
            +
              gem "puppet", :path => File.dirname(__FILE__), :require => false
         
     | 
| 
      
 15 
     | 
    
         
            +
              gem "facter", *location_for(ENV['FACTER_LOCATION'] || '~> 1.6')
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem "hiera", *location_for(ENV['HIERA_LOCATION'] || '~> 1.0')
         
     | 
| 
      
 17 
     | 
    
         
            +
              gem "rack", "~> 1.4", :require => false
         
     | 
| 
      
 18 
     | 
    
         
            +
              gem "rake", :require => false
         
     | 
| 
      
 19 
     | 
    
         
            +
              gem "rspec", "~> 2.11.0", :require => false
         
     | 
| 
       9 
20 
     | 
    
         
             
              gem "mocha", "~> 0.10.5", :require => false
         
     | 
| 
      
 21 
     | 
    
         
            +
              gem "activerecord", *location_for('~> 3.0.7')
         
     | 
| 
      
 22 
     | 
    
         
            +
              gem "couchrest", *location_for('~> 1.0')
         
     | 
| 
      
 23 
     | 
    
         
            +
              gem "net-ssh", *location_for('~> 2.1')
         
     | 
| 
      
 24 
     | 
    
         
            +
              gem "puppetlabs_spec_helper"
         
     | 
| 
      
 25 
     | 
    
         
            +
              gem "sqlite3"
         
     | 
| 
      
 26 
     | 
    
         
            +
              gem "stomp"
         
     | 
| 
      
 27 
     | 
    
         
            +
              gem "tzinfo"
         
     | 
| 
       10 
28 
     | 
    
         
             
            end
         
     | 
| 
       11 
29 
     | 
    
         | 
| 
       12 
30 
     | 
    
         
             
            platforms :mswin, :mingw do
         
     | 
| 
       13 
     | 
    
         
            -
              # See http://jenkins.puppetlabs.com/ for current Gem listings for the Windows
         
     | 
| 
       14 
     | 
    
         
            -
              # CI Jobs.
         
     | 
| 
       15 
31 
     | 
    
         
             
              gem "sys-admin", "~> 1.5.6", :require => false
         
     | 
| 
       16 
32 
     | 
    
         
             
              gem "win32-api", "~> 1.4.8", :require => false
         
     | 
| 
       17 
33 
     | 
    
         
             
              gem "win32-dir", "~> 0.3.7", :require => false
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
               packaging - Puppet Labs packaging framework
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
               Copyright (C) 2011-2013 Puppet Labs Inc
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
               Puppet Labs can be contacted at: info@puppetlabs.com
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
               Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 8 
     | 
    
         
            +
               you may not use this file except in compliance with the License.
         
     | 
| 
      
 9 
     | 
    
         
            +
               You may obtain a copy of the License at
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                   http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
               Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 14 
     | 
    
         
            +
               distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 15 
     | 
    
         
            +
               WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 16 
     | 
    
         
            +
               See the License for the specific language governing permissions and
         
     | 
| 
      
 17 
     | 
    
         
            +
               limitations under the License.
         
     | 
    
        data/ext/packaging/README.md
    CHANGED
    
    | 
         @@ -123,7 +123,8 @@ specified in the build-data file, and appropriate membership in the build 
     | 
|
| 
       123 
123 
     | 
    
         
             
            groups, e.g. to use mock on the builder, membership in the mock group. This is
         
     | 
| 
       124 
124 
     | 
    
         
             
            a major hurdle, and is resolved with the `jenkins` tasks below.
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
            ## `:jenkins:` tasks
         
     | 
| 
      
 126 
     | 
    
         
            +
            ## legacy `:jenkins:` workflow tasks
         
     | 
| 
      
 127 
     | 
    
         
            +
            (Deprecated - see "dyamic jenkins task workflow" below)
         
     | 
| 
       127 
128 
     | 
    
         
             
            Jenkins tasks are similar to the `:remote:` tasks, but they do not require ssh
         
     | 
| 
       128 
129 
     | 
    
         
             
            access to the builders. They do require being on the local network - the
         
     | 
| 
       129 
130 
     | 
    
         
             
            jenkins instance that performs package builds is an internal server only,
         
     | 
| 
         @@ -150,6 +151,10 @@ repository](https://github.com/puppetlabs/build-data) 
     | 
|
| 
       150 
151 
     | 
    
         
             
            later in determining the target for the build artifacts on the distribution
         
     | 
| 
       151 
152 
     | 
    
         
             
            server
         
     | 
| 
       152 
153 
     | 
    
         | 
| 
      
 154 
     | 
    
         
            +
            4) $METRICS - a string of data points related to the build which are used for
         
     | 
| 
      
 155 
     | 
    
         
            +
            data analysis. Contents of this string are items which cannot be obtained from
         
     | 
| 
      
 156 
     | 
    
         
            +
            within the Jenkins job itself.
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
       153 
158 
     | 
    
         
             
            5) $DOWNSTREAM\_JOB - The URL of a downstream job that jenkins should post to
         
     | 
| 
       154 
159 
     | 
    
         
             
            upon success. This is obtained via the DOWNSTREAM\_JOB environment variable.
         
     | 
| 
       155 
160 
     | 
    
         | 
| 
         @@ -206,14 +211,25 @@ the task are: 
     | 
|
| 
       206 
211 
     | 
    
         | 
| 
       207 
212 
     | 
    
         
             
            #################
         
     | 
| 
       208 
213 
     | 
    
         
             
            ```
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
            To gather metrics related to a Jenkins build, the Groovy Postbuild plugin is used.
         
     | 
| 
      
 216 
     | 
    
         
            +
            For tasks carried out on the static Jenkins job, the script must be manually added to the job's
         
     | 
| 
      
 217 
     | 
    
         
            +
            configuration. The script in its entirety can be seen [here.](https://github.com/Whopper92/buildboard#groovyScript)
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            ## dynamic `:jenkins:` task workflow
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
            The recommended and far simpler jenkins-based workflow is for initiating the
         
     | 
| 
      
 222 
     | 
    
         
            +
            "uber_build", or a package build for all of our target platforms.
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            The uber_build is invoked as "pl:jenkins:uber_build" or "pe:jenkins:uber_build"
         
     | 
| 
      
 225 
     | 
    
         
            +
            depending on if this is a FOSS or PE package.
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
            This workflow doesn't actually use a static job on the jenkins-server. Instead
         
     | 
| 
      
 228 
     | 
    
         
            +
            it _creates_ the jenkins jobs for you, on-demand. Specifically, it creates two
         
     | 
| 
      
 229 
     | 
    
         
            +
            jenkins-jobs, and can create an optional third.
         
     | 
| 
       214 
230 
     | 
    
         | 
| 
       215 
231 
     | 
    
         
             
            The first job is a matrix job, the cells of which are individual package tasks
         
     | 
| 
       216 
     | 
    
         
            -
            for all of the build targets. This job takes  
     | 
| 
      
 232 
     | 
    
         
            +
            for all of the build targets. This job takes four parameters:
         
     | 
| 
       217 
233 
     | 
    
         | 
| 
       218 
234 
     | 
    
         
             
            1) $PROJECT\_BUNDLE - a tar.gz of a git-bundle from HEAD of the current
         
     | 
| 
       219 
235 
     | 
    
         
             
            project, which is cloned on the builder to set up a duplicate of this
         
     | 
| 
         @@ -226,11 +242,16 @@ about the build 
     | 
|
| 
       226 
242 
     | 
    
         
             
            later in determining the target for the build artifacts on the distribution
         
     | 
| 
       227 
243 
     | 
    
         
             
            server
         
     | 
| 
       228 
244 
     | 
    
         | 
| 
      
 245 
     | 
    
         
            +
            4) $METRICS - a string of data points related to the build which are used for data
         
     | 
| 
      
 246 
     | 
    
         
            +
            analysis. Contents of this string are items which cannot be obtained from within
         
     | 
| 
      
 247 
     | 
    
         
            +
            the Jenkins job itself. Note that the Groovy postbuild script needed for metrics
         
     | 
| 
      
 248 
     | 
    
         
            +
            gathering is dynamically passed to each job.
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
       229 
250 
     | 
    
         
             
            This first job clones the git bundle passed in as a parameter, then clones the
         
     | 
| 
       230 
251 
     | 
    
         
             
            packaging repo (rake package:bootstrap) and for every cell in its matrix
         
     | 
| 
       231 
252 
     | 
    
         
             
            performs a package build for a specific target (e.g. rake pl:deb
         
     | 
| 
       232 
     | 
    
         
            -
            COW=base-lucid-i386.cow).  
     | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
      
 253 
     | 
    
         
            +
            COW=base-lucid-i386.cow). Once all cells in the matrix complete (either succeed
         
     | 
| 
      
 254 
     | 
    
         
            +
            or fail), this job automatically triggers the second of the new jobs
         
     | 
| 
       234 
255 
     | 
    
         
             
            as a downstream job.
         
     | 
| 
       235 
256 
     | 
    
         | 
| 
       236 
257 
     | 
    
         
             
            To receive an email notification from jenkins about the status of the packaging
         
     | 
| 
         @@ -243,15 +264,34 @@ The second job is an automatic repository creation task for this git repo. 
     | 
|
| 
       243 
264 
     | 
    
         
             
            Specifically, the job copies the git bundle from the packaging job and clones
         
     | 
| 
       244 
265 
     | 
    
         
             
            it, and uses the git information in the git bundle to clone the packaging repo
         
     | 
| 
       245 
266 
     | 
    
         
             
            and invoke the repository creation jobs `pl:jenkins:rpm_repos` and
         
     | 
| 
       246 
     | 
    
         
            -
            `pl:jenkins:deb_repos`.
         
     | 
| 
      
 267 
     | 
    
         
            +
            `pl:jenkins:deb_repos`. The job will always be invoked, but will only actually
         
     | 
| 
      
 268 
     | 
    
         
            +
            create repos if the upstream packaging job actually succeeded.
         
     | 
| 
       247 
269 
     | 
    
         | 
| 
       248 
270 
     | 
    
         
             
            The third job is only created _if_ the environment variable
         
     | 
| 
       249 
271 
     | 
    
         
             
            `DOWNSTREAM_JOB=<job_url>` was passed to the initial "pl:jenkins:uber_build"
         
     | 
| 
       250 
272 
     | 
    
         
             
            invocation. This third job takes the value assigned to `DOWNSTREAM_JOB` and
         
     | 
| 
       251 
273 
     | 
    
         
             
            creates a proxy jenkins job with a single build step, a curl call to this
         
     | 
| 
       252 
274 
     | 
    
         
             
            value, presumably a url to a jenkins job to trigger programmatically.
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
            An important note about `DOWNSTREAM_JOB`: `DOWNSTREAM_JOB` in the dynamic jenkins
         
     | 
| 
      
 277 
     | 
    
         
            +
            workflow is _always_ invoked if it is passed in as an environment variable.
         
     | 
| 
      
 278 
     | 
    
         
            +
            However, it is also appended with an additional parameter, `PACKAGE_BUILD_STATUS`,
         
     | 
| 
      
 279 
     | 
    
         
            +
            which will be the string "success" if package and repo builds succeeded, or
         
     | 
| 
      
 280 
     | 
    
         
            +
            "failure" if package or repo builds failed. By modifying the actual downstream
         
     | 
| 
      
 281 
     | 
    
         
            +
            jenkins job to accept a string parameter of `PACKAGE_BUILD_STATUS`, one can
         
     | 
| 
      
 282 
     | 
    
         
            +
            switch on the success or failure of the packaging job, responding
         
     | 
| 
      
 283 
     | 
    
         
            +
              appropriately.
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
            E.g., a job url:
         
     | 
| 
      
 286 
     | 
    
         
            +
            http://jenkins.example.net/job/downstream/buildWithParameters?FOO=bar
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
            in the success case will be transformed into
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
      
 290 
     | 
    
         
            +
            http://jenkins.example.net/job/downstream/buildWithParameters?FOO=bar&PACKAGE_BUILD_STATUS=success
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
      
 292 
     | 
    
         
            +
            and in the failure case transformed into
         
     | 
| 
      
 293 
     | 
    
         
            +
             
     | 
| 
      
 294 
     | 
    
         
            +
            http://jenkins.example.net/job/downstream/buildWithParameters?FOO=bar&PACKAGE_BUILD_STATUS=failure
         
     | 
| 
       255 
295 
     | 
    
         | 
| 
       256 
296 
     | 
    
         
             
            All 3 jobs are configured by default for removal by jenkins after 3 days, to
         
     | 
| 
       257 
297 
     | 
    
         
             
            avoid clutter.
         
     | 
| 
         @@ -260,6 +300,7 @@ The goal is to move toward migrating all of the jenkins tasks from the first 
     | 
|
| 
       260 
300 
     | 
    
         
             
            workflow, using a static job that is called many times per package, to this
         
     | 
| 
       261 
301 
     | 
    
         
             
            second workflow of creating the jobs on demand.
         
     | 
| 
       262 
302 
     | 
    
         | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
       263 
304 
     | 
    
         
             
            ## Task Explanations
         
     | 
| 
       264 
305 
     | 
    
         
             
            For a listing of all available tasks and their functions, see the [Task
         
     | 
| 
       265 
306 
     | 
    
         
             
            Dictionary](https://github.com/puppetlabs/packaging/tree/more_documentation#task-dictionary)
         
     | 
| 
         @@ -293,17 +334,20 @@ spec file, and an osx preflight and plist. 
     | 
|
| 
       293 
334 
     | 
    
         | 
| 
       294 
335 
     | 
    
         
             
            The top level Rakefile or a separate task file in the project should have the following added:
         
     | 
| 
       295 
336 
     | 
    
         | 
| 
      
 337 
     | 
    
         
            +
            (this assumes RAKE\_ROOT is defined in the top-level Rakefile using something like the following)
         
     | 
| 
       296 
338 
     | 
    
         
             
            ```ruby
         
     | 
| 
       297 
     | 
    
         
            -
             
     | 
| 
      
 339 
     | 
    
         
            +
            RAKE_ROOT = File.expand_path(File.dirname(__FILE__))
         
     | 
| 
      
 340 
     | 
    
         
            +
            ```
         
     | 
| 
       298 
341 
     | 
    
         | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
      
 342 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 343 
     | 
    
         
            +
            build_defs_file = File.join(RAKE_ROOT, 'ext', 'build_defaults.yaml')
         
     | 
| 
       300 
344 
     | 
    
         
             
            if File.exist?(build_defs_file)
         
     | 
| 
       301 
345 
     | 
    
         
             
              begin
         
     | 
| 
       302 
346 
     | 
    
         
             
                require 'yaml'
         
     | 
| 
       303 
347 
     | 
    
         
             
                @build_defaults ||= YAML.load_file(build_defs_file)
         
     | 
| 
       304 
348 
     | 
    
         
             
              rescue Exception => e
         
     | 
| 
       305 
349 
     | 
    
         
             
                STDERR.puts "Unable to load yaml from #{build_defs_file}:"
         
     | 
| 
       306 
     | 
    
         
            -
                 
     | 
| 
      
 350 
     | 
    
         
            +
                raise e
         
     | 
| 
       307 
351 
     | 
    
         
             
              end
         
     | 
| 
       308 
352 
     | 
    
         
             
              @packaging_url  = @build_defaults['packaging_url']
         
     | 
| 
       309 
353 
     | 
    
         
             
              @packaging_repo = @build_defaults['packaging_repo']
         
     | 
| 
         @@ -313,20 +357,25 @@ if File.exist?(build_defs_file) 
     | 
|
| 
       313 
357 
     | 
    
         
             
              namespace :package do
         
     | 
| 
       314 
358 
     | 
    
         
             
                desc "Bootstrap packaging automation, e.g. clone into packaging repo"
         
     | 
| 
       315 
359 
     | 
    
         
             
                task :bootstrap do
         
     | 
| 
       316 
     | 
    
         
            -
                  if File.exist?("ext 
     | 
| 
      
 360 
     | 
    
         
            +
                  if File.exist?(File.join(RAKE_ROOT, "ext", @packaging_repo))
         
     | 
| 
       317 
361 
     | 
    
         
             
                    puts "It looks like you already have ext/#{@packaging_repo}. If you don't like it, blow it away with package:implode."
         
     | 
| 
       318 
362 
     | 
    
         
             
                  else
         
     | 
| 
       319 
     | 
    
         
            -
                    cd 'ext' do
         
     | 
| 
      
 363 
     | 
    
         
            +
                    cd File.join(RAKE_ROOT, 'ext') do
         
     | 
| 
       320 
364 
     | 
    
         
             
                      %x{git clone #{@packaging_url}}
         
     | 
| 
       321 
365 
     | 
    
         
             
                    end
         
     | 
| 
       322 
366 
     | 
    
         
             
                  end
         
     | 
| 
       323 
367 
     | 
    
         
             
                end
         
     | 
| 
       324 
368 
     | 
    
         
             
                desc "Remove all cloned packaging automation"
         
     | 
| 
       325 
369 
     | 
    
         
             
                task :implode do
         
     | 
| 
       326 
     | 
    
         
            -
                  rm_rf "ext 
     | 
| 
      
 370 
     | 
    
         
            +
                  rm_rf File.join(RAKE_ROOT, "ext", @packaging_repo)
         
     | 
| 
       327 
371 
     | 
    
         
             
                end
         
     | 
| 
       328 
372 
     | 
    
         
             
              end
         
     | 
| 
       329 
373 
     | 
    
         
             
            end
         
     | 
| 
      
 374 
     | 
    
         
            +
             
     | 
| 
      
 375 
     | 
    
         
            +
            begin
         
     | 
| 
      
 376 
     | 
    
         
            +
              load File.join(RAKE_ROOT, 'ext', 'packaging', 'packaging.rake')
         
     | 
| 
      
 377 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 378 
     | 
    
         
            +
            end
         
     | 
| 
       330 
379 
     | 
    
         
             
            ```
         
     | 
| 
       331 
380 
     | 
    
         | 
| 
       332 
381 
     | 
    
         
             
            Also in ext should be two files, build_defaults.yaml and project_data.yaml.
         
     | 
| 
         @@ -388,6 +437,12 @@ summary: 'Light weight hierarchical data store' 
     | 
|
| 
       388 
437 
     | 
    
         
             
            description: 'A pluggable data store for hierarcical data'
         
     | 
| 
       389 
438 
     | 
    
         
             
            # file containing hard coded version information, if present
         
     | 
| 
       390 
439 
     | 
    
         
             
            version_file: '/lib/hiera.rb'
         
     | 
| 
      
 440 
     | 
    
         
            +
            # A string indicating the version strategy for the project (one of 'odd_even' or 'rc_final'), defaults to rc_final
         
     | 
| 
      
 441 
     | 
    
         
            +
            # odd_even is a final release when the minor version is even, and a development release when it is odd
         
     | 
| 
      
 442 
     | 
    
         
            +
            # rc_final is a final release when there is no rc at the end of the version string, and a development release when there is
         
     | 
| 
      
 443 
     | 
    
         
            +
            version_strategy: 'rc_final'
         
     | 
| 
      
 444 
     | 
    
         
            +
            # Boolean value of whether or not to automatically update the version file before packaging (defaults to false)
         
     | 
| 
      
 445 
     | 
    
         
            +
            update_version_file: true
         
     | 
| 
       391 
446 
     | 
    
         
             
            # files and gem\_files are space separated lists
         
     | 
| 
       392 
447 
     | 
    
         
             
            # files to be packaged into a tarball and released with deb/rpm
         
     | 
| 
       393 
448 
     | 
    
         
             
            files: '[A-Z]* ext lib bin spec acceptance_tests'
         
     | 
| 
         @@ -396,6 +451,12 @@ files: '[A-Z]* ext lib bin spec acceptance_tests' 
     | 
|
| 
       396 
451 
     | 
    
         
             
            # 'tar\_excludes' only needs to include any undesired subdirectories/files of the 'files'
         
     | 
| 
       397 
452 
     | 
    
         
             
            # list to exclude
         
     | 
| 
       398 
453 
     | 
    
         
             
            tar_excludes: 'ext/packaging lib/some_excluded_file'
         
     | 
| 
      
 454 
     | 
    
         
            +
            # Array of templates or globs of templates to evaluate. Note that without this key, the packaging will
         
     | 
| 
      
 455 
     | 
    
         
            +
            # default to searching for any files in `ext` with the extension '.erb' and evaluate them. When this
         
     | 
| 
      
 456 
     | 
    
         
            +
            # key is supplied, its values override the defaults, and all desired erb files must be specified with a path or glob.
         
     | 
| 
      
 457 
     | 
    
         
            +
            templates:
         
     | 
| 
      
 458 
     | 
    
         
            +
              - ext/redhat/project.spec.erb
         
     | 
| 
      
 459 
     | 
    
         
            +
              - ext/templates/**/*.erb
         
     | 
| 
       399 
460 
     | 
    
         
             
            # files to be packaged into a gem
         
     | 
| 
       400 
461 
     | 
    
         
             
            gem_files: '{bin,lib}/**/* CHANGELOG COPYING README.md LICENSE'
         
     | 
| 
       401 
462 
     | 
    
         
             
            # To exclude specific files from inclusion in a gem:
         
     | 
| 
         @@ -417,6 +478,19 @@ gem_runtime_dependencies: 
     | 
|
| 
       417 
478 
     | 
    
         
             
              hiera-json:
         
     | 
| 
       418 
479 
     | 
    
         
             
            gem_development_dependencies:
         
     | 
| 
       419 
480 
     | 
    
         
             
              facter: '>= 1.6.11'
         
     | 
| 
      
 481 
     | 
    
         
            +
            # To add gem dependencies which only apply to a specific platform, add the key "gem_platform_dependencies".
         
     | 
| 
      
 482 
     | 
    
         
            +
            # The first key under the gem_platform_dependencies has to be a value that
         
     | 
| 
      
 483 
     | 
    
         
            +
            # corresponds to a value of RUBY_PLATFORM. The subkeys are the same as the
         
     | 
| 
      
 484 
     | 
    
         
            +
            # top-level gem dependency keys:
         
     | 
| 
      
 485 
     | 
    
         
            +
            gem_platform_dependencies:
         
     | 
| 
      
 486 
     | 
    
         
            +
              x86-mingw32:
         
     | 
| 
      
 487 
     | 
    
         
            +
                gem_runtime_dependencies:
         
     | 
| 
      
 488 
     | 
    
         
            +
                  win32process: '~> 0.6.5'
         
     | 
| 
      
 489 
     | 
    
         
            +
                gem_development_dependencies:
         
     | 
| 
      
 490 
     | 
    
         
            +
                  rake: '~> 0.9.0'
         
     | 
| 
      
 491 
     | 
    
         
            +
              x86_64-darwin:
         
     | 
| 
      
 492 
     | 
    
         
            +
                gem_runtime_dependencies:
         
     | 
| 
      
 493 
     | 
    
         
            +
                  CFPropertyList: '~> 2.2.4'
         
     | 
| 
       420 
494 
     | 
    
         
             
            # rdoc options as an array
         
     | 
| 
       421 
495 
     | 
    
         
             
            gem_rdoc_options:
         
     | 
| 
       422 
496 
     | 
    
         
             
              - --line-numbers
         
     | 
| 
         @@ -14,16 +14,18 @@ describe "00_utils" do 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  :get_rpmversion             => '0.7.0',
         
     | 
| 
       15 
15 
     | 
    
         
             
                  :get_rpmrelease             => '1',
         
     | 
| 
       16 
16 
     | 
    
         
             
                  :is_rc?                     => false,
         
     | 
| 
      
 17 
     | 
    
         
            +
                  :is_odd?                    => true,
         
     | 
| 
       17 
18 
     | 
    
         
             
                },
         
     | 
| 
       18 
     | 
    
         
            -
                '0. 
     | 
| 
       19 
     | 
    
         
            -
                  :git_describe_version       => %w{0. 
     | 
| 
       20 
     | 
    
         
            -
                  :get_dash_version           => '0. 
     | 
| 
       21 
     | 
    
         
            -
                  :get_ips_version            => '0. 
     | 
| 
       22 
     | 
    
         
            -
                  :get_dot_version            => '0. 
     | 
| 
       23 
     | 
    
         
            -
                  :get_debversion             => '0. 
     | 
| 
       24 
     | 
    
         
            -
                  :get_rpmversion             => '0. 
     | 
| 
      
 19 
     | 
    
         
            +
                '0.8.0rc10'                   => {
         
     | 
| 
      
 20 
     | 
    
         
            +
                  :git_describe_version       => %w{0.8.0rc10},
         
     | 
| 
      
 21 
     | 
    
         
            +
                  :get_dash_version           => '0.8.0rc10',
         
     | 
| 
      
 22 
     | 
    
         
            +
                  :get_ips_version            => '0.8.0rc10,3.14159-0',
         
     | 
| 
      
 23 
     | 
    
         
            +
                  :get_dot_version            => '0.8.0rc10',
         
     | 
| 
      
 24 
     | 
    
         
            +
                  :get_debversion             => '0.8.0-0.1rc10puppetlabs1',
         
     | 
| 
      
 25 
     | 
    
         
            +
                  :get_rpmversion             => '0.8.0',
         
     | 
| 
       25 
26 
     | 
    
         
             
                  :get_rpmrelease             => '0.1rc10',
         
     | 
| 
       26 
27 
     | 
    
         
             
                  :is_rc?                     => true,
         
     | 
| 
      
 28 
     | 
    
         
            +
                  :is_odd?                    => false,
         
     | 
| 
       27 
29 
     | 
    
         
             
                },
         
     | 
| 
       28 
30 
     | 
    
         
             
                '0.7.0-rc1'                   => {
         
     | 
| 
       29 
31 
     | 
    
         
             
                  :git_describe_version       => %w{0.7.0 rc1},
         
     | 
| 
         @@ -34,26 +36,29 @@ describe "00_utils" do 
     | 
|
| 
       34 
36 
     | 
    
         
             
                  :get_rpmversion             => '0.7.0',
         
     | 
| 
       35 
37 
     | 
    
         
             
                  :get_rpmrelease             => '0.1rc1',
         
     | 
| 
       36 
38 
     | 
    
         
             
                  :is_rc?                     => true,
         
     | 
| 
      
 39 
     | 
    
         
            +
                  :is_odd?                    => true,
         
     | 
| 
       37 
40 
     | 
    
         
             
                },
         
     | 
| 
       38 
     | 
    
         
            -
                '0. 
     | 
| 
       39 
     | 
    
         
            -
                  :git_describe_version       => %w{0. 
     | 
| 
       40 
     | 
    
         
            -
                  :get_dash_version           => '0. 
     | 
| 
       41 
     | 
    
         
            -
                  :get_ips_version            => '0. 
     | 
| 
       42 
     | 
    
         
            -
                  :get_dot_version            => '0. 
     | 
| 
       43 
     | 
    
         
            -
                  :get_debversion             => '0. 
     | 
| 
       44 
     | 
    
         
            -
                  :get_rpmversion             => '0. 
     | 
| 
      
 41 
     | 
    
         
            +
                '0.4.0-rc1-63-ge391f55'       => {
         
     | 
| 
      
 42 
     | 
    
         
            +
                  :git_describe_version       => %w{0.4.0 rc1 63},
         
     | 
| 
      
 43 
     | 
    
         
            +
                  :get_dash_version           => '0.4.0-rc1-63',
         
     | 
| 
      
 44 
     | 
    
         
            +
                  :get_ips_version            => '0.4.0,3.14159-63',
         
     | 
| 
      
 45 
     | 
    
         
            +
                  :get_dot_version            => '0.4.0.rc1.63',
         
     | 
| 
      
 46 
     | 
    
         
            +
                  :get_debversion             => '0.4.0-0.1rc1.63puppetlabs1',
         
     | 
| 
      
 47 
     | 
    
         
            +
                  :get_rpmversion             => '0.4.0',
         
     | 
| 
       45 
48 
     | 
    
         
             
                  :get_rpmrelease             => '0.1rc1.63',
         
     | 
| 
       46 
49 
     | 
    
         
             
                  :is_rc?                     => true,
         
     | 
| 
      
 50 
     | 
    
         
            +
                  :is_odd?                    => false,
         
     | 
| 
       47 
51 
     | 
    
         
             
                },
         
     | 
| 
       48 
     | 
    
         
            -
                '0. 
     | 
| 
       49 
     | 
    
         
            -
                  :git_describe_version       => %w{0. 
     | 
| 
       50 
     | 
    
         
            -
                  :get_dash_version           => '0. 
     | 
| 
       51 
     | 
    
         
            -
                  :get_ips_version            => '0. 
     | 
| 
       52 
     | 
    
         
            -
                  :get_dot_version            => '0. 
     | 
| 
       53 
     | 
    
         
            -
                  :get_debversion             => '0. 
     | 
| 
       54 
     | 
    
         
            -
                  :get_rpmversion             => '0. 
     | 
| 
      
 52 
     | 
    
         
            +
                '0.6.0-rc1-63-ge391f55-dirty' => {
         
     | 
| 
      
 53 
     | 
    
         
            +
                  :git_describe_version       => %w{0.6.0 rc1 63 dirty},
         
     | 
| 
      
 54 
     | 
    
         
            +
                  :get_dash_version           => '0.6.0-rc1-63-dirty',
         
     | 
| 
      
 55 
     | 
    
         
            +
                  :get_ips_version            => '0.6.0,3.14159-63-dirty',
         
     | 
| 
      
 56 
     | 
    
         
            +
                  :get_dot_version            => '0.6.0.rc1.63.dirty',
         
     | 
| 
      
 57 
     | 
    
         
            +
                  :get_debversion             => '0.6.0-0.1rc1.63dirtypuppetlabs1',
         
     | 
| 
      
 58 
     | 
    
         
            +
                  :get_rpmversion             => '0.6.0',
         
     | 
| 
       55 
59 
     | 
    
         
             
                  :get_rpmrelease             => '0.1rc1.63dirty',
         
     | 
| 
       56 
60 
     | 
    
         
             
                  :is_rc?                     => true,
         
     | 
| 
      
 61 
     | 
    
         
            +
                  :is_odd?                    => false,
         
     | 
| 
       57 
62 
     | 
    
         | 
| 
       58 
63 
     | 
    
         
             
                },
         
     | 
| 
       59 
64 
     | 
    
         
             
                '0.7.0-63-ge391f55'           => {
         
     | 
| 
         @@ -65,6 +70,7 @@ describe "00_utils" do 
     | 
|
| 
       65 
70 
     | 
    
         
             
                  :get_rpmversion             => '0.7.0.63',
         
     | 
| 
       66 
71 
     | 
    
         
             
                  :get_rpmrelease             => '1',
         
     | 
| 
       67 
72 
     | 
    
         
             
                  :is_rc?                     => false,
         
     | 
| 
      
 73 
     | 
    
         
            +
                  :is_odd?                    => true,
         
     | 
| 
       68 
74 
     | 
    
         | 
| 
       69 
75 
     | 
    
         
             
                },
         
     | 
| 
       70 
76 
     | 
    
         
             
                '0.7.0-63-ge391f55-dirty'     => {
         
     | 
| 
         @@ -76,6 +82,7 @@ describe "00_utils" do 
     | 
|
| 
       76 
82 
     | 
    
         
             
                  :get_rpmversion             => '0.7.0.63.dirty',
         
     | 
| 
       77 
83 
     | 
    
         
             
                  :get_rpmrelease             => '1',
         
     | 
| 
       78 
84 
     | 
    
         
             
                  :is_rc?                     => false,
         
     | 
| 
      
 85 
     | 
    
         
            +
                  :is_odd?                    => true,
         
     | 
| 
       79 
86 
     | 
    
         
             
                },
         
     | 
| 
       80 
87 
     | 
    
         
             
              }
         
     | 
| 
       81 
88 
     | 
    
         | 
| 
         @@ -36,11 +36,13 @@ describe Build::BuildInstance do 
     | 
|
| 
       36 
36 
     | 
    
         
             
                              :gem_dependencies,
         
     | 
| 
       37 
37 
     | 
    
         
             
                              :gem_description,
         
     | 
| 
       38 
38 
     | 
    
         
             
                              :gem_devel_dependencies,
         
     | 
| 
      
 39 
     | 
    
         
            +
                              :gem_development_dependencies,
         
     | 
| 
       39 
40 
     | 
    
         
             
                              :gem_excludes,
         
     | 
| 
       40 
41 
     | 
    
         
             
                              :gem_executables,
         
     | 
| 
       41 
42 
     | 
    
         
             
                              :gem_files,
         
     | 
| 
       42 
43 
     | 
    
         
             
                              :gem_forge_project,
         
     | 
| 
       43 
44 
     | 
    
         
             
                              :gem_name,
         
     | 
| 
      
 45 
     | 
    
         
            +
                              :gem_platform_dependencies,
         
     | 
| 
       44 
46 
     | 
    
         
             
                              :gem_rdoc_options,
         
     | 
| 
       45 
47 
     | 
    
         
             
                              :gem_require_path,
         
     | 
| 
       46 
48 
     | 
    
         
             
                              :gem_runtime_dependencies,
         
     | 
| 
         @@ -62,6 +64,7 @@ describe Build::BuildInstance do 
     | 
|
| 
       62 
64 
     | 
    
         
             
                              :jenkins_packaging_job,
         
     | 
| 
       63 
65 
     | 
    
         
             
                              :jenkins_repo_path,
         
     | 
| 
       64 
66 
     | 
    
         
             
                              :metrics,
         
     | 
| 
      
 67 
     | 
    
         
            +
                              :metrics_url,
         
     | 
| 
       65 
68 
     | 
    
         
             
                              :name,
         
     | 
| 
       66 
69 
     | 
    
         
             
                              :notify,
         
     | 
| 
       67 
70 
     | 
    
         
             
                              :project,
         
     | 
| 
         @@ -84,17 +87,16 @@ describe Build::BuildInstance do 
     | 
|
| 
       84 
87 
     | 
    
         
             
                              :rpmversion,
         
     | 
| 
       85 
88 
     | 
    
         
             
                              :ref,
         
     | 
| 
       86 
89 
     | 
    
         
             
                              :sign_tar,
         
     | 
| 
       87 
     | 
    
         
            -
                              :sles_build_host,
         
     | 
| 
       88 
     | 
    
         
            -
                              :sles_repo_path,
         
     | 
| 
       89 
     | 
    
         
            -
                              :sles_repo_host,
         
     | 
| 
       90 
     | 
    
         
            -
                              :sles_arch_repos,
         
     | 
| 
       91 
90 
     | 
    
         
             
                              :summary,
         
     | 
| 
       92 
91 
     | 
    
         
             
                              :tar_excludes,
         
     | 
| 
       93 
92 
     | 
    
         
             
                              :tar_host,
         
     | 
| 
       94 
93 
     | 
    
         
             
                              :tarball_path,
         
     | 
| 
       95 
94 
     | 
    
         
             
                              :team,
         
     | 
| 
      
 95 
     | 
    
         
            +
                              :templates,
         
     | 
| 
      
 96 
     | 
    
         
            +
                              :update_version_file,
         
     | 
| 
       96 
97 
     | 
    
         
             
                              :version,
         
     | 
| 
       97 
98 
     | 
    
         
             
                              :version_file,
         
     | 
| 
      
 99 
     | 
    
         
            +
                              :version_strategy,
         
     | 
| 
       98 
100 
     | 
    
         
             
                              :yum_host,
         
     | 
| 
       99 
101 
     | 
    
         
             
                              :yum_repo_path]
         
     | 
| 
       100 
102 
     | 
    
         | 
| 
         @@ -93,7 +93,7 @@ end 
     | 
|
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
            def rsync_to *args
         
     | 
| 
       95 
95 
     | 
    
         
             
              check_tool('rsync')
         
     | 
| 
       96 
     | 
    
         
            -
              flags = "-rHlv -O --no-perms --no-owner --no-group"
         
     | 
| 
      
 96 
     | 
    
         
            +
              flags = "-rHlv -O --no-perms --no-owner --no-group --ignore-existing"
         
     | 
| 
       97 
97 
     | 
    
         
             
              source  = args[0]
         
     | 
| 
       98 
98 
     | 
    
         
             
              target  = args[1]
         
     | 
| 
       99 
99 
     | 
    
         
             
              dest    = args[2]
         
     | 
| 
         @@ -228,8 +228,10 @@ end 
     | 
|
| 
       228 
228 
     | 
    
         | 
| 
       229 
229 
     | 
    
         
             
            def load_keychain
         
     | 
| 
       230 
230 
     | 
    
         
             
              unless @keychain_loaded
         
     | 
| 
       231 
     | 
    
         
            -
                 
     | 
| 
       232 
     | 
    
         
            -
             
     | 
| 
      
 231 
     | 
    
         
            +
                unless ENV['RPM_GPG_AGENT']
         
     | 
| 
      
 232 
     | 
    
         
            +
                  kill_keychain
         
     | 
| 
      
 233 
     | 
    
         
            +
                  start_keychain
         
     | 
| 
      
 234 
     | 
    
         
            +
                end
         
     | 
| 
       233 
235 
     | 
    
         
             
                @keychain_loaded = TRUE
         
     | 
| 
       234 
236 
     | 
    
         
             
              end
         
     | 
| 
       235 
237 
     | 
    
         
             
            end
         
     | 
| 
         @@ -260,7 +262,8 @@ def gpg_sign_file(file) 
     | 
|
| 
       260 
262 
     | 
    
         
             
              gpg ||= find_tool('gpg')
         
     | 
| 
       261 
263 
     | 
    
         | 
| 
       262 
264 
     | 
    
         
             
              if gpg
         
     | 
| 
       263 
     | 
    
         
            -
                 
     | 
| 
      
 265 
     | 
    
         
            +
                use_tty = "--no-tty --use-agent" if ENV['RPM_GPG_AGENT']
         
     | 
| 
      
 266 
     | 
    
         
            +
                sh "#{gpg} #{use_tty} --armor --detach-sign -u #{@build.gpg_key} #{file}"
         
     | 
| 
       264 
267 
     | 
    
         
             
              else
         
     | 
| 
       265 
268 
     | 
    
         
             
                fail "No gpg available. Cannot sign #{file}."
         
     | 
| 
       266 
269 
     | 
    
         
             
              end
         
     | 
| 
         @@ -311,6 +314,7 @@ def git_commit_file(file, message=nil) 
     | 
|
| 
       311 
314 
     | 
    
         
             
            end
         
     | 
| 
       312 
315 
     | 
    
         | 
| 
       313 
316 
     | 
    
         
             
            def ship_gem(file)
         
     | 
| 
      
 317 
     | 
    
         
            +
              check_file("#{ENV['HOME']}/.gem/credentials")
         
     | 
| 
       314 
318 
     | 
    
         
             
              %x{gem push #{file}}
         
     | 
| 
       315 
319 
     | 
    
         
             
            end
         
     | 
| 
       316 
320 
     | 
    
         | 
| 
         @@ -360,9 +364,9 @@ def rand_string 
     | 
|
| 
       360 
364 
     | 
    
         
             
              rand.to_s.split('.')[1]
         
     | 
| 
       361 
365 
     | 
    
         
             
            end
         
     | 
| 
       362 
366 
     | 
    
         | 
| 
       363 
     | 
    
         
            -
            def git_bundle(treeish)
         
     | 
| 
       364 
     | 
    
         
            -
              temp = get_temp
         
     | 
| 
       365 
     | 
    
         
            -
              appendix  
     | 
| 
      
 367 
     | 
    
         
            +
            def git_bundle(treeish, appendix=nil, output_dir=nil)
         
     | 
| 
      
 368 
     | 
    
         
            +
              temp = output_dir || get_temp
         
     | 
| 
      
 369 
     | 
    
         
            +
              appendix ||= rand_string
         
     | 
| 
       366 
370 
     | 
    
         
             
              sh "git bundle create #{temp}/#{@build.project}-#{@build.version}-#{appendix} #{treeish} --tags"
         
     | 
| 
       367 
371 
     | 
    
         
             
              cd temp do
         
     | 
| 
       368 
372 
     | 
    
         
             
                sh "tar -czf #{@build.project}-#{@build.version}-#{appendix}.tar.gz #{@build.project}-#{@build.version}-#{appendix}"
         
     | 
| 
         @@ -371,12 +375,14 @@ def git_bundle(treeish) 
     | 
|
| 
       371 
375 
     | 
    
         
             
              "#{temp}/#{@build.project}-#{@build.version}-#{appendix}.tar.gz"
         
     | 
| 
       372 
376 
     | 
    
         
             
            end
         
     | 
| 
       373 
377 
     | 
    
         | 
| 
       374 
     | 
    
         
            -
            # We take a tar argument for cases where `tar` isn't best, e.g. Solaris
         
     | 
| 
       375 
     | 
    
         
            -
             
     | 
| 
      
 378 
     | 
    
         
            +
            # We take a tar argument for cases where `tar` isn't best, e.g. Solaris.  We
         
     | 
| 
      
 379 
     | 
    
         
            +
            # also take an optional argument of the tarball containing the git bundle to
         
     | 
| 
      
 380 
     | 
    
         
            +
            # use.
         
     | 
| 
      
 381 
     | 
    
         
            +
            def remote_bootstrap(host, treeish, tar_cmd=nil, tarball=nil)
         
     | 
| 
       376 
382 
     | 
    
         
             
              unless tar = tar_cmd
         
     | 
| 
       377 
383 
     | 
    
         
             
                tar = 'tar'
         
     | 
| 
       378 
384 
     | 
    
         
             
              end
         
     | 
| 
       379 
     | 
    
         
            -
              tarball  
     | 
| 
      
 385 
     | 
    
         
            +
              tarball ||= git_bundle(treeish)
         
     | 
| 
       380 
386 
     | 
    
         
             
              tarball_name = File.basename(tarball).gsub('.tar.gz','')
         
     | 
| 
       381 
387 
     | 
    
         
             
              rsync_to(tarball, host, '/tmp')
         
     | 
| 
       382 
388 
     | 
    
         
             
              appendix = rand_string
         
     | 
| 
         @@ -456,28 +462,62 @@ def deprecate(old_cmd, new_cmd=nil) 
     | 
|
| 
       456 
462 
     | 
    
         
             
              STDOUT.puts
         
     | 
| 
       457 
463 
     | 
    
         
             
            end
         
     | 
| 
       458 
464 
     | 
    
         | 
| 
       459 
     | 
    
         
            -
            # Determines if this package is  
     | 
| 
       460 
     | 
    
         
            -
            #  
     | 
| 
      
 465 
     | 
    
         
            +
            # Determines if this package is a final package via the
         
     | 
| 
      
 466 
     | 
    
         
            +
            # selected version_strategy.
         
     | 
| 
      
 467 
     | 
    
         
            +
            # There are currently two supported version strategies.
         
     | 
| 
      
 468 
     | 
    
         
            +
            #
         
     | 
| 
      
 469 
     | 
    
         
            +
            # This method calls down to the version strategy indicated, defaulting to the
         
     | 
| 
      
 470 
     | 
    
         
            +
            # rc_final strategy. The methods themselves will return false if it is a final
         
     | 
| 
      
 471 
     | 
    
         
            +
            # release, so their return values are collected and then inverted before being
         
     | 
| 
      
 472 
     | 
    
         
            +
            # returned.
         
     | 
| 
      
 473 
     | 
    
         
            +
            def is_final?
         
     | 
| 
      
 474 
     | 
    
         
            +
              ret = nil
         
     | 
| 
      
 475 
     | 
    
         
            +
              case @build.version_strategy
         
     | 
| 
      
 476 
     | 
    
         
            +
                when "rc_final"
         
     | 
| 
      
 477 
     | 
    
         
            +
                  ret = is_rc?
         
     | 
| 
      
 478 
     | 
    
         
            +
                when "odd_even"
         
     | 
| 
      
 479 
     | 
    
         
            +
                  ret = is_odd?
         
     | 
| 
      
 480 
     | 
    
         
            +
                when nil
         
     | 
| 
      
 481 
     | 
    
         
            +
                  ret = is_rc?
         
     | 
| 
      
 482 
     | 
    
         
            +
              end
         
     | 
| 
      
 483 
     | 
    
         
            +
              return (! ret)
         
     | 
| 
      
 484 
     | 
    
         
            +
            end
         
     | 
| 
      
 485 
     | 
    
         
            +
             
     | 
| 
      
 486 
     | 
    
         
            +
            # the rc_final strategy (default)
         
     | 
| 
       461 
487 
     | 
    
         
             
            # Assumes version strings in the formats:
         
     | 
| 
       462 
488 
     | 
    
         
             
            # final:
         
     | 
| 
       463 
489 
     | 
    
         
             
            # '0.7.0'
         
     | 
| 
       464 
490 
     | 
    
         
             
            # '0.7.0-63'
         
     | 
| 
       465 
491 
     | 
    
         
             
            # '0.7.0-63-dirty'
         
     | 
| 
       466 
     | 
    
         
            -
            #  
     | 
| 
      
 492 
     | 
    
         
            +
            # development:
         
     | 
| 
       467 
493 
     | 
    
         
             
            # '0.7.0rc1 (we don't actually use this format anymore, but once did)
         
     | 
| 
       468 
494 
     | 
    
         
             
            # '0.7.0-rc1'
         
     | 
| 
       469 
495 
     | 
    
         
             
            # '0.7.0-rc1-63'
         
     | 
| 
       470 
496 
     | 
    
         
             
            # '0.7.0-rc1-63-dirty'
         
     | 
| 
       471 
497 
     | 
    
         
             
            def is_rc?
         
     | 
| 
       472 
498 
     | 
    
         
             
              return TRUE if get_dash_version =~ /^\d+\.\d+\.\d+-*rc\d+/
         
     | 
| 
       473 
     | 
    
         
            -
              FALSE
         
     | 
| 
      
 499 
     | 
    
         
            +
              return FALSE
         
     | 
| 
      
 500 
     | 
    
         
            +
            end
         
     | 
| 
      
 501 
     | 
    
         
            +
             
     | 
| 
      
 502 
     | 
    
         
            +
            # the odd_even strategy (mcollective)
         
     | 
| 
      
 503 
     | 
    
         
            +
            # final:
         
     | 
| 
      
 504 
     | 
    
         
            +
            # '0.8.0'
         
     | 
| 
      
 505 
     | 
    
         
            +
            # '1.8.0-63'
         
     | 
| 
      
 506 
     | 
    
         
            +
            # '0.8.1-63-dirty'
         
     | 
| 
      
 507 
     | 
    
         
            +
            # development:
         
     | 
| 
      
 508 
     | 
    
         
            +
            # '0.7.0'
         
     | 
| 
      
 509 
     | 
    
         
            +
            # '1.7.0-63'
         
     | 
| 
      
 510 
     | 
    
         
            +
            # '0.7.1-63-dirty'
         
     | 
| 
      
 511 
     | 
    
         
            +
            def is_odd?
         
     | 
| 
      
 512 
     | 
    
         
            +
              return TRUE if get_dash_version.match(/^\d+\.(\d+)\.\d+/)[1].to_i.odd?
         
     | 
| 
      
 513 
     | 
    
         
            +
              return FALSE
         
     | 
| 
       474 
514 
     | 
    
         
             
            end
         
     | 
| 
       475 
515 
     | 
    
         | 
| 
       476 
516 
     | 
    
         
             
            # Utility method to return the dist method if this is a redhat box. We use this
         
     | 
| 
       477 
517 
     | 
    
         
             
            # in rpm packaging to define a dist macro, and we use it in the pl:fetch task
         
     | 
| 
       478 
518 
     | 
    
         
             
            # to disable ssl checking for redhat 5 because it has a certs bundle so old by
         
     | 
| 
       479 
519 
     | 
    
         
             
            # default that it's useless for our purposes.
         
     | 
| 
       480 
     | 
    
         
            -
            def el_version 
     | 
| 
      
 520 
     | 
    
         
            +
            def el_version
         
     | 
| 
       481 
521 
     | 
    
         
             
              if File.exists?('/etc/fedora-release')
         
     | 
| 
       482 
522 
     | 
    
         
             
                nil
         
     | 
| 
       483 
523 
     | 
    
         
             
              elsif File.exists?('/etc/redhat-release')
         
     | 
| 
         @@ -578,3 +618,39 @@ def escape_html(uri) 
     | 
|
| 
       578 
618 
     | 
    
         
             
              require 'cgi'
         
     | 
| 
       579 
619 
     | 
    
         
             
              CGI.escapeHTML(uri)
         
     | 
| 
       580 
620 
     | 
    
         
             
            end
         
     | 
| 
      
 621 
     | 
    
         
            +
             
     | 
| 
      
 622 
     | 
    
         
            +
            # Add a parameter to a given uri. If we were sane we'd use
         
     | 
| 
      
 623 
     | 
    
         
            +
            # encode_www_form(params) of URI, but because we're not, because that will http
         
     | 
| 
      
 624 
     | 
    
         
            +
            # encode it, which isn't what we want since we're require the encoding provided
         
     | 
| 
      
 625 
     | 
    
         
            +
            # by escapeHTML of CGI, since this is being transfered in the xml of a jenkins
         
     | 
| 
      
 626 
     | 
    
         
            +
            # job via curl and DEAR JEEBUS WHAT HAVE WE DONE.
         
     | 
| 
      
 627 
     | 
    
         
            +
            def add_param_to_uri(uri, param)
         
     | 
| 
      
 628 
     | 
    
         
            +
              require 'uri'
         
     | 
| 
      
 629 
     | 
    
         
            +
              uri = URI.parse(uri)
         
     | 
| 
      
 630 
     | 
    
         
            +
              uri.query = [uri.query, param].compact.join('&')
         
     | 
| 
      
 631 
     | 
    
         
            +
              uri.to_s
         
     | 
| 
      
 632 
     | 
    
         
            +
            end
         
     | 
| 
      
 633 
     | 
    
         
            +
             
     | 
| 
      
 634 
     | 
    
         
            +
            # Remotely set the immutable bit on a list of files
         
     | 
| 
      
 635 
     | 
    
         
            +
            #
         
     | 
| 
      
 636 
     | 
    
         
            +
            def remote_set_immutable(host, files)
         
     | 
| 
      
 637 
     | 
    
         
            +
              remote_ssh_cmd(host, "sudo chattr +i #{files.join(" ")}")
         
     | 
| 
      
 638 
     | 
    
         
            +
            end
         
     | 
| 
      
 639 
     | 
    
         
            +
             
     | 
| 
      
 640 
     | 
    
         
            +
            # ex combines the behavior of `%x{cmd}` and rake's `sh "cmd"`. `%x{cmd}` has
         
     | 
| 
      
 641 
     | 
    
         
            +
            # the benefit of returning the standard out of an executed command, enabling us
         
     | 
| 
      
 642 
     | 
    
         
            +
            # to query the file system, e.g. `contents = %x{ls}`. The drawback to `%x{cmd}`
         
     | 
| 
      
 643 
     | 
    
         
            +
            # is that on failure of a command (something returned non-zero) the return of
         
     | 
| 
      
 644 
     | 
    
         
            +
            # `%x{cmd}` is just an empty string. As such, we can't know if we succeeded.
         
     | 
| 
      
 645 
     | 
    
         
            +
            # Rake's `sh "cmd"`, on the other hand, will raise a RuntimeError if a command
         
     | 
| 
      
 646 
     | 
    
         
            +
            # does not return 0, but doesn't return any of the stdout from the command -
         
     | 
| 
      
 647 
     | 
    
         
            +
            # only true or false depending on its success or failure. With `ex(cmd)` we
         
     | 
| 
      
 648 
     | 
    
         
            +
            # purport to both return the results of the command execution (ala `%x{cmd}`)
         
     | 
| 
      
 649 
     | 
    
         
            +
            # while also raising an exception if a command does not succeed (ala `sh "cmd"`).
         
     | 
| 
      
 650 
     | 
    
         
            +
            def ex(command)
         
     | 
| 
      
 651 
     | 
    
         
            +
              ret = %x[#{command}]
         
     | 
| 
      
 652 
     | 
    
         
            +
              unless $?.success?
         
     | 
| 
      
 653 
     | 
    
         
            +
                raise RuntimeError
         
     | 
| 
      
 654 
     | 
    
         
            +
              end
         
     | 
| 
      
 655 
     | 
    
         
            +
              ret
         
     | 
| 
      
 656 
     | 
    
         
            +
            end
         
     |