Add common cache and per-build cache

Allow each builder to cache some files for re-use in the next build. This
allows for poor-man's dependency chaining.

Additionally, add a common cache pool for all builds. This can be used for
saving (for example) downloaded files to be shared between builds.
lxc
Cory Fields 10 years ago
parent 93b39496c4
commit ea24af1043

@ -80,6 +80,14 @@ def build_one_configuration(suite, arch, build_desc, reference_datetime)
system! "copy-to-target #{@quiet_flag} inputs/#{filename} build/" system! "copy-to-target #{@quiet_flag} inputs/#{filename} build/"
end end
if Dir.exists?("cache/#{build_desc["name"]}")
system! "copy-to-target #{@quiet_flag} cache/#{build_desc["name"]}/ cache/"
end
if Dir.exists?("cache/common")
system! "copy-to-target #{@quiet_flag} cache/common/ cache/"
end
info "Updating apt-get repository (log in var/install.log)" info "Updating apt-get repository (log in var/install.log)"
system! "on-target -u root apt-get update > var/install.log 2>&1" system! "on-target -u root apt-get update > var/install.log 2>&1"
@ -164,10 +172,12 @@ in_sums = []
build_dir = 'build' build_dir = 'build'
result_dir = 'result' result_dir = 'result'
cache_dir = 'cache'
FileUtils.rm_rf(build_dir) FileUtils.rm_rf(build_dir)
FileUtils.mkdir(build_dir) FileUtils.mkdir(build_dir)
FileUtils.mkdir_p(result_dir) FileUtils.mkdir_p(result_dir)
FileUtils.mkdir_p(cache_dir)
package_name = build_desc["name"] or raise "must supply name" package_name = build_desc["name"] or raise "must supply name"
package_name = sanitize(package_name, "package name") package_name = sanitize(package_name, "package name")
@ -237,12 +247,18 @@ suites.each do |suite|
info "Grabbing results" info "Grabbing results"
system! "copy-from-target #{@quiet_flag} out #{build_dir}" system! "copy-from-target #{@quiet_flag} out #{build_dir}"
info "Grabbing cache"
system! "copy-from-target #{@quiet_flag} cache/#{package_name}/ #{cache_dir}"
system! "copy-from-target #{@quiet_flag} cache/common/ #{cache_dir}"
base_manifest = File.read("var/base-#{suite}-#{arch}.manifest") base_manifest = File.read("var/base-#{suite}-#{arch}.manifest")
base_manifests["#{suite}-#{arch}"] = base_manifest base_manifests["#{suite}-#{arch}"] = base_manifest
end end
end end
out_dir = File.join(build_dir, "out") out_dir = File.join(build_dir, "out")
cache_common_dir = File.join(cache_dir, "common")
cache_package_dir = File.join(cache_dir, "#{package_name}")
out_sums = {} out_sums = {}
info "Generating report" info "Generating report"
@ -255,6 +271,24 @@ Dir.glob(File.join(out_dir, '**', '*'), File::FNM_DOTMATCH).sort.each do |file_i
puts out_sums[file] unless @options[:quiet] puts out_sums[file] unless @options[:quiet]
end end
Dir.glob(File.join(cache_common_dir, '**', '*'), File::FNM_DOTMATCH).sort.each do |file_in_out|
next if File.directory?(file_in_out)
file = file_in_out.sub(cache_common_dir + File::SEPARATOR, '')
file = sanitize_path(file, file_in_out)
out_sums[file] = `cd #{cache_common_dir} && sha256sum #{file}`
raise "failed to sum #{file}" unless $? == 0
puts out_sums[file] unless @options[:quiet]
end
Dir.glob(File.join(cache_package_dir, '**', '*'), File::FNM_DOTMATCH).sort.each do |file_in_out|
next if File.directory?(file_in_out)
file = file_in_out.sub(cache_package_dir + File::SEPARATOR, '')
file = sanitize_path(file, file_in_out)
out_sums[file] = `cd #{cache_package_dir} && sha256sum #{file}`
raise "failed to sum #{file}" unless $? == 0
puts out_sums[file] unless @options[:quiet]
end
out_manifest = out_sums.keys.sort.map { |key| out_sums[key] }.join('') out_manifest = out_sums.keys.sort.map { |key| out_sums[key] }.join('')
in_manifest = in_sums.join('') in_manifest = in_sums.join('')

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
rm -rf install out build rm -rf install out build cache
mkdir build mkdir build
mkdir out mkdir out
mkdir install mkdir install
mkdir -p cache/common

Loading…
Cancel
Save