Compare commits

..

5 Commits

Author SHA1 Message Date
b6627d3cd3 fix: accept http 1.0 2025-11-27 14:56:30 +02:00
bc3256cc4c fix build script 2025-11-27 14:49:28 +02:00
2d97f02929 implement graceful shutdown 2025-11-27 14:47:03 +02:00
a6b8cf31fe add dep 2025-11-27 14:17:08 +02:00
9da52baabb fix dockerfile 2025-11-27 14:16:10 +02:00
7 changed files with 43 additions and 21 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "deps/mklua"]
path = deps/mklua
url = https://git.topcheto.eu/topchetoeu/mklua.git

View File

@@ -1,36 +1,31 @@
FROM alpine AS build
RUN apk add --no-cache lua5.4-dev lua5.4-luv make gcc pkgconf util-linux-misc
RUN apk add --no-cache lua5.4-dev lua5.4-luv build-base pkgconf util-linux-misc
WORKDIR /build
COPY src ./src/
COPY lib ./lib/
COPY Makefile ./Makefile
COPY mklua ./mklua
# ADD https://git.topcheto.eu/topchetoeu/mklua/releases/download/latest/mklua ./mklua
COPY deps ./deps
RUN ln -s /usr/lib/liblua-5.4.so.0 /usr/lib/liblua.so.5.4
RUN ./mklua
RUN make MKLUA=./mklua
# ADD https://git.topcheto.eu/topchetoeu/mklua/releases/download/latest/mklua ./mklua
RUN make LUA=lua5.4
FROM alpine
EXPOSE 8080
VOLUME /plugins
VOLUME /views
VOLUME /static
VOLUME /config
VOLUME /data
STOPSIGNAL SIGINT
HEALTHCHECK --interval=30s --start-period=1s CMD curl localhost:8080/.well-known/keepalive | grep "OK"
ENTRYPOINT ./bin/website
WORKDIR /app
WORKDIR /
RUN apk add --no-cache lua5.4 lua5.4-luv
COPY --from=build ./bin/website .
COPY --from=build /build/bin/website .
CMD [ "./website", "./data/config.lua" ]

View File

@@ -42,15 +42,15 @@ compile_flags.txt:
printf -- '$(foreach v,$(CCARGS) $(LDARGS),\n$v)' > compile_flags.txt
$(OUTPUT): $(LIBS) $(MKLUA_OUT) $(SOURCES) | $(dir $(OUTPUT))
$(CC) $(CCARGS) $(LDARGS) $^ -o $@
$(CC) $(CCARGS) $^ $(LDARGS) -o $@
$(MKLUA_OUT): $(DEPS) | $(dir $(MKLUA_OUT)) $(MKLUA)
$(MKLUA) $(MKLUA_FLAGS) $(MKLUA_ENTRY) -o $@
deps/mklua/mklua:
$(MKLUA):
deps/mklua/Makefile:
git submodule update --init deps/mklua
$(MKLUA): deps/mklua/Makefile
make -C deps/mklua
%/:
mkdir -p $@

1
deps/mklua vendored Submodule

Submodule deps/mklua added at 5f343c2126

View File

@@ -270,7 +270,7 @@ local function http_read_req(stream)
local type, path, version = line:match "^(%S-) (%S-) HTTP/(%S-)\r\n$";
if not type then return nil, "unexpected format" end
if version ~= "1.1" then return nil, "only HTTP 1.1 supported" end
if version ~= "1.1" and version ~= "1.0" then return nil, "only HTTP 1.1/1.0 supported, got " .. version end
local headers, err = http_read_headers(stream);
if not headers then return nil, err end
@@ -288,7 +288,7 @@ local function http_read_res(stream)
local version, code = line:match "^HTTP/(%S-) (%S-) (.-)\r\n$";
if not version then return nil, "unexpected format" end
if version ~= "1.1" then return nil, "only HTTP 1.1 supported" end
if version ~= "1.1" and version ~= "1.0" then return nil, "only HTTP 1.1/1.0 supported, got " .. version end
local headers, err = http_read_headers(stream);
if not headers then return nil, err end

12
src/sync/sig.lua Normal file
View File

@@ -0,0 +1,12 @@
--- @param sig uv.aliases.signals
--- @param cb fun(num: uv.aliases.signals): false?
return function (sig, cb)
local self = assert(uv.new_signal());
uv.signal_start(self, sig, function (num)
if cb(num) == false then
uv.signal_stop(self);
uv.close(self);
end
end);
end

View File

@@ -2,6 +2,7 @@ require "utils.printing";
require "template";
require "plugin.breadcrumbs";
require "plugin.navbar";
local sig = require "sync.sig"
local sync = require "sync";
local tcp = require "sync.tcp";
@@ -30,8 +31,18 @@ end
return require "sync.entry" (function (...)
-- Why a bad pipe manages to topple a whole process in unix is beyond me
local sigpipe = assert(uv.new_signal());
uv.signal_start(sigpipe, "sigpipe", function () end);
sig("sigpipe", function (num) end);
sig("sigint", function (num)
print "Gracefully exiting...";
uv.stop();
sig("sigint", function (num)
print "SIGINT repeated, forcefully exiting...";
os.exit(0);
end);
return false;
end);
local conf_file = ...;
local config = assert(loadfile(conf_file))();