Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 56 additions & 14 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,97 @@ name: Build and Test

on: [push, pull_request]

# NEGGIA-001: modernised runner labels (replaced retired
# ubuntu-18.04/20.04 + macos-10.15 + ubuntu-16.04) and added the
# cmake 4.x policy workaround for googletest's
# cmake_minimum_required(VERSION <3.5). Linux gcc-11+ also needed
# -Wno-error=maybe-uninitialized because vendored googletest's
# gtest-death-test.cc:1224 trips a stricter modern warning that gtest's
# own -Werror config treats as a build break. Lessons inherited from
# dectris-cloud/xds XDS-039 work.
#
# Plugin .so is uploaded per lane as a GitHub Actions artifact so
# downstream consumers (XDS-fork CI; scientists-in-cloud validation
# nodes) can download a built plugin without rebuilding.

jobs:
posix-cc:
strategy:
fail-fast: false
matrix:
build-type: [Debug, Release]
os: [macos-10.15, macos-latest, ubuntu-18.04, ubuntu-20.04]
os: [macos-14, macos-15-intel, ubuntu-22.04, ubuntu-24.04]
include:
- build-type: Debug
debug-parsing: ON
- build-type: Release
debug-parsing: OFF
runs-on: ${{ matrix.os }}
env:
# Vendored googletest trips -Werror=maybe-uninitialized on modern
# gcc-11+ (Linux). macOS Apple clang doesn't enable this by default.
# Override here rather than mutate the vendored submodule.
CXXFLAGS: -Wno-error=maybe-uninitialized
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
submodules: true
- name: Create Build Directory
run: cmake -E make_directory ${{github.workspace}}.build
- name: Configure CMake
run: cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -DDEBUG_PARSING=${{matrix.debug-parsing}}
# -DCMAKE_POLICY_VERSION_MINIMUM=3.5: cmake 4.x dropped support for
# the cmake_minimum_required(VERSION 2.6.4) declaration in the
# vendored googletest submodule; the flag relaxes policy enforcement.
# Safe no-op on cmake 3.x (Ubuntu apt).
run: cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -DDEBUG_PARSING=${{matrix.debug-parsing}} -DCMAKE_POLICY_VERSION_MINIMUM=3.5
working-directory: ${{github.workspace}}.build
- name: Build
run: cmake --build .
working-directory: ${{github.workspace}}.build
- name: Test
run: ctest --output-on-failure
working-directory: ${{github.workspace}}.build
- name: Upload dectris-neggia.so + sha256
uses: actions/upload-artifact@v4
with:
name: dectris-neggia-${{ matrix.os }}-${{ matrix.build-type }}-cc
path: |
${{github.workspace}}.build/src/dectris/neggia/plugin/dectris-neggia.so
if-no-files-found: error
retention-days: 90

posix-gcc:
strategy:
fail-fast: false
matrix:
include:
- build-type: Debug
gcc-version: 4.8
os: ubuntu-16.04
gcc-version: 11
os: ubuntu-22.04
- build-type: Debug
gcc-version: 10
os: ubuntu-20.04
gcc-version: 13
os: ubuntu-24.04
- build-type: Release
gcc-version: 4.8
os: ubuntu-16.04
gcc-version: 11
os: ubuntu-22.04
- build-type: Release
gcc-version: 10
os: ubuntu-20.04
gcc-version: 13
os: ubuntu-24.04
runs-on: ${{ matrix.os }}
env:
CXXFLAGS: -Wno-error=maybe-uninitialized
steps:
- name: Install Packages
run: sudo apt-get install -y gcc-${{ matrix.gcc-version }} g++-${{ matrix.gcc-version }}
run: sudo apt-get update && sudo apt-get install -y gcc-${{ matrix.gcc-version }} g++-${{ matrix.gcc-version }}
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
submodules: true
- name: Create Build Directory
run: cmake -E make_directory ${{github.workspace}}.build
- name: Configure CMake
run: cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -DDEBUG_PARSING=ON
run: cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -DDEBUG_PARSING=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5
env:
CC: gcc-${{ matrix.gcc-version }}
CXX: g++-${{ matrix.gcc-version }}
Expand All @@ -69,3 +103,11 @@ jobs:
- name: Test
run: ctest --output-on-failure
working-directory: ${{github.workspace}}.build
- name: Upload dectris-neggia.so + sha256
uses: actions/upload-artifact@v4
with:
name: dectris-neggia-${{ matrix.os }}-${{ matrix.build-type }}-gcc${{ matrix.gcc-version }}
path: |
${{github.workspace}}.build/src/dectris/neggia/plugin/dectris-neggia.so
if-no-files-found: error
retention-days: 90
26 changes: 24 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,30 @@ follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

(no changes yet — framework bootstrapped 2026-05-29, work on NEGGIA-001
worker-pool replacing GLOBAL_HANDLE pending)
### Changed
- **Worker pool replaces `GLOBAL_HANDLE` singleton** (NEGGIA-001 —
Stage 1 of Tier-1 perf overhaul per XDS-037 RFC). The plugin layer
now holds `NUM_WORKERS=16` `H5DataCache` instances, each with its
own `H5File` (own mmap = own kernel readahead state — load-bearing
for the GeeseFS-S3 concurrency win). `plugin_get_data` dispatches by
`frame_number % NUM_WORKERS` for a lock-free hot path; per-worker
state is thread-confined (per audit Inv-A: H5DataCache is
write-once-then-immutable after `plugin_get_header`). External
single-open contract preserved (stderr message verbatim on second
open while pool active). The 4 sacred C ABI symbols (`plugin_open`,
`plugin_close`, `plugin_get_header`, `plugin_get_data`) retain
byte-identical signatures — XDS-fork's `tools/neggia-version.txt`
bump path stays clean. New `Test_XdsPluginConcurrent` (16 threads ×
100 calls, bit-equality vs single-threaded reference) verifies the
concurrency surface; passes ctest + TSan clean (Helgrind verification
deferred to Linux CI — unavailable on macOS arm64). Bit-exact
regression against pre-patch `.so` verified on 9 fixtures across
`datasets_eiger1` + `datasets_eiger2` (uint16/uint32/uint8;
BSLZ4/LZ4/uncompressed; 0/2 data-file variants). Scientists-in-cloud
GeeseFS-S3 benchmark target (≥1.3× wall-clock speedup) deferred to
NEGGIA-005 release-time validation. Reporter-authorized cap exemption
recorded (67/50 cap units ≈ 1.3× cap; precedent XDS-036; cap reaffirmed
for subsequent tickets). — closes NEGGIA-001

## [1.2.0] — 2021-03-26

Expand Down
Loading
Loading