class Autoproj::CLI::StandaloneCI

CI-related commands that can be executed without an Autoproj installation

Constants

AUTOPROJ_STUB_PATH

Public Instance Methods

dpkg_filter_status(status_path, *rules) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 50
def dpkg_filter_status(status_path, *rules)
    rules += File.readlines(options[:file]).map(&:strip) if options[:file]
    rules = rules.map do |line|
        next if line.empty? || line.start_with?('#')

        parse_rule(line)
    end

    packages = Autoproj::CI::Rebuild.dpkg_create_package_install(
        status_path, rules, orig: options[:orig]
    )
    puts packages.join("\n")
end
filter_envsh(source_path, output_dir, workspace_dir) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 102
def filter_envsh(source_path, output_dir, workspace_dir)
    filtered = File.readlines(source_path)
                   .find_all { |l| !/^(source|\.)/.match?(l) }
    File.open(File.join(output_dir, workspace_dir, 'env.sh'), 'w') do |io|
        io.write(filtered.join)
    end
end
generate_autoproj_stub(output_dir, workspace_dir) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 110
def generate_autoproj_stub(output_dir, workspace_dir)
    dot_autoproj = File.join(output_dir, workspace_dir, '.autoproj')
    FileUtils.mkdir File.join(dot_autoproj, 'bin')
    autoproj_path = File.join(dot_autoproj, 'bin', 'autoproj')

    erb = ERB.new(File.read(AUTOPROJ_STUB_PATH))
    erb.location = [AUTOPROJ_STUB_PATH, 0]
    File.open(autoproj_path, 'w') do |io|
        io.write erb.result_with_hash(workspace_dir: "/#{workspace_dir}")
    end
    FileUtils.chmod 0o755, autoproj_path
end
parse_rule(line) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 65
def parse_rule(line)
    unless (m = /^([+-])\s+(.*)/.match(line))
        raise ArgumentError, "invalid rule line '#{line}'"
    end

    mode = (m[1] == '+')
    begin
        [mode, Regexp.new(m[2])]
    rescue RegexpError => e
        raise ArgumentError, "invalid regexp in '#{line}': #{e}"
    end
end
prepare_workspace(config_dir, output_dir, workspace_dir) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 78
def prepare_workspace(config_dir, output_dir, workspace_dir)
    FileUtils.mkdir_p File.join(output_dir, workspace_dir, '.autoproj')

    if File.file?(envsh = File.join(config_dir, 'env.sh'))
        filter_envsh(envsh, output_dir, workspace_dir)
        generate_autoproj_stub(output_dir, workspace_dir)
    end

    if File.file?(file = File.join(config_dir, 'source.yml'))
        FileUtils.cp(
            file, File.join(output_dir, workspace_dir, '.autoproj')
        )
    end

    if File.file?(file = File.join(config_dir, 'installation-manifest'))
        FileUtils.cp(
            file,
            File.join(output_dir, workspace_dir, 'installation-manifest')
        )
    end
end
rebuild_root(config_dir, cache_root, output) click to toggle source
# File lib/autoproj/cli/standalone_ci.rb, line 20
def rebuild_root(config_dir, cache_root, output)
    dir = Dir.mktmpdir
    Autoproj::CI::Rebuild.prepare_synthetic_buildroot(
        File.join(config_dir, 'installation-manifest'),
        File.join(config_dir, 'versions.yml'),
        cache_root,
        dir
    )

    if options[:workspace]
        prepare_workspace(config_dir, dir, options[:workspace])
    end

    output = File.expand_path(output)
    unless system('tar', 'caf', output, '--owner=root', '--group=root',
                  '.', chdir: dir)
        raise "failed to create #{output}"
    end
ensure
    FileUtils.rm_rf(dir) if dir && File.directory?(dir)
end