1
0
mirror of https://github.com/ohwgiles/laminar.git synced 2024-10-27 20:34:20 +00:00
Commit Graph

359 Commits

Author SHA1 Message Date
Oliver Giles
559a6480ee send SIGKILL to unterminated child jobs
If we haven't exited 2 seconds after SIGTERM, send SIGKILL. This
allows aborting of runs with wayward descendent processes.
2020-06-20 16:05:14 +12:00
Oliver Giles
1bb545e3f9 cmake: more appropriate use of CMAKE_INSTALL_PREFIX
CMAKE_INSTALL_PREFIX is supposed to be used to set an install prefix
of e.g. /usr or /usr/local. Because we need to install files to /etc,
we had been requiring CMAKE_INSTALL_PREFIX=/ and installing using
relative paths.

The best practice method is to install to /etc using absolute paths,
and then allow CMAKE_INSTALL_PREFIX to set where the final binaries
actually go. Now that it actually has some meaning, the systemd
service is generated to incorporate that path.

Those wishing to use "make install" to install laminar to a subdir
should use "make DESTDIR=path/to/subdir install" and NOT modify
CMAKE_INSTALL_PREFIX.

Documentation and packaging scripts updated accordingly.
2020-06-20 15:59:35 +12:00
Oliver Giles
de948c149e don't report latestNum of non-existent job
navigating to a non-existent job in the frontend caused a
mutating change to the buildNums map, and returing the latestNum
field caused the frontend to repeatedly try to fetch the latest
run, which could overload the backend
2020-06-20 15:46:18 +12:00
Oliver Giles
0f2e601692 use c++17, deprecate debian 9 (stretch) packaging
C++17 has some nice new features, but Debian Stretch doesn't
support a compiler which can use it. Stretch is oldstable for a
while now anyway, so just deprecate support.
2020-06-20 15:39:34 +12:00
Oliver Giles
c690be3a90 set html lang="en"
This fixes weird offers from browsers to translate erroneously
detected languages
2020-06-19 12:13:09 +12:00
Oliver Giles
1cc6cc6ae9 unify SSE reconnect behaviour
Chrome auto-reconnects when an EventSource connection is interrupted
but Firefox doesn't. Enforce consistent behaviour by implementing
reconnect logic.
2020-06-19 12:01:46 +12:00
Oliver Giles
d5cfa3b94e connect stdin to /dev/null
laminard is a daemon process and does not read from stdin. Usually
we can rely on the process mananger to do this for us, but if not
(e.g. laminard is run interactively), we need this so that child
processes (job runs) will not be able to block on stdin.

resolves #125
2020-06-15 12:31:42 +12:00
Oliver Giles
081becf23a laminarc: correct variable lifetime of show-jobs etc
the one-liner used to iterate on the results of the RPC
calls for show-jobs, show-queued and show-running meant
that the result collection was destroyed before we
finished with it. Hoist it out of the loop.

resolves #127
2020-06-14 07:49:02 +12:00
Oliver Giles
6c61fb3111 add missing #includes
New compiler version exposed missing header files

resolves #123
2020-05-22 11:42:16 +12:00
Oliver Giles
eadcdbdf9c laminarc: improve exit codes and errors
- return non-zero when failed to connect to laminard
- only output trigger links on successful trigger
- better error messages

