91 lines
2.3 KiB
Lua
91 lines
2.3 KiB
Lua
local pl_path = require("pl.path")
|
|
local shell = require("resty.shell")
|
|
local resty_signal = require("resty.signal")
|
|
|
|
|
|
local CONSTANTS = require("spec.internal.constants")
|
|
|
|
|
|
local function isnewer(path_a, path_b)
|
|
if not pl_path.exists(path_a) then
|
|
return true
|
|
end
|
|
if not pl_path.exists(path_b) then
|
|
return false
|
|
end
|
|
return assert(pl_path.getmtime(path_b)) > assert(pl_path.getmtime(path_a))
|
|
end
|
|
|
|
|
|
local function make(workdir, specs)
|
|
workdir = pl_path.normpath(workdir or pl_path.currentdir())
|
|
|
|
for _, spec in ipairs(specs) do
|
|
local targetpath = pl_path.join(workdir, spec.target)
|
|
for _, src in ipairs(spec.src) do
|
|
local srcpath = pl_path.join(workdir, src)
|
|
if isnewer(targetpath, srcpath) then
|
|
local ok, _, stderr = shell.run(string.format("cd %s; %s", workdir, spec.cmd), nil, 0)
|
|
assert(ok, stderr)
|
|
if isnewer(targetpath, srcpath) then
|
|
error(string.format("couldn't make %q newer than %q", targetpath, srcpath))
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
local grpc_target_proc
|
|
|
|
|
|
local function start_grpc_target()
|
|
local ngx_pipe = require("ngx.pipe")
|
|
assert(make(CONSTANTS.GRPC_TARGET_SRC_PATH, {
|
|
{
|
|
target = "targetservice/targetservice.pb.go",
|
|
src = { "../targetservice.proto" },
|
|
cmd = "protoc --go_out=. --go-grpc_out=. -I ../ ../targetservice.proto",
|
|
},
|
|
{
|
|
target = "targetservice/targetservice_grpc.pb.go",
|
|
src = { "../targetservice.proto" },
|
|
cmd = "protoc --go_out=. --go-grpc_out=. -I ../ ../targetservice.proto",
|
|
},
|
|
{
|
|
target = "target",
|
|
src = { "grpc-target.go", "targetservice/targetservice.pb.go", "targetservice/targetservice_grpc.pb.go" },
|
|
cmd = "go mod tidy && go mod download all && go build",
|
|
},
|
|
}))
|
|
grpc_target_proc = assert(ngx_pipe.spawn({ CONSTANTS.GRPC_TARGET_SRC_PATH .. "/target" }, {
|
|
merge_stderr = true,
|
|
}))
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
local function stop_grpc_target()
|
|
if grpc_target_proc then
|
|
grpc_target_proc:kill(resty_signal.signum("QUIT"))
|
|
grpc_target_proc = nil
|
|
end
|
|
end
|
|
|
|
|
|
local function get_grpc_target_port()
|
|
return 15010
|
|
end
|
|
|
|
|
|
return {
|
|
start_grpc_target = start_grpc_target,
|
|
stop_grpc_target = stop_grpc_target,
|
|
get_grpc_target_port = get_grpc_target_port,
|
|
}
|
|
|