From 18842a049784cdbba66010fb30f06525e9016600 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad <hisham@gobolinux.org> Date: Tue, 19 Mar 2019 19:13:05 -0400 Subject: upload: add --sign option --- spec/upload_spec.lua | 6 +++++- src/luarocks/cmd/upload.lua | 31 +++++++++++++++++++++++++++++-- 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() 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"})) end) - it("LuaRocks upload rockspec with api-key and skip-pack", function() + it("#gpg rockspec with --sign", function() + 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"})) + end) + + it("rockspec with api-key and skip-pack", function() 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"})) end) 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 @@ local upload = {} +local signing = require("luarocks.signing") local util = require("luarocks.util") local fetch = require("luarocks.fetch") local pack = require("luarocks.pack") @@ -12,14 +13,20 @@ upload.help_arguments = "[--skip-pack] [--api-key=<key>] [--force] <rockspec>" upload.help = [[ <rockspec> Pack a source rock file (.src.rock extension), upload rockspec and source rock to server. + --skip-pack Do not pack and send source rock. + --api-key=<key> Give it an API key. It will be stored for subsequent uses. + --temp-key=<key> Use the given a temporary API key in this invocation only. It will not be stored. + --force Replace existing rockspec if the same revision of a module already exists. This should be used only in case of upload mistakes: when updating a rockspec, increment the revision number instead. + +--sign Upload a signature file alongside each file as well. ]] local function is_dev_version(version) @@ -58,6 +65,17 @@ function upload.command(flags, fname) return nil, "Revision "..rockspec.version.." already exists on the server. "..util.see_help("upload") end + local sigfname + local rock_sigfname + + if flags["sign"] then + sigfname, err = signing.sign_file(fname) + if err then + return nil, "Failed signing rockspec: " .. err + end + util.printout("Signed rockspec: "..sigfname) + end + local rock_fname if not flags["skip-pack"] and not is_dev_version(rockspec.version) then util.printout("Packing " .. tostring(rockspec.package)) @@ -65,12 +83,20 @@ function upload.command(flags, fname) if not rock_fname then return nil, err end + if flags["sign"] then + rock_sigfname, err = signing.sign_file(rock_fname) + if err then + return nil, "Failed signing rock: " .. err + end + util.printout("Signed packed rock: "..rock_sigfname) + end end local multipart = require("luarocks.upload.multipart") res, err = api:method("upload", nil, { - rockspec_file = multipart.new_file(fname) + rockspec_file = multipart.new_file(fname), + rockspec_sig = sigfname and multipart.new_file(sigfname), }) if not res then return nil, err end @@ -86,7 +112,8 @@ function upload.command(flags, fname) end util.printout(("Sending " .. tostring(rock_fname) .. " ...")) res, err = api:method("upload_rock/" .. ("%d"):format(res.version.id), nil, { - rock_file = multipart.new_file(rock_fname) + rock_file = multipart.new_file(rock_fname), + rock_sig = rock_sigfname and multipart.new_file(rock_sigfname), }) if not res then return nil, err end end -- cgit v1.2.3-55-g6feb