This PR adds three related features that improve troubleshooting and
integration with command-line workflows:
1. On-Disk Log Preservation (LAMINAR_ON_DISK_LOGS)
- Adds optional uncompressed log files alongside database storage
- Controlled by LAMINAR_ON_DISK_LOGS=N environment variable
- Writes logs to ${LAMINAR_HOME}/archive/JOB/RUN/log
- Keeps N most recent logs per job with automatic rotation
- Independent of LAMINAR_KEEP_RUNDIRS (for remote build scenarios)
- Backward compatible (disabled by default when N=0)
2. Configurable Default LAMINAR_HOME
- Uses CMAKE_INSTALL_PREFIX to set default LAMINAR_HOME
- Enables self-contained installations (e.g., /opt/laminar)
- Falls back to /var/lib/laminar if not set
- Reduces configuration needed for non-standard installations
3. Log Output Command (laminarc output-log)
- New command: laminarc output-log JOB [RUN]
- Outputs build logs to stdout for command-line use
- Defaults to latest run if RUN not specified
- Shows header with actual run number
- Enables integration with grep, less, AI coding assistants, etc.
Motivation:
- Database-only logs require SQL queries and decompression for access
- Standard Unix tools (grep, tail, less) cannot be used directly
- AI coding assistants and automated tools need simple log access
- Custom installation paths require manual LAMINAR_HOME configuration
Benefits:
- Direct log access with standard Unix tools
- Better troubleshooting workflow for CI/CD debugging
- Easier integration with log analysis tools and AI assistants
- More flexible installation options
- No breaking changes to existing deployments
|
||
|---|---|---|
| docker | ||
| etc | ||
| examples | ||
| pkg | ||
| src | ||
| test | ||
| CMakeLists.txt | ||
| COPYING | ||
| README.md | ||
| UserManual.md | ||
Laminar CI 
Laminar (https://laminar.ohwg.net) is a lightweight and modular Continuous Integration service for Linux. It is self-hosted and developer-friendly, eschewing a configuration UI in favour of simple version-controllable configuration files and scripts.
Laminar encourages the use of existing GNU/Linux tools such as bash and cron instead of reinventing them.
Although the status and progress front-end is very user-friendly, administering a Laminar instance requires writing shell scripts and manually editing configuration files. That being said, there is nothing esoteric here and the guide should be straightforward for anyone with even very basic Linux server administration experience.
See the website and the documentation for more information.
Building from source
First install development packages for capnproto (version 0.7.0 or newer), rapidjson, sqlite and boost (for the header-only multi_index_container library) from your distribution's repository or other source.
On Debian Bookworm, this can be done with:
sudo apt install capnproto cmake g++ libboost-dev libcapnp-dev libsqlite3-dev \
make rapidjson-dev zlib1g-dev pkg-config
Then compile and install laminar with:
git clone https://github.com/ohwgiles/laminar.git
cd laminar
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
make -j "$(nproc)"
# Warning: the following will overwrite an existing /etc/laminar.conf
sudo make install
make install includes a systemd unit file. If you intend to use it, consider creating a new user laminar or modifying the user specified in the unit file.
Packaging for distributions
The pkg directory contains shell scripts which use docker to build native packages (deb,rpm) for common Linux distributions. Note that these are very simple packages which may not completely conform to the distribution's packaging guidelines, however they may serve as a starting point for creating an official package, or may be useful if the official package lags.
Contributing
Issues and pull requests via GitHub are most welcome. All pull requests must adhere to the Developer Certificate of Origin.