aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2019-03-19 10:33:25 -0400
committerHisham Muhammad <hisham@gobolinux.org>2019-04-01 17:32:53 -0400
commit655eacf345a108247ba6ea506721395571108912 (patch)
tree01c5658eb2d221a49ecd9d47c2d7e7b6094a69af
parent4e97804fc1b8b47667ec1d8b8f3c473d31c8bb29 (diff)
downloadluarocks-655eacf345a108247ba6ea506721395571108912.tar.gz
luarocks-655eacf345a108247ba6ea506721395571108912.tar.bz2
luarocks-655eacf345a108247ba6ea506721395571108912.zip
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
-rw-r--r--.travis.yml4
-rw-r--r--spec/fixtures/gpg/private-keys-v1.d/5D2D3F97B88B18604D819EA9DF5B730C75D71B60.keybin0 -> 977 bytes
-rw-r--r--spec/fixtures/gpg/private-keys-v1.d/B71C36B4EDEB72A047FED1C01BCFF4D08837E3B1.keybin0 -> 978 bytes
-rw-r--r--spec/fixtures/gpg/pubring.kbxbin0 -> 1494 bytes
-rw-r--r--spec/fixtures/gpg/trustdb.gpgbin0 -> 1240 bytes
-rw-r--r--spec/pack_spec.lua10
-rw-r--r--spec/util/test_env.lua2
-rw-r--r--src/luarocks/cmd/pack.lua14
-rw-r--r--src/luarocks/core/cfg.lua2
-rw-r--r--src/luarocks/signing.lua22
-rw-r--r--src/luarocks/util.lua1
11 files changed, 53 insertions, 2 deletions
diff --git a/.travis.yml b/.travis.yml
index 67eec990..70fe9ee6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,8 +22,8 @@ integration_script: &integration_script
22 - if [ "$TRAVIS_OS_NAME" = "linux" ]; then shellcheck ./configure; fi 22 - if [ "$TRAVIS_OS_NAME" = "linux" ]; then shellcheck ./configure; fi
23 - ./configure --with-lua=lua_install 23 - ./configure --with-lua=lua_install
24 - ./makedist dev 24 - ./makedist dev
25 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis" 25 - busted -o gtest --exclude-tags=gpg,git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis"
26 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full" 26 - busted -o gtest --exclude-tags=gpg,git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full"
27 27
28jobs: 28jobs:
29 include: 29 include:
diff --git a/spec/fixtures/gpg/private-keys-v1.d/5D2D3F97B88B18604D819EA9DF5B730C75D71B60.key b/spec/fixtures/gpg/private-keys-v1.d/5D2D3F97B88B18604D819EA9DF5B730C75D71B60.key
new file mode 100644
index 00000000..26240f5a
--- /dev/null
+++ b/spec/fixtures/gpg/private-keys-v1.d/5D2D3F97B88B18604D819EA9DF5B730C75D71B60.key
Binary files differ
diff --git a/spec/fixtures/gpg/private-keys-v1.d/B71C36B4EDEB72A047FED1C01BCFF4D08837E3B1.key b/spec/fixtures/gpg/private-keys-v1.d/B71C36B4EDEB72A047FED1C01BCFF4D08837E3B1.key
new file mode 100644
index 00000000..e75a2eb4
--- /dev/null
+++ b/spec/fixtures/gpg/private-keys-v1.d/B71C36B4EDEB72A047FED1C01BCFF4D08837E3B1.key
Binary files differ
diff --git a/spec/fixtures/gpg/pubring.kbx b/spec/fixtures/gpg/pubring.kbx
new file mode 100644
index 00000000..fc63cbc6
--- /dev/null
+++ b/spec/fixtures/gpg/pubring.kbx
Binary files differ
diff --git a/spec/fixtures/gpg/trustdb.gpg b/spec/fixtures/gpg/trustdb.gpg
new file mode 100644
index 00000000..cabca669
--- /dev/null
+++ b/spec/fixtures/gpg/trustdb.gpg
Binary files differ
diff --git a/spec/pack_spec.lua b/spec/pack_spec.lua
index 08647cfb..8b3612db 100644
--- a/spec/pack_spec.lua
+++ b/spec/pack_spec.lua
@@ -50,6 +50,16 @@ describe("LuaRocks pack #integration", function()
50 assert(test_env.remove_files(lfs.currentdir(), "say%-")) 50 assert(test_env.remove_files(lfs.currentdir(), "say%-"))
51 end) 51 end)
52 52
53 pending("#gpg --sign", function()
54 assert(run.luarocks_bool("install say 1.2"))
55 assert(run.luarocks_bool("install luassert"))
56 assert(run.luarocks_bool("install say 1.0"))
57 assert(run.luarocks_bool("pack say --sign"))
58 assert.is_truthy(lfs.attributes("say-1.2-1.all.rock"))
59 assert.is_truthy(lfs.attributes("say-1.2-1.all.rock.asc"))
60 assert(test_env.remove_files(lfs.currentdir(), "say%-"))
61 end)
62
53 describe("#mock", function() 63 describe("#mock", function()
54 64
55 setup(function() 65 setup(function()
diff --git a/spec/util/test_env.lua b/spec/util/test_env.lua
index 6850214f..9337c396 100644
--- a/spec/util/test_env.lua
+++ b/spec/util/test_env.lua
@@ -436,6 +436,7 @@ local function create_env(testing_paths)
436 end 436 end
437 437
438 local env_variables = {} 438 local env_variables = {}
439 env_variables.GNUPGHOME = testing_paths.gpg_dir
439 env_variables.LUA_VERSION = luaversion_short 440 env_variables.LUA_VERSION = luaversion_short
440 env_variables.LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/testing_config.lua" 441 env_variables.LUAROCKS_CONFIG = testing_paths.testrun_dir .. "/testing_config.lua"
441 if test_env.TEST_TARGET_OS == "windows" then 442 if test_env.TEST_TARGET_OS == "windows" then
@@ -593,6 +594,7 @@ local function create_paths(luaversion_full)
593 end 594 end
594 595
595 testing_paths.fixtures_dir = base_dir .. "/spec/fixtures" 596 testing_paths.fixtures_dir = base_dir .. "/spec/fixtures"
597 testing_paths.gpg_dir = testing_paths.fixtures_dir .. "/gpg"
596 testing_paths.fixtures_repo_dir = base_dir .. "/spec/fixtures/a_repo" 598 testing_paths.fixtures_repo_dir = base_dir .. "/spec/fixtures/a_repo"
597 testing_paths.util_dir = base_dir .. "/spec/util" 599 testing_paths.util_dir = base_dir .. "/spec/util"
598 testing_paths.testrun_dir = base_dir .. "/testrun" 600 testing_paths.testrun_dir = base_dir .. "/testrun"
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 = {}
5 5
6local util = require("luarocks.util") 6local util = require("luarocks.util")
7local pack = require("luarocks.pack") 7local pack = require("luarocks.pack")
8local signing = require("luarocks.signing")
8local queries = require("luarocks.queries") 9local queries = require("luarocks.queries")
9 10
10cmd_pack.help_summary = "Create a rock, packing sources or binaries." 11cmd_pack.help_summary = "Create a rock, packing sources or binaries."
11cmd_pack.help_arguments = "{<rockspec>|<name> [<version>]}" 12cmd_pack.help_arguments = "{<rockspec>|<name> [<version>]}"
12cmd_pack.help = [[ 13cmd_pack.help = [[
14--sign Produce a signature file as well.
15
13Argument may be a rockspec file, for creating a source rock, 16Argument may be a rockspec file, for creating a source rock,
14or the name of an installed package, for creating a binary rock. 17or the name of an installed package, for creating a binary rock.
15In the latter case, the app version may be given as a second 18In the latter case, the app version may be given as a second
@@ -40,7 +43,18 @@ function cmd_pack.command(flags, arg, version)
40 if err then 43 if err then
41 return nil, err 44 return nil, err
42 else 45 else
46 local sigfile
47 if flags["sign"] then
48 sigfile, err = signing.sign_file(file)
49 util.printout()
50 end
43 util.printout("Packed: "..file) 51 util.printout("Packed: "..file)
52 if sigfile then
53 util.printout("Sigature stored in: "..sigfile)
54 end
55 if err then
56 return nil, err
57 end
44 return true 58 return true
45 end 59 end
46end 60end
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)
230 SVN = "svn", 230 SVN = "svn",
231 HG = "hg", 231 HG = "hg",
232 232
233 GPG = "gpg",
234
233 RSYNC = "rsync", 235 RSYNC = "rsync",
234 WGET = "wget", 236 WGET = "wget",
235 SCP = "scp", 237 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 @@
1local signing = {}
2
3local cfg = require("luarocks.core.cfg")
4local fs = require("luarocks.fs")
5
6function signing.sign_file(file)
7 local vars = cfg.variables
8 local gpg_ok, err = fs.is_tool_available(vars.GPG, "gpg")
9 if not gpg_ok then
10 return nil, err
11 end
12 local gpg = vars.GPG
13
14 local sigfile = file .. ".asc"
15 if fs.execute(gpg, "--armor", "--output", sigfile, "--detach-sign", file) then
16 return sigfile
17 else
18 return nil, "failed running " .. gpg .. " to sign " .. file
19 end
20end
21
22return 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 = {
149 ["rockspec"] = true, 149 ["rockspec"] = true,
150 ["rockspec-format"] = "<ver>", 150 ["rockspec-format"] = "<ver>",
151 ["server"] = "<server>", 151 ["server"] = "<server>",
152 ["sign"] = true,
152 ["skip-pack"] = true, 153 ["skip-pack"] = true,
153 ["source"] = true, 154 ["source"] = true,
154 ["summary"] = "\"<text>\"", 155 ["summary"] = "\"<text>\"",