Resolves #121
2020-04-25 08:49:39 +12:00
Cameron Eagans
2e54773e83
Add the ability to customize index.html (#113)
User may provide a custom index.html template file to be used instead
of the built-in version. Changes to this file are watched by laminard
using inotify in order to load and compress the custom file for gzip
delivery, reusing the existing method for serving static assets.

This feature obviates the custom css feature, so remove references from
the manual and add a deprecation warning if it is used.

Add a section to the UserManual describing how to use this feature and
including a link to an example using Semantic UI.
2020-03-10 19:40:14 +02:00
Oliver Giles
f981491a34 define FNM_EXTMATCH to 0 if undefined
FNM_EXTMATCH is undefined under musl. In that case, we
just won't support extended match patterns.

Resolves #110
2020-02-25 20:36:26 +02:00
Oliver Giles
a7e6094d01 replace KJ_ASSERT with LASSERT
inadvertently reintroduced KJ_ASSERT with recent refactor.
It uses __FILE__ which contains path to source, which is
fixed with LASSERT
2020-01-02 08:16:55 +02:00
Oliver Giles
6f366e21cc centos pkg fix: laminard in sbin
minor packaging fix for laminard move made in 304ef797b
2019-12-31 20:12:50 +02:00
Oliver Giles
2bf04d8157 allow setting a job description
adding DESCRIPTION=foo to $JOBNAME.conf will display "foo"
in the job overview page on the frontend

Resolves #97
2019-12-25 14:37:16 +02:00
Oliver Giles
40b708c594 UserManual: remove outdated reference to tags 2019-12-25 14:34:17 +02:00
Oliver Giles
b8ab43b508 UserManual: add CLICOLOR_FORCE docs 2019-12-23 07:58:52 +02:00
Oliver Giles
3fde38c6b8 job leader process
Implement a separate process, the "leader", which runs all the
scripts for a job run, instead of directly from the main laminard
process. This makes for a cleaner process tree view, where the
owning job for a given script is clear; also the leader process
acts as a subreaper to clean up any wayward descendent processes.

Resolves #78.
2019-12-23 07:56:37 +02:00
Oliver Giles
304ef797b8 install laminard in usr/sbin not usr/bin
complies with FHS
2019-12-13 11:39:30 +02:00
Oliver Giles
e6f338ceb2 readme: add sentence about contributing
with link to the DCO.

(hopefully) resolves #98
2019-12-13 11:17:31 +02:00
Oliver Giles
0384fc9a0a
Replace nodes/tags with contexts
The nodes/tags system has not been particularly successful, it's not as
intuitive as it could be, and in an attempt to be a single feature to address
many use cases, ends up addressing none of them particularly well.

This commit replaces nodes and tags with contexts.

Each job may define which context(s) the job may be associated with.
Laminar will only pop the job off the waiting queue when it can be assigned
to a context. A context defines an integer number of executors, which
represents how many runs can be simultaneously assigned to it. A context
may provide extra environment variables.

Essentially, a context replaces a node, and tags are gone. You just assign
jobs to contexts directly, and you can use a glob expression. This should be
more intuitive.

For grouping jobs in the WebUI, a separate mechanism called "groups" is provided.
2019-12-13 10:42:22 +02:00
Oliver Giles
a0da7b109e pkg: add build script for centos 8 2019-11-02 11:24:48 +02:00
Oliver Giles
4534cb8627 pkg: mark ~upstream version in centos rpm 2019-11-01 20:36:57 +02:00
Oliver Giles
8cf31fa1c2 debian package: mark /etc/laminar.conf as a config file
This triggers apt's configuration file management system, allowing
the user to choose their locally modified version, the new upstream
version, inspect differences etc; instead of blindly overwriting it.

Resolves #92.
2019-11-01 10:51:39 +02:00
Oliver Giles
4aaa930e17 debian10 pkg script: add missing dependency on libcapnp 2019-11-01 10:26:02 +02:00
Oliver Giles
8a1095cb73 move packaging scripts into pkg directory
This helps avoid confusion with the 'docker' directory. Also restore
the debian9 scripts which may be useful for a while longer, update
the names of the scripts and update the README accordingly.
2019-11-01 10:24:03 +02:00
Oliver Giles
ba472711be refactor: remove run page json type hack
this hack tried to avoid sending unnecessary data to the frontend,
but it was more trouble than it's worth
2019-11-01 07:27:34 +02:00
Oliver Giles
39ca7e86cf replace websockets with sse and refactor
Large refactor that more closely aligns the codebase to the kj async
style, more clearly exposes an interface for functional testing and
removes cruft. There is a slight increase in coupling between the
Laminar and Http/Rpc classes, but this was always an issue, just until
now more obscured by the arbitrary pure virtual LaminarInterface class
(which has been removed in this change) and the previous lumping
together of all the async stuff in the Server class (which is now
more spread around the code according to function).

This change replaces the use of Websockets with Server Side Events
(SSE). They are simpler and more suitable for the publish-style messages
used by Laminar, and typically require less configuration of the
reverse proxy HTTP server.

Use of gmock is also removed, which eases testing in certain envs.

Resolves #90.
2019-10-05 20:06:35 +03:00
Oliver Giles
4a07e24da3 split server into http and rpc parts
this is initial preparation for a larger refactor
2019-09-27 20:50:46 +03:00
Oliver Giles
4614ada1d3 log: use fully qualified namespace ref for __FILE_BASE__
helps prevent conflicts if "using namespace" is used
2019-09-27 10:48:00 +03:00
Oliver Giles
21c097a7a9 resolves #104: fix clang compiler error
provide a local typedef instead of using a pure anonymous struct

also fix inconsistent whitespace
2019-09-27 10:42:01 +03:00
Devon Bagley
b90f49987f resolves #102: example Dockerfile to build laminar docker image
Create example Dockerfile and document its use in the User Manual.

This provides a minimal Alpine Linux based starting point for users who want to build a custom Laminar Docker container.
2019-09-19 09:10:05 +03:00
Oliver Giles
2ee950d1c3 build scripts: debian 10 is now current stable 2019-09-04 09:33:16 +03:00
Stefan Bühler
5d31d4152e fix debian package filename and contained version (#101)
The inner version should be the same as the one in the filename; the
filename pattern is "${name}_${version}_${arch}.deb".

Set the version suffix to avoid conflicts with a future Debian package
and include the Debian version this package was built against.
2019-09-04 09:31:43 +03:00
Oliver Giles
e1fe5697d2 README: add explicit instruction for installing dependencies 2019-08-25 07:48:56 +03:00
Oliver Giles
7b418a546c add uint typedef
Needed for musl
2019-07-04 12:28:33 +03:00
[[sroracle]]
1642899159 test: fix RunTest on systems with single file core utilities (#95)
On systems such as Alpine Linux (with busybox) and Adelie Linux (with
coreutils), the shell core utilities such as pwd, true, false, env, and
yes are all symlinks to a single binary. This single binary relies on
the name of the symlink to determine which command ("applet" in busybox
parlance) to execute. Therefore creating symlinks to these symlinks will
not work since the single binary will only see the top-level symlink and
thus think it is an invalid command.

Instead, generate executable shell scripts that exec into the desired
command. This also allows $PATH based resolution to occur instead of
hard-coding the command paths.

See also issue #94.
2019-05-24 21:27:24 +03:00
Oliver Giles
448d8cfa48 log.h: null-terminate compile-time filename strings 2019-04-17 09:26:45 +03:00
Oliver Giles
21ea5363a9 resolves #89: ignore unknown http query params 2019-04-15 06:54:21 +03:00
Oliver Giles
0c67d4c844 logging: strip full paths from __FILE__ at compile-time 2019-04-11 22:14:26 +03:00
Oliver Giles
bcb8b438f3 laminarc: more explicit return codes 2019-04-11 21:00:00 +03:00
Oliver Giles
a851f19eb3 resolves #85: systemd unit file After=network.target 2019-03-31 08:36:08 +03:00
Oliver Giles
95482c78a5 resolves #80: reverse-proxy with custom base URL
Fix all hrefs and vue routes to correctly operate against the
<base href> tag. Add a configuration parameter to override the
content of the href attribute, and describe its use.
2019-03-29 22:43:16 +03:00
Oliver Giles
210787a352 log endpoint: hint to reverse-proxy not to buffer
As discussed in #88, nginx will buffer the chunked transfer-encoding
unless the proxy_buffering directive is disabled, or the
X-Accel-Buffering header is set to no. Do the latter to reduce
configuration burden on frontend reverse-proxy setups.
2019-03-29 22:40:46 +03:00
Vaclav Valicek
303fe7c6ae resolves #87: Fix archive url: missing slash
Terminate default URL with slash, add slash to custom URL when absent
2019-03-27 09:00:13 +02:00
Oliver Giles
bb81931ce9 regression fix: badge url
badge urls were returning 404 and an exception message since
cec4721e. Fixed by correctly extracting the job name from the
request URL
2019-03-08 08:20:41 +02:00
Oliver Giles
b15166e83b resolves #82: implement /latest endpoint
for run page on webui and archive (via symlink)
2019-02-18 23:06:11 +02:00
Oliver Giles
137f35bdd7 additional fixes for #79: chunked http log
fix a missing js function call that broke log output in the
webui, and replace TextDecoderStream with TextDecoder because
the former isn't supported in Firefox
2019-02-18 23:03:14 +02:00
Oliver Giles
807901c719 additional fixes for #79: chunked http log
use correct sqlite column name
remove redundant code, tidy implementation
2019-02-17 22:51:11 +02:00
Oliver Giles
cec4721e52 resolves #79: serve logs over plain chunked http 2019-02-15 19:05:44 +02:00