Browse Source

implement bin/gsign

tags/0.1
devrandom 9 years ago
parent
commit
f8a29869f2
2 changed files with 78 additions and 0 deletions
  1. 1
    0
      .gitignore
  2. 77
    0
      bin/gsign

+ 1
- 0
.gitignore View File

@@ -8,3 +8,4 @@ result
inputs
base*
*.qcow2
sigs

+ 77
- 0
bin/gsign View File

@@ -0,0 +1,77 @@
#!/usr/bin/ruby

require 'optparse'
require 'yaml'
require 'fileutils'
require 'pathname'

@options = {}

def system!(cmd)
system(cmd) or raise "failed to run #{cmd}"
end

def sanitize(str, where)
raise "unsanitary string in #{where}" if (str =~ /[^\w.-]/)
str
end

def sanitize_path(str, where)
raise "unsanitary string in #{where}" if (str =~ /[^\w\/.-]/)
str
end

def info(str)
puts str unless @options[:quiet]
end

################################

OptionParser.new do |opts|
opts.banner = "Usage: build [options] <build-description>.yml"

opts.on("-q", "--quiet", "be quiet") do |v|
@options[:quiet] = v
end

opts.on("-s SIGNER", "--signer SIGNER", "identity to sign as") do |v|
@options[:signer] = v
end

opts.on("-r REL", "--release REL", "release name") do |v|
@options[:release] = v
end

opts.on("-d DEST", "--destination DEST", "directory to place signature in") do |v|
@options[:destination] = v
end
end.parse!

base_dir = Pathname.new(__FILE__).expand_path.dirname.parent

build_desc_file = ARGV.shift or raise "must supply YAML build description file"

build_desc = YAML.load_file(build_desc_file)

in_sums = []

result_dir = 'result'

package_name = build_desc["name"] or raise "must supply name"
package_name = sanitize(package_name, "package name")

result_file = "#{package_name}-res.yml"
result_path = File.join(result_dir, result_file)
File.exists?(result_path) or raise "#{result_path} does not exist"

destination = @options[:destination] || File.join(base_dir, "sigs", package_name)
release = @options[:release] || "current"
release = sanitize(release, "release")
signer = @options[:signer] or raise "must supply signer with --signer"

FileUtils.mkdir_p(destination)

release_path = File.join(destination, release, signer)
FileUtils.mkdir_p(release_path)
FileUtils.cp(result_path, release_path)
system!("gpg --detach-sign -u #{signer} -o #{release_path}/signature.pgp #{result_path}")

Loading…
Cancel
Save