Compare commits

...

2 Commits

Author SHA1 Message Date
fc2019680a fix build script 2025-11-27 14:47:25 +02:00
2d97f02929 implement graceful shutdown 2025-11-27 14:47:03 +02:00
5 changed files with 38 additions and 16 deletions

View File

@@ -1,32 +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 deps ./deps
RUN ln -s /usr/lib/liblua-5.4.so.0 /usr/lib/liblua.so.5.4
RUN make
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 $@

2
deps/mklua vendored

Submodule deps/mklua updated: 318928ddbc...0c05556eb1

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))();