Files
hdf5/.github/workflows/publish-release.yml
T
cde84cdc8f Update hdf5 2.1.0 with 17commits from develop since 2/5/2026 (#6229)
* Fix MPI Fortran configuration for HDF5Examples (#6206)

When building Fortran parallel examples without MPI wrappers, the
compiler couldn't find mpi.mod because MPI_Fortran_INCLUDE_DIRS
was not populated. This occurred because find_package(MPI) was only
called for C, not Fortran.

Added enable_language(Fortran) and find_package(MPI REQUIRED
COMPONENTS Fortran) to properly configure MPI for Fortran examples,
ensuring MPI include directories and libraries are correctly set.

* Adds RFCs to the RFC table (#6190)

* Added two RFCs to the RFC table

"Adding support for digitally signed plugins to HDF5"
" Write-Ahead log"

* Updated to use the ACM link

* Add HDF5 2.0.0 Library Migration Guide (#6183)

* Add HDF5 2.0.0 Library Migration Guide

* Revise HDF5 migration guide for version 2.0.0

Use 2.0.0 consistently.

* Clarify API changes in HDF5 2.0.0 Migration Guide

* Fixes the "multiple @param documentation sections" doxygen warnings (#6195)

Addresses the "multiple @ param documentation sections" warnings are caused by the interaction of three things:

1. MACRO_EXPANSION = YES with EXPAND_ONLY_PREDEF = NO in Doxyfile.in

2. Versioned API macros in H5version.h like:

\def documentation in APIVersions.dox like:

3. \def H5Tarray_create \api_vers_2{H5Tarray_create,H5Tarray_create1,H5Tarray_create2}

Because Doxygen expands all macros, it sees H5Tarray_create as an alias for H5Tarray_create1. It then associates documentation from both the \def block (for the macro) and the function's own doc block (with \param entries) with the same function — resulting in "multiple @ param documentation sections."

* Update Doxygen version from 1.16.0 to 1.16.1

Use Doxygen 1.16.1 for all platforms. This version includes the latest
bug fixes and improvements while maintaining compatibility with our
documentation format.

* Fix Windows Doxygen installation for version 1.16.1

Handle different Windows binary naming conventions across Doxygen versions:
- 1.16.1 uses: doxygen-VERSION.windows.x64.bin.zip
- 1.16.0 uses: doxygen-VERSION.x64.bin.zip

Try the newer naming convention first, then fall back to the older one
if the download fails. This ensures compatibility across versions.

* Use ssciwr/doxygen-install in setup-doxygen action

Replace direct installation of official Doxygen binaries with
ssciwr/doxygen-install action. This avoids Java documentation parsing
errors that occur with official binaries but not with distribution
builds.

The setup-doxygen action now serves as a thin wrapper around
ssciwr/doxygen-install@f13be16c83 (v1),
using commit hash for security and reproducibility.

* Remove redundant version specification from workflows

The setup-doxygen action already has a default version (1.16.1),
so explicit version specification in workflows is unnecessary.
This follows DRY principles and makes version updates simpler.

* Updates to #6205 (#6208)

* Fix MPI Fortran configuration for HDF5Examples (#6205)

When building Fortran parallel examples standalone without MPI
wrappers, the compiler cannot find mpi.mod because
MPI_Fortran_INCLUDE_DIRS is not populated.

* Use MPI::MPI_Fortran imported target instead of raw MPI variables

Replace manual MPI_Fortran_LIBRARIES, MPI_Fortran_LINK_FLAGS, and
MPI_Fortran_INCLUDE_DIRS usage with the MPI::MPI_Fortran imported
target, which transitively carries all include dirs, compile flags,
and link flags. This eliminates the CMAKE_Fortran_EXE_LINKER_FLAGS
hack and the manual target_include_directories in H5PAR.

* Update nvhpc version to 26.1 with CUDA version 13.1. (#6213)

# branches: [develop]

* Inherit Debug C build flags in Developer build mode (#6182)

* Bump the github-actions group across 1 directory with 11 updates (#6215)

* Bump the github-actions group across 1 directory with 11 updates

Bumps the github-actions group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [actions/cache](https://github.com/actions/cache) | `5.0.1` | `5.0.3` |
| [lukka/get-cmake](https://github.com/lukka/get-cmake) | `4.2.1` | `4.2.3` |
| [softwareforgood/check-artifact-v4-existence](https://github.com/softwareforgood/check-artifact-v4-existence) | `0.3.0` | `0.4.1` |
| [github/codeql-action](https://github.com/github/codeql-action) | `3.31.9` | `4.32.2` |
| [azure/trusted-signing-action](https://github.com/azure/trusted-signing-action) | `0.5.11` | `1.1.0` |
| [cygwin/cygwin-install-action](https://github.com/cygwin/cygwin-install-action) | `7d2dc1e241644c3318bed9ec74115d1929baa681` | `2566376092c4e280f21131be027af3f5bb2420a4` |
| [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) | `5.1.1` | `6.0.0` |
| [vmactions/freebsd-vm](https://github.com/vmactions/freebsd-vm) | `1.3.4` | `1.4.2` |
| [vmactions/openbsd-vm](https://github.com/vmactions/openbsd-vm) | `1.3.1` | `1.3.5` |
| [mpi4py/setup-mpi](https://github.com/mpi4py/setup-mpi) | `1.4.1` | `1.4.2` |
| [actions/setup-python](https://github.com/actions/setup-python) | `6.1.0` | `6.2.0` |

 vmactions/openbsd-vm@d6c29ce1b4 (`1.3.5`) failed to run ssh on the github runner.  271a1ba62300483cfc58345ff9f425f1349a2cab for v1.3.4 was used instead.

* Fix issue with some Subfiling VFD test files not getting deleted (#6212)

* CMake: Fix Fortran cross-compilation support

Refactor the cross-compilation infrastructure to rely on the standard
CMAKE_CROSSCOMPILING_EMULATOR variable instead of the custom
CROSSCOMPILING_PATH environment hack.

Key changes:
- Removed `ENVIRONMENT "${CROSSCOMPILING_PATH}"` from all test definitions.
- Updated custom commands (e.g., H5match_types, H5_gen) to invoke the
  emulator explicitly when cross-compiling.
- Updated ConfigureChecks.cmake and HDF5UseFortran.cmake to enable
  `try_run` checks when an emulator is defined.
- Added config/toolchain/mingw-w64-x86-64-wine.sh wrapper to automatically
  locate MinGW runtime libraries (like libgfortran) for Wine execution.
- Cleaned up toolchain files to remove hardcoded emulator paths, deferring
  configuration to the build environment.

* Add Doxygen setup that results in missing Doygen documentation. (#6217)

* Added setup-doxygen action in ctest.yml Ubuntu gcc workflow.
* Also added actions/checkout for setup-doxygen.

* Fixes link checker failure (#6219)

Removed https:// as a workaround to avoid error by the link checker.

* Remove force-setting of ZLIB_USE_EXTERNAL / SZIP_USE_EXTERNAL (#6222)

Removes the force-setting of ZLIB_USE_EXTERNAL and SZIP_USE_EXTERNAL to
ON when HDF5_ALLOW_EXTERNAL_SUPPORT is GIT or TGZ so that zlib and
szip can be independently built from the system or externally as desired

* Truncate Subfiling VFD's stub file when truncating subfiles (#6210)

Ensure that the Subfiling VFD's stub file gets truncated when subfiles are
being truncated to avoid a potentially unreadable file when the EOF doesn't
match the stored EOF value

Co-authored-by: Larry Knox <lrknox@hdfgroup.org>

* Add CMake function to extract pkg-config info from libraries (#6220)

* Consistent extension for C++ (#6214)

Except for this file, all use cpp instead of cxx. No obvious reason why
the same file types should have different extensions.

* Enable Windows ARM64 CTest CI for release binaries (#6177)

* ci: add Windows ARM64 MSVC CTest job

* ci: add MSYS2 clangarm64 build on Windows ARM64

* cmake: add MSVC ARM64 presets for Windows

* zlib: fix MSVC static library flags for ARM64 builds

* Renamed .hxx file to .h and updated the #include for it.

* Committing clang-format changes

---------

Co-authored-by: Scot Breitenfeld <brtnfld@hdfgroup.org>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Co-authored-by: Gerd Heber <gheber@hdfgroup.org>
Co-authored-by: jhendersonHDF <jhenderson@hdfgroup.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Julien Schueller <schueller@phimeca.com>
Co-authored-by: Martin Diehl <mail@martin-diehl.net>
Co-authored-by: Harish RS <harish.rajaselvan@multicorewareinc.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 17:03:09 -06:00

278 lines
11 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: hdf5 publish release
# Triggers the workflow on demand
on:
workflow_dispatch:
inputs:
use_tag:
description: HDF5 Release version tag (e.g., 2.0.0)
type: string
required: true
file_name:
description: HDF5 Release file name base
type: string
required: true
target_dir:
description: HDF5 target bucket directory
type: string
required: true
dry_run:
description: Dry run mode (skip S3 upload)
type: boolean
default: false
permissions:
contents: read
jobs:
publish-tag:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Validate Inputs
run: |
set -euo pipefail
echo "Validating inputs..."
if [[ ! "${{ inputs.use_tag }}" =~ ^[0-9]+[._][0-9]+[._][0-9]+([._][0-9]+)?(-.*)?$ ]]; then
echo "❌ Invalid tag format. Expected: X.Y.Z or X.Y.Z-*"
exit 1
fi
if [[ "${{ inputs.target_dir }}" == *".."* ]] || [[ "${{ inputs.target_dir }}" == /* ]]; then
echo "❌ Invalid target_dir. Cannot contain '..' or start with '/'"
exit 1
fi
if [[ "${{ inputs.file_name }}" == *".."* ]] || [[ "${{ inputs.file_name }}" == *"/"* ]] || [[ "${{ inputs.file_name }}" =~ [^a-zA-Z0-9._-] ]]; then
echo "❌ Invalid file_name. Can only contain alphanumeric, dots, underscores, and hyphens"
exit 1
fi
echo "✅ Input validation passed"
# Checks-out your repository under $GITHUB_WORKSPACE
- name: Get Sources
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # Updated to latest stable v6.0.1
with:
fetch-depth: 0
ref: '${{ github.head_ref || github.ref_name }}'
- name: Create download directory
run: mkdir -p HDF5
- name: Get HDF5 release assets
uses: robinraju/release-downloader@daf26c55d821e836577a15f77d86ddc078948b05 # More reliable alternative v1.12
with:
repository: HDFGroup/hdf5
tag: ${{ inputs.use_tag }}
fileName: ${{ inputs.file_name }}*
out-file-path: HDF5
extract: false
- name: Verify downloaded files
run: |
set -euo pipefail
echo "📁 Downloaded files:"
ls -la HDF5/
# Check for expected files
EXPECTED_FILES=("${{ inputs.file_name }}.doxygen.zip" "${{ inputs.file_name }}.html.abi.reports.tar.gz")
for file in "${EXPECTED_FILES[@]}"; do
if [ ! -f "HDF5/$file" ]; then
echo "⚠️ Warning: Expected file not found: $file"
else
echo "✅ Found: $file"
fi
done
- name: Setup AWS CLI
if: ${{ !inputs.dry_run }}
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Generate index.html for downloads directory
run: |
set -euo pipefail
echo "📄 Generating index.html for downloads directory..."
chmod +x .github/scripts/generate-index-html.sh
.github/scripts/generate-index-html.sh \
"./HDF5" \
"HDF5 ${{ inputs.use_tag }} - Downloads" \
"Release binaries, source code, and documentation packages for HDF5 ${{ inputs.use_tag }}" \
"../"
echo "✅ Downloads index.html generated"
- name: Sync release files to S3 bucket
if: ${{ !inputs.dry_run }}
run: |
set -euo pipefail
echo "🚀 Syncing release files to S3..."
aws s3 sync ./HDF5 s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/downloads \
--delete \
--exclude="*" \
--include="*.tar.gz" \
--include="*.zip" \
--include="*.msi" \
--include="*.dmg" \
--include="*.exe" \
--include="*.sha256" \
--include="index.html" \
--exact-timestamps
# Upload index.html with proper content type
aws s3 cp ./HDF5/index.html \
s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/downloads/index.html \
--content-type "text/html" \
--metadata-directive REPLACE
echo "✅ Release files sync completed"
- name: Process documentation
run: |
set -euo pipefail
DOC_FILE="HDF5/${{ inputs.file_name }}.doxygen.zip"
if [ -f "$DOC_FILE" ]; then
echo "📚 Processing documentation..."
unzip -q "$DOC_FILE"
if [ -d "${{ inputs.file_name }}.doxygen" ]; then
echo "✅ Documentation extracted successfully"
else
echo "❌ Documentation extraction failed"
exit 1
fi
else
echo "⚠️ Documentation file not found, skipping..."
fi
- name: Generate index.html for documentation directory
run: |
set -euo pipefail
if [ -d "${{ inputs.file_name }}.doxygen" ]; then
echo "📄 Generating index.html for documentation directory..."
.github/scripts/generate-index-html.sh \
"./${{ inputs.file_name }}.doxygen" \
"HDF5 ${{ inputs.use_tag }} - Documentation" \
"Doxygen API documentation for HDF5 ${{ inputs.use_tag }}" \
"../../"
echo "✅ Documentation index.html generated"
else
echo "⚠️ No documentation directory found, skipping index generation..."
fi
- name: Sync documentation to S3 bucket
if: ${{ !inputs.dry_run }}
run: |
set -euo pipefail
if [ -d "${{ inputs.file_name }}.doxygen" ]; then
echo "📚 Syncing documentation to S3..."
aws s3 sync ./${{ inputs.file_name }}.doxygen \
s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/documentation/doxygen \
--delete \
--content-type "text/html" \
--metadata-directive REPLACE
echo "✅ Documentation sync completed"
else
echo "⚠️ No documentation directory found, skipping..."
fi
- name: Process compatibility reports
run: |
set -euo pipefail
COMPAT_FILE="HDF5/${{ inputs.file_name }}.html.abi.reports.tar.gz"
if [ -f "$COMPAT_FILE" ]; then
echo "📊 Processing compatibility reports..."
tar -xzf "$COMPAT_FILE"
if [ -d "hdf5" ]; then
echo "✅ Compatibility reports extracted successfully"
else
echo "❌ Compatibility reports extraction failed"
exit 1
fi
else
echo "⚠️ Compatibility reports file not found, skipping..."
fi
- name: Generate index.html for compatibility reports directory
run: |
set -euo pipefail
if [ -d "hdf5" ]; then
echo "📄 Generating index.html for compatibility reports directory..."
.github/scripts/generate-index-html.sh \
"./hdf5" \
"HDF5 ${{ inputs.use_tag }} - Compatibility Reports" \
"ABI/API compatibility reports for HDF5 ${{ inputs.use_tag }}" \
"../"
echo "✅ Compatibility reports index.html generated"
else
echo "⚠️ No compatibility reports directory found, skipping index generation..."
fi
- name: Sync compatibility reports to S3 bucket
if: ${{ !inputs.dry_run }}
run: |
set -euo pipefail
if [ -d "hdf5" ]; then
echo "📊 Syncing compatibility reports to S3..."
aws s3 sync ./hdf5 \
s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/compat_report \
--delete \
--content-type "text/html" \
--metadata-directive REPLACE
echo "✅ Compatibility reports sync completed"
else
echo "⚠️ No compatibility reports directory found, skipping..."
fi
- name: Generate main release directory index.html
run: |
set -euo pipefail
echo "📄 Generating main release directory index.html..."
# Create a temporary directory structure to mimic the S3 layout
mkdir -p release_root/${{ inputs.target_dir }}/{downloads,documentation,compat_report}
# Create placeholder files so the script can list them
touch "release_root/${{ inputs.target_dir }}/downloads/.placeholder"
touch "release_root/${{ inputs.target_dir }}/documentation/.placeholder"
touch "release_root/${{ inputs.target_dir }}/compat_report/.placeholder"
# Generate index for the release directory
.github/scripts/generate-index-html.sh \
"release_root/${{ inputs.target_dir }}" \
"HDF5 ${{ inputs.use_tag }}" \
"Release files, documentation, and compatibility reports for HDF5 ${{ inputs.use_tag }}" \
"../"
echo "✅ Main release index.html generated"
- name: Upload main release directory index.html
if: ${{ !inputs.dry_run }}
run: |
set -euo pipefail
echo "📤 Uploading main release directory index.html..."
aws s3 cp "release_root/${{ inputs.target_dir }}/index.html" \
s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/index.html \
--content-type "text/html" \
--metadata-directive REPLACE
echo "✅ Main index.html uploaded"
- name: Summary
run: |
set -euo pipefail
echo "🎉 HDF5 Release Publication Summary"
echo "=================================="
echo "🏷️ Tag: ${{ inputs.use_tag }}"
echo "📁 File Base: ${{ inputs.file_name }}"
echo "🎯 Target Directory: ${{ inputs.target_dir }}"
echo "🌐 Dry Run: ${{ inputs.dry_run }}"
echo ""
if [ "${{ inputs.dry_run }}" == "true" ]; then
echo "ℹ️ This was a dry run - no files were uploaded to S3"
else
echo "✅ Release published successfully!"
echo "📍 Main page: s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/index.html"
echo "📍 Downloads: s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/downloads"
echo "📖 Documentation: s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/documentation/doxygen"
echo "📊 Reports: s3://${{ secrets.AWS_S3_BUCKET }}/${{ vars.TARGET_PATH }}/${{ inputs.target_dir }}/compat_report"
fi