mirror of
https://github.com/HDFGroup/hdf5.git
synced 2026-09-29 04:09:39 +03:00
H5Z__format_double_canonical() previously found the shortest round-tripping %.*g precision by brute-force search, verified with an strtod() readback. On HDFGroup/hdf5#6153 we agreed a well-tested library was the safer choice for a conversion that lands in the on-disk format, and settled on Ryu. Vendors the double-to-shortest-decimal subset of Ryu (src/ryu), following the same pattern as the existing tomlc17 vendoring: pristine upstream sources pinned to a commit, per-file SHA-256s, an HDF5-authored h5_ryu_prefix.h renaming its globals via force-include, and matching CMake treatment for symbol visibility and warnings. Ryu emits unconditional scientific notation with no padding (3.0 -> "3E0"), so H5Z__format_double_canonical() takes its digit string and decimal exponent apart and lays them out %g-style -- fixed-point in the human-scale range, scientific outside it -- which keeps the canonical form unchanged (rate = 3.5, not rate = 3.5E0) and needs no strtod() round-trip check: the re-layout only moves the decimal point. Ryu also writes ASCII digits directly rather than through locale-sensitive snprintf(), so the localeconv() decimal-separator fixup the old implementation needed is gone. Updated the get_config plugin contract, the h5repack/h5tools rationale comments, and tooling (clang-format, codespell, format_source) that exempted src/tomlc17 to exempt src/ryu the same way. Verified with a 2M-sample bit-pattern sweep plus all 2098 powers of two round-tripping bit-exact through the new formatter, and the full tfilter2 canonicalization suite passing unchanged.
Workflows for Testing
The workflows are contained in .yml files and use the callable workflow method. Workflows can be triggered from PR, creation or merge, and on a scheduled timer. There are a few that only get triggered manually.
Scheduled Workflows
- daily-schedule.yml executes the daily-build.yml which first checks that there are changes
- tarball.yml to create a source.zip and source.tar.gz
- cygwin.yml to test on cygwin
- script.yml to test and report to my.cdash
- par-script.yml to test with released MPI and report to my.cdash
- par-source.yml to test with MPI default branch and report to my.cdash
- analysis.yml to test with LEAK and ADDRESS sanitizers and report to my.cdash
- ctest.yml to create signed binaries with commit hash in the name
- abi-report.yml to compare ABI to the last released binaries
- release-files.yml uploads new binaries to snapshots
- remove-files.yml remove previous binaries
- h5py.yml executes Python tests for h5py
- markdown-link-check.yml checks the links in markdown files
- scorecard.yml executes code-scanning and uploads to Github dashboard
- vfd.yml executes vfd-main.yml with combos of Release and Debug
- vfd-subfiling.yml configures, builds, and tests MPI with subfiling feature
- vol.yml calls the following workflows
- vol_rest.yml tests the REST VOL connector
- vol_ext_passthru.yml tests the external passthrough VOL connector
- vol_async.yml tests the asynchronous I/O VOL connector
- vol_cache.yml tests the cache VOL connector
- vol_adios2.yml tests the ADIOS2 VOL connector
- vol_log.yml tests the Log-based VOL connector
Manual Only Workflows
- publish-branch.yml publishes a local folder to the support.hdfgroup bucket
- publish-release.yml publishes release binaries to the support.hdfgroup bucket
- release.yml creates binaries for an official release or snapshot
- tarball.yml to create a source.zip and source.tar.gz
- ctest.yml to create signed binaries
- abi-report.yml to compare ABI to last released binaries
- maven-staging.yml to generate and test Maven artifacts with Java examples across all platforms
- maven-deploy.yml to deploy Maven artifacts to repositories
- release-files.yml uploads new binaries to releases page
- java-examples-maven-test.yml comprehensive Java examples testing with Maven artifacts
Triggered Workflows
- clang-format-check.yml runs clang-format and reports issues
- call-workflows.yml
- codespell.yml checks spelling
- cve.yml executes test_hdf5_cve.sh script
- hdfeos5.yml configures and builds HDF5 then tests HDF-EOS5 (runs on a daily schedule, not on pull requests)
- linkchecker.yml verifies the links in generated doxygen files
- netcdf.yml configures and builds HDF5 then tests NetCDF
Workflows called by call-workflows.yml
- main-spc.yml configure, build, and test HDF5 with:
- API default v1_6
- API default v1_8
- API default v1_10
- API default v1_12
- API default v1_14
- API default v2_0
- using system zlib
- using zlibng
- using no filters
- in debug mode and -Werror compiler option
- in release mode and -Werror compiler option
- with minimum CMake Version 3.18
- main.yml configure, build, test, and package HDF5 on Ubuntu, macOS, and Windows
- main-static.yml configure, build, test static only HDF5 on Ubuntu, macOS, and Windows
- bintest.yml test binary packages created by main.yml
- main-par.yml configure, build, and test HDF5 with openmpi
- main-par-spc.yml configure, build, and test HDF5 with HDF5_ENABLE_WARNINGS_AS_ERRORS=ON
- intel.yml configure, build, and test HDF5 with Intel OneAPI on Linux and Windows
- nvhpc.yml configure, build, and test HDF5 with nvhpc
- aocc.yml configure, build, and test HDF5 with AOCC and OpenMPI
- testxpr.yml configure, build, and test HDF5 with HDF_TEST_EXPRESS=0
- julia.yml configure and build HDF5, then test Julia hdf5 source
- msys2.yml configure, build, and test HDF5 on mingw32, mingw64, ucrt64, clang64
- i386.yml configure, build, and test HDF5 on 32-bit Linux