Module: Pkg::Repo

Defined in:
lib/packaging/repo.rb

Class Method Summary collapse

Class Method Details

.argument_required?(argument_name, repo_command) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/packaging/repo.rb', line 55

def argument_required?(argument_name, repo_command)
  repo_command.include?("__#{argument_name.upcase}__")
end

.create_all_repo_archives(project, versioning) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/packaging/repo.rb', line 28

def create_all_repo_archives(project, versioning)
  platforms = Pkg::Config.platform_repos
  platforms.each do |platform|
    archive_name = "#{project}-#{platform['name']}"
    create_signed_repo_archive(platform['repo_location'], archive_name, versioning)
  end
end

.create_signed_repo_archive(path_to_repo, name_of_archive, versioning) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/packaging/repo.rb', line 4

def create_signed_repo_archive(path_to_repo, name_of_archive, versioning)
  tar = Pkg::Util::Tool.check_tool('tar')
  Dir.chdir("pkg") do
    if versioning == 'ref'
      local_target = File.join(Pkg::Config.project, Pkg::Config.ref)
    elsif versioning == 'version'
      local_target = File.join(Pkg::Config.project, Pkg::Util::Version.dot_version)
    end
    Dir.chdir(local_target) do
      if Pkg::Util::File.empty_dir?(path_to_repo)
        if ENV['FAIL_ON_MISSING_TARGET'] == "true"
          raise "ERROR: missing packages under #{path_to_repo}"
        else
          warn "Skipping #{name_of_archive} because #{path_to_repo} has no files"
        end
      else
        puts "Archiving #{path_to_repo} as #{name_of_archive}"
        stdout, _, _ = Pkg::Util::Execution.capture3("#{tar} --owner=0 --group=0 --create --gzip --file #{File.join('repos', "#{name_of_archive}.tar.gz")} #{path_to_repo}")
        stdout
      end
    end
  end
end

.directories_that_contain_packages(artifact_directory, pkg_ext) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/packaging/repo.rb', line 36

def directories_that_contain_packages(artifact_directory, pkg_ext)
  cmd = "[ -d #{artifact_directory} ] || exit 1 ; "
  cmd << "pushd #{artifact_directory} > /dev/null && "
  cmd << "find . -name '*.#{pkg_ext}' -print0 | xargs --no-run-if-empty -0 -I {} dirname {} "
  stdout, stderr = Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, cmd, true)
  return stdout.split
rescue => e
  fail "Could not retrieve directories that contain #{pkg_ext} packages in #{Pkg::Config.distribution_server}:#{artifact_directory}"
end

.populate_repo_directory(artifact_parent_directory) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/packaging/repo.rb', line 46

def populate_repo_directory(artifact_parent_directory)
  cmd = "[ -d #{artifact_parent_directory}/artifacts ] || exit 1 ; "
  cmd << "pushd #{artifact_parent_directory} > /dev/null && "
  cmd << 'rsync --archive --verbose --one-file-system --ignore-existing artifacts/ repos/ '
  Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, cmd)
rescue => e
  fail "Could not populate repos directory in #{Pkg::Config.distribution_server}:#{artifact_parent_directory}"
end

.update_repo(remote_host, command, options = {}) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/packaging/repo.rb', line 59

def update_repo(remote_host, command, options = {})
  fail_message = "Missing required argument '%s', update your build_defaults?"
  [:repo_name, :repo_path, :repo_host, :repo_url].each do |option|
    fail fail_message % option.to_s if argument_required?(option.to_s, command) && !options[option]
  end

  whitelist = {
    __REPO_NAME__: options[:repo_name],
    __REPO_PATH__: options[:repo_path],
    __REPO_HOST__: options[:repo_host],
    __REPO_URL__: options[:repo_url],
    __APT_PLATFORMS__: Pkg::Config.apt_releases.join(' '),
    __GPG_KEY__: Pkg::Util::Gpg.key
  }
  Pkg::Util::Net.remote_ssh_cmd(remote_host, Pkg::Util::Misc.search_and_replace(command, whitelist))
end