aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2019-03-19 19:13:05 -0400
committerHisham Muhammad <hisham@gobolinux.org>2019-04-01 17:32:53 -0400
commit18842a049784cdbba66010fb30f06525e9016600 (patch)
treea6826096ad0f0f36e847a68434087407be35e1f3
parent655eacf345a108247ba6ea506721395571108912 (diff)
downloadluarocks-18842a049784cdbba66010fb30f06525e9016600.tar.gz
luarocks-18842a049784cdbba66010fb30f06525e9016600.tar.bz2
luarocks-18842a049784cdbba66010fb30f06525e9016600.zip
upload: add --sign option
-rw-r--r--spec/upload_spec.lua6
-rw-r--r--src/luarocks/cmd/upload.lua31
2 files changed, 34 insertions, 3 deletions
diff --git a/spec/upload_spec.lua b/spec/upload_spec.lua
index 76a27ee3..947147d7 100644
--- a/spec/upload_spec.lua
+++ b/spec/upload_spec.lua
@@ -40,7 +40,11 @@ describe("LuaRocks upload tests #integration", function()
40 assert.is_true(run.luarocks_bool("upload " .. testing_paths.fixtures_dir .. "/a_rock-1.0-1.rockspec " .. test_env.openssl_dirs .. " --api-key=123", {LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/luarocks_site.lua"})) 40 assert.is_true(run.luarocks_bool("upload " .. testing_paths.fixtures_dir .. "/a_rock-1.0-1.rockspec " .. test_env.openssl_dirs .. " --api-key=123", {LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/luarocks_site.lua"}))
41 end) 41 end)
42 42
43 it("LuaRocks upload rockspec with api-key and skip-pack", function() 43 it("#gpg rockspec with --sign", function()
44 print(run.luarocks("upload " .. testing_paths.fixtures_dir .. "/a_rock-1.0-1.rockspec " .. test_env.openssl_dirs .. " --api-key=123 --sign", {LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/luarocks_site.lua"}))
45 end)
46
47 it("rockspec with api-key and skip-pack", function()
44 assert.is_true(run.luarocks_bool("upload --skip-pack " .. testing_paths.fixtures_dir .. "/a_rock-1.0-1.rockspec " .. test_env.openssl_dirs .. " --api-key=123", {LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/luarocks_site.lua"})) 48 assert.is_true(run.luarocks_bool("upload --skip-pack " .. testing_paths.fixtures_dir .. "/a_rock-1.0-1.rockspec " .. test_env.openssl_dirs .. " --api-key=123", {LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/luarocks_site.lua"}))
45 end) 49 end)
46 end) 50 end)
diff --git a/src/luarocks/cmd/upload.lua b/src/luarocks/cmd/upload.lua
index ffcb1a0a..b052500e 100644
--- a/src/luarocks/cmd/upload.lua
+++ b/src/luarocks/cmd/upload.lua
@@ -1,6 +1,7 @@
1 1
2local upload = {} 2local upload = {}
3 3
4local signing = require("luarocks.signing")
4local util = require("luarocks.util") 5local util = require("luarocks.util")
5local fetch = require("luarocks.fetch") 6local fetch = require("luarocks.fetch")
6local pack = require("luarocks.pack") 7local pack = require("luarocks.pack")
@@ -12,14 +13,20 @@ upload.help_arguments = "[--skip-pack] [--api-key=<key>] [--force] <rockspec>"
12upload.help = [[ 13upload.help = [[
13<rockspec> Pack a source rock file (.src.rock extension), 14<rockspec> Pack a source rock file (.src.rock extension),
14 upload rockspec and source rock to server. 15 upload rockspec and source rock to server.
16
15--skip-pack Do not pack and send source rock. 17--skip-pack Do not pack and send source rock.
18
16--api-key=<key> Give it an API key. It will be stored for subsequent uses. 19--api-key=<key> Give it an API key. It will be stored for subsequent uses.
20
17--temp-key=<key> Use the given a temporary API key in this invocation only. 21--temp-key=<key> Use the given a temporary API key in this invocation only.
18 It will not be stored. 22 It will not be stored.
23
19--force Replace existing rockspec if the same revision of 24--force Replace existing rockspec if the same revision of
20 a module already exists. This should be used only 25 a module already exists. This should be used only
21 in case of upload mistakes: when updating a rockspec, 26 in case of upload mistakes: when updating a rockspec,
22 increment the revision number instead. 27 increment the revision number instead.
28
29--sign Upload a signature file alongside each file as well.
23]] 30]]
24 31
25local function is_dev_version(version) 32local function is_dev_version(version)
@@ -58,6 +65,17 @@ function upload.command(flags, fname)
58 return nil, "Revision "..rockspec.version.." already exists on the server. "..util.see_help("upload") 65 return nil, "Revision "..rockspec.version.." already exists on the server. "..util.see_help("upload")
59 end 66 end
60 67
68 local sigfname
69 local rock_sigfname
70
71 if flags["sign"] then
72 sigfname, err = signing.sign_file(fname)
73 if err then
74 return nil, "Failed signing rockspec: " .. err
75 end
76 util.printout("Signed rockspec: "..sigfname)
77 end
78
61 local rock_fname 79 local rock_fname
62 if not flags["skip-pack"] and not is_dev_version(rockspec.version) then 80 if not flags["skip-pack"] and not is_dev_version(rockspec.version) then
63 util.printout("Packing " .. tostring(rockspec.package)) 81 util.printout("Packing " .. tostring(rockspec.package))
@@ -65,12 +83,20 @@ function upload.command(flags, fname)
65 if not rock_fname then 83 if not rock_fname then
66 return nil, err 84 return nil, err
67 end 85 end
86 if flags["sign"] then
87 rock_sigfname, err = signing.sign_file(rock_fname)
88 if err then
89 return nil, "Failed signing rock: " .. err
90 end
91 util.printout("Signed packed rock: "..rock_sigfname)
92 end
68 end 93 end
69 94
70 local multipart = require("luarocks.upload.multipart") 95 local multipart = require("luarocks.upload.multipart")
71 96
72 res, err = api:method("upload", nil, { 97 res, err = api:method("upload", nil, {
73 rockspec_file = multipart.new_file(fname) 98 rockspec_file = multipart.new_file(fname),
99 rockspec_sig = sigfname and multipart.new_file(sigfname),
74 }) 100 })
75 if not res then return nil, err end 101 if not res then return nil, err end
76 102
@@ -86,7 +112,8 @@ function upload.command(flags, fname)
86 end 112 end
87 util.printout(("Sending " .. tostring(rock_fname) .. " ...")) 113 util.printout(("Sending " .. tostring(rock_fname) .. " ..."))
88 res, err = api:method("upload_rock/" .. ("%d"):format(res.version.id), nil, { 114 res, err = api:method("upload_rock/" .. ("%d"):format(res.version.id), nil, {
89 rock_file = multipart.new_file(rock_fname) 115 rock_file = multipart.new_file(rock_fname),
116 rock_sig = rock_sigfname and multipart.new_file(rock_sigfname),
90 }) 117 })
91 if not res then return nil, err end 118 if not res then return nil, err end
92 end 119 end