Skip to content

0.3.0

Latest

Choose a tag to compare

@oruebel oruebel released this 23 Feb 19:26
· 47 commits to main since this release
373271f

Added

  • Added cppcheck static analysis integration (@copilot, @oruebel #270):
    • Added .github/workflows/cppcheck.yml CI workflow that runs cppcheck on src/ and tests/, converts results to SARIF using airtower-luna/convert-to-sarif, and uploads them to the GitHub Security tab via github/codeql-action/upload-sarif
    • Added cmake/cppcheck.cmake standalone script and cmake/cppcheck-targets.cmake for running cppcheck locally via cmake --build --preset=dev --target=cppcheck
    • Updated developer documentation in docs/pages/devdocs/testing.dox and docs/pages/devdocs/install.dox with cppcheck usage instructions
  • Added getDataType(), getChunking(), and toLinkArrayDataSetConfig() functions to ReadDataWrapper (@copilot, @oruebel #266)
  • Added support for creating soft-links to existing datasets to avoid data duplication (@copilot, @oruebel #257)
    • Added BaseArrayDataSetConfig abstract base class for polymorphic dataset configuration
    • Added LinkArrayDataSetConfig class for creating HDF5 soft-links to existing datasets
    • Updated ArrayDataSetConfig to inherit from BaseArrayDataSetConfig
    • Updated all NWB type initialize() methods to accept BaseArrayDataSetConfig (TimeSeries, ElectricalSeries, SpikeEventSeries, AnnotationSeries, Data, NWBData, VectorData)
    • Added user docs page on using links and processing modules docs/pages/userdocs/links.dox
    • Added BaseIO::getStorageObjectDataType and BaseIO::getStorageObjectChunking and corresponding HDF5IO implementations
    • Updated BaseIO::createArrayDataSet to raise std::runtime_error on failure (rather than returning nullptr) to make error handling more robust and to allow link creation to return nullptr without ambiguity.
    • Added LinkArrayDataSetConfig::validateTarget() to validate that a link target is compliant with expected schema requirements and updated initialize methods of Data, VectorData, and TimeSeries accordingly to check that link targets are valid (@copilot, @oruebel #259)
  • Added AQNWB::IO::ConstMultiArrayView<DTYPE, NDIMS> as a lightweight, non-owning const multi-dimensional view over a buffer used to facilitate multi-dimensional array access in C++17/20 (@chittti , #250)
  • Added UUID/time/endian utilities in src/Utils.hpp to replace corresponding Boost utilities (@chittti, #250)
  • Added AQNWB_CXX_STANDARD option to the cmake build to allow configuration of the std C++ version to support 17, 20, and 23 to allow the use of std::mdspan if C++23 is used (@oruebel, #250)
  • Added ProcessingModule class in src/nwb/base/ to support creation of processed data groups in the /processing/ hierarchy of NWB files (@oruebel, #255)
  • Added .github/copilot-instructions.md with comprehensive onboarding documentation for GitHub Copilot coding agents (@copilot, @oruebel, #256)
  • Added docs/pages/devdocs/github_release_workflow.dox with instructions for how to make a release (@oruebel, #279)

Changed

  • Replaced explicit std::vector<SizeType> usages with the SizeArray type alias throughout the codebase for consistency (@copilot, @oruebel #262)
  • Standardized naming of initialize() parameters generated by schematype_to_aqnwb utility (@copilot, @oruebel #261):
  • Removed Boost as a dependency (@chittti, #250 )
  • Updated DataBlock::as_multi_array() to return ConstMultiArrayView instead of boost::const_multi_array_ref to remove the need Boost and for C++17/20 compatibility (@chittti, #250)
  • Updated the docs and examples to discuss the optional use of std::mdspan if C++23 is used (@oruebel, #250)
  • Changed the dependency includes in CMake so the HDF5 C++ headers and libraries found via ${HDF5_INCLUDE_DIRS} / ${HDF5_CXX_LIBRARIES} are exported to AqNWB consumers (@cboulay, #248).
  • Updated NWBFile to make common root path definitions (e.g., acquisition, processing, stimulus) public to make path generation easier (@oruebel, #257)

Fixed

  • Fixed HDF5IO::createAttribute to use base element type (typeSize=1) for numeric array attributes (instead of array-type with typeSize equal to the number of elements), to enhance compatibility with the NWB schema and PyNWB (@copilot, @oruebel #276)
  • Fixed a broad set of cppcheck static analysis warnings (@copilot, @oruebel #274, #278; @oruebel #280):
    • Correctness: Fixed BaseIO::stopRecording to return the computed composite status instead of hardcoded Status::Success; initialized SpikeEventSeries::m_eventsRecorded to 0 in-class; removed dead chunk/DSetCreatPropList code from HDF5RecordingData constructor; updated ~HDF5IO() to avoid calling the virtual close() from the destructor; added override to virtual destructors
    • Performance: Changed const std::string / const std::vector pass-by-value parameters and return types to const & across Channel, AnnotationSeries, ElectrodesTable, NWBFile, nwbio_utils.hpp, BaseIO, ReadIO, RegisteredType and test utilities
    • API hygiene: Added explicit to single-arg constructors on HDF5IO, HDF5RecordingData, ElectrodesTable, and NWBFile; added override to HDF5RecordingData::writeDataBlock overloads; marked BaseIO::getFullTypeName const; made ReadDataWrapper::getStorageObjectType static; aligned constructor parameter names in HDF5IO, HDF5ArrayDataSetConfig, and DynamicTable::addReferenceColumn; declared const std::tm* pointers in Utils.hpp; removed unused variables in tests
    • STL modernization: Replaced raw loops with std::any_of, std::accumulate, std::transform, and std::find_if in BaseIO.cpp, HDF5IO.cpp, RecordingObjects.cpp, and ReadIO.hpp
    • cppcheck suppressions: Added --suppress=duplInheritedMember and --suppress=normalCheckLevelMaxBranches globally to cmake/cppcheck.cmake and .github/workflows/cppcheck.yml; added inline cppcheck-suppress comments for intentional test patterns (duplicateExpression, knownConditionTrueFalse, useStlAlgorithm, variableScope)
  • Restricted code coverage report to src/ folder only (@copilot, @oruebel #262):
    • Updated cmake/coverage.cmake to use a two-step lcov approach: capture all coverage into coverage_raw.info, then use lcov --extract to filter to src/* only, producing the final coverage.info
    • Added .codecov.yml to instruct the Codecov server to ignore tests/**, preventing Codecov-action from including test files it discovers via independent gcov scanning of the build directory
  • Removed redundant resources/utils/requirements.txt and update CI accordingly. Dependencies are now defined in resources/utils/pyproject.toml (@copilot, @oruebel #260)
  • Added explicit permissions blocks to all GitHub Actions workflow files to restrict GITHUB_TOKEN to least-privilege scopes (@copilot, @oruebel #269)