frm 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/bin/frm +12 -1
- data/lib/frm/base.rb +18 -2
- data/lib/frm/release.rb +2 -2
- data/lib/frm/release_pusher.rb +4 -2
- data/lib/frm/s3.rb +4 -3
- data/lib/frm/version.rb +1 -1
- metadata +1 -1
data/bin/frm
CHANGED
@@ -50,6 +50,17 @@ Usage: frm [options] package1 [package2] ..."
|
|
50
50
|
options[:release] = release
|
51
51
|
end
|
52
52
|
|
53
|
+
options[:public_repo] = false
|
54
|
+
opts.on('-P','--public-repo true|false','public repo or not') do |public_repo|
|
55
|
+
raise "public_repo option can only be 'true' or 'false'" \
|
56
|
+
unless public_repo == 'true' || public_repo == 'false'
|
57
|
+
if public_repo == 'true'
|
58
|
+
options[:public_repo] = true
|
59
|
+
else
|
60
|
+
options[:public_repo] = false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
53
64
|
|
54
65
|
# This displays the help screen, all programs are
|
55
66
|
# assumed to have this option.
|
@@ -94,6 +105,6 @@ puts "creating release..."
|
|
94
105
|
package_release = FRM::PackageRelease.new(packages,options[:release])
|
95
106
|
|
96
107
|
puts "pushing release..."
|
97
|
-
release_pusher = FRM::ReleasePusher.new(package_release,options[:access_key],options[:secret_key],options[:bucket],options[:prefix])
|
108
|
+
release_pusher = FRM::ReleasePusher.new(package_release,options[:access_key],options[:secret_key],options[:bucket],options[:prefix],options[:public_repo])
|
98
109
|
|
99
110
|
puts "looks like everything ran ok!"
|
data/lib/frm/base.rb
CHANGED
@@ -13,16 +13,32 @@ module FRM
|
|
13
13
|
Digest::SHA2.hexdigest(string)
|
14
14
|
end
|
15
15
|
|
16
|
+
def run(command)
|
17
|
+
output = `#{command} 2>&1`.chomp
|
18
|
+
unless $?.success?
|
19
|
+
STDERR.puts "failed to run command: #{command}"
|
20
|
+
STDERR.puts "output was: "
|
21
|
+
STDERR.puts output
|
22
|
+
raise "failed to run command: #{command}"
|
23
|
+
end
|
24
|
+
return output
|
25
|
+
end
|
26
|
+
|
16
27
|
# TODO:
|
17
28
|
# there has to be a better way to use gpg withen ruby. found many
|
18
29
|
# broken solutions :\
|
19
30
|
def gpg_clearsign(message)
|
20
|
-
|
31
|
+
run "echo '#{message}' | gpg --clearsign"
|
21
32
|
end
|
22
33
|
|
23
34
|
# TODO: same as above
|
24
35
|
def gpg_detached(message)
|
25
|
-
|
36
|
+
run "echo '#{message}' | gpg -abs"
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODO: same as above
|
40
|
+
def gpg_export_pubkey
|
41
|
+
run "gpg --armor --export"
|
26
42
|
end
|
27
43
|
|
28
44
|
|
data/lib/frm/release.rb
CHANGED
@@ -81,7 +81,7 @@ Description: Cloudscaling APT repository
|
|
81
81
|
|
82
82
|
def filename(package)
|
83
83
|
filename = File.basename package.path
|
84
|
-
shortname =
|
84
|
+
shortname = run("dpkg --field #{package.path} Package")
|
85
85
|
first_letter = shortname[0]
|
86
86
|
package.repo_filename = "pool/main/#{first_letter}/#{shortname}/#{filename}"
|
87
87
|
end
|
@@ -94,7 +94,7 @@ Description: Cloudscaling APT repository
|
|
94
94
|
|
95
95
|
def generate_package_stub(package)
|
96
96
|
package_stub = ''
|
97
|
-
package_stub <<
|
97
|
+
package_stub << run("dpkg --field #{package.path}") + "\n"
|
98
98
|
package_stub << "Filename: #{filename(package)}\n"
|
99
99
|
package_stub << "Size: #{package.size}\n"
|
100
100
|
package_stub << "MD5sum: #{package.md5}\n"
|
data/lib/frm/release_pusher.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module FRM
|
2
2
|
|
3
3
|
class ReleasePusher < Base
|
4
|
-
def initialize(package_release,access_key,secret_key,bucket,prefix)
|
4
|
+
def initialize(package_release,access_key,secret_key,bucket,prefix,public_repo=false)
|
5
5
|
@release = package_release.release
|
6
6
|
@bucket = bucket
|
7
7
|
@prefix = prefix
|
8
|
-
@s3 = FRM::S3.new(access_key,secret_key)
|
8
|
+
@s3 = FRM::S3.new(access_key,secret_key,public_repo)
|
9
9
|
push_packages(package_release.packages)
|
10
10
|
push_release_files(package_release)
|
11
11
|
end
|
@@ -34,6 +34,8 @@ module FRM
|
|
34
34
|
@s3.put(i386_release_file_path + '/Release',package_release.i386_release_file,@bucket)
|
35
35
|
@s3.put(i386_release_file_path + '/Packages',package_release.i386_packages_file,@bucket)
|
36
36
|
@s3.put(i386_release_file_path + '/Packages.gz',package_release.gzipped_i386_packages_file,@bucket)
|
37
|
+
# push public key
|
38
|
+
@s3.put(@prefix + '/public.key',gpg_export_pubkey,@bucket)
|
37
39
|
end
|
38
40
|
|
39
41
|
|
data/lib/frm/s3.rb
CHANGED
@@ -3,13 +3,14 @@ require 'aws-sdk'
|
|
3
3
|
module FRM
|
4
4
|
class S3 < Base
|
5
5
|
|
6
|
-
attr_reader :max_retries, :s3
|
6
|
+
attr_reader :max_retries, :s3, :acl
|
7
7
|
|
8
|
-
def initialize(access_key_id,secret_access_key)
|
8
|
+
def initialize(access_key_id,secret_access_key,public_repo=false)
|
9
9
|
@max_retries = 10
|
10
10
|
AWS.config(:access_key_id => access_key_id,
|
11
11
|
:secret_access_key => secret_access_key)
|
12
12
|
@s3 = AWS::S3.new
|
13
|
+
@acl = public_repo ? :public_read : :private
|
13
14
|
end
|
14
15
|
|
15
16
|
|
@@ -21,7 +22,7 @@ module FRM
|
|
21
22
|
def put(key,value,bucket)
|
22
23
|
@max_retries.times do |i|
|
23
24
|
begin
|
24
|
-
@s3.buckets[bucket].objects[key].write(value)
|
25
|
+
@s3.buckets[bucket].objects[key].write(value,acl: @acl)
|
25
26
|
return true
|
26
27
|
rescue Object => o
|
27
28
|
print_retry(__method__,o)
|
data/lib/frm/version.rb
CHANGED