From 655eacf345a108247ba6ea506721395571108912 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Tue, 19 Mar 2019 10:33:25 -0400 Subject: Add --sign option to `luarocks pack` * Introduce a new module, `luarocks.signing` * Add `--sign` option to `luarocks pack`, which produces a detached GPG signature * Includes a basic test, along with some fixtures with a password-less GPG key --- src/luarocks/cmd/pack.lua | 14 ++++++++++++++ src/luarocks/core/cfg.lua | 2 ++ src/luarocks/signing.lua | 22 ++++++++++++++++++++++ src/luarocks/util.lua | 1 + 4 files changed, 39 insertions(+) create mode 100644 src/luarocks/signing.lua (limited to 'src') diff --git a/src/luarocks/cmd/pack.lua b/src/luarocks/cmd/pack.lua index 52b2fbca..02e554d9 100644 --- a/src/luarocks/cmd/pack.lua +++ b/src/luarocks/cmd/pack.lua @@ -5,11 +5,14 @@ local cmd_pack = {} local util = require("luarocks.util") local pack = require("luarocks.pack") +local signing = require("luarocks.signing") local queries = require("luarocks.queries") cmd_pack.help_summary = "Create a rock, packing sources or binaries." cmd_pack.help_arguments = "{| []}" cmd_pack.help = [[ +--sign Produce a signature file as well. + Argument may be a rockspec file, for creating a source rock, or the name of an installed package, for creating a binary rock. In the latter case, the app version may be given as a second @@ -40,7 +43,18 @@ function cmd_pack.command(flags, arg, version) if err then return nil, err else + local sigfile + if flags["sign"] then + sigfile, err = signing.sign_file(file) + util.printout() + end util.printout("Packed: "..file) + if sigfile then + util.printout("Sigature stored in: "..sigfile) + end + if err then + return nil, err + end return true end end diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua index 5b9dec2f..c6824153 100644 --- a/src/luarocks/core/cfg.lua +++ b/src/luarocks/core/cfg.lua @@ -230,6 +230,8 @@ local function make_defaults(lua_version, target_cpu, platforms, home) SVN = "svn", HG = "hg", + GPG = "gpg", + RSYNC = "rsync", WGET = "wget", SCP = "scp", diff --git a/src/luarocks/signing.lua b/src/luarocks/signing.lua new file mode 100644 index 00000000..7503768e --- /dev/null +++ b/src/luarocks/signing.lua @@ -0,0 +1,22 @@ +local signing = {} + +local cfg = require("luarocks.core.cfg") +local fs = require("luarocks.fs") + +function signing.sign_file(file) + local vars = cfg.variables + local gpg_ok, err = fs.is_tool_available(vars.GPG, "gpg") + if not gpg_ok then + return nil, err + end + local gpg = vars.GPG + + local sigfile = file .. ".asc" + if fs.execute(gpg, "--armor", "--output", sigfile, "--detach-sign", file) then + return sigfile + else + return nil, "failed running " .. gpg .. " to sign " .. file + end +end + +return signing diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua index 25c521ea..bba39457 100644 --- a/src/luarocks/util.lua +++ b/src/luarocks/util.lua @@ -149,6 +149,7 @@ local supported_flags = { ["rockspec"] = true, ["rockspec-format"] = "", ["server"] = "", + ["sign"] = true, ["skip-pack"] = true, ["source"] = true, ["summary"] = "\"\"", -- cgit v1.2.3-55-g6feb