Skip to content

Compression feature #415

Compression feature

Compression feature #415

name: h5bench (HDF5 develop)
on:
pull_request:
workflow_dispatch:
jobs:
h5bench:
runs-on: ubuntu-22.04
timeout-minutes: 60
env:
OMPI_ALLOW_RUN_AS_ROOT: 1
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1
OMPI_MCA_rmaps_base_oversubscribe: "yes"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Dependencies
run: |
sudo apt-get update
sudo apt-get install cmake gcc gdb libtool zlib1g-dev python3 libopenmpi-dev -y
# HDF5
git clone https://github.com/HDFGroup/hdf5.git
# VOL-ASYNC
git clone --recursive https://github.com/hpc-io/vol-async.git --branch v1.7 /opt/vol-async
- name: Build HDF5 develop
run: |
export HDF5_DIR=/opt/hdf5
export HDF5_LIBTOOL=/usr/bin/libtoolize
mkdir $HDF5_DIR
cd hdf5
./autogen.sh
./configure --prefix=$HDF5_DIR --enable-parallel --enable-threadsafe --enable-unsupported
make -j 2
make install
- name: Build Argobots
run: |
export ABT_DIR=/opt/argobots
cd /opt/vol-async/argobots
./autogen.sh
./configure --prefix=$ABT_DIR
make -j 2
make install
- name: Build VOL-ASYNC
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
cd $ASYNC_DIR
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$ASYNC_DIR -DCMAKE_PREFIX_PATH=$HDF5_DIR -DENABLE_WRITE_MEMCPY=ON
make
make install
- name: Test VOL-ASYNC
run: |
export HDF5_DIR=/opt/hdf5
export HDF5_HOME=$HDF5_DIR
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_DIR/lib:$HDF5_DIR/lib:$ABT_DIR/lib:$LD_LIBRARY_PATH
export HDF5_PLUGIN_PATH="$ASYNC_DIR/lib"
export HDF5_VOL_CONNECTOR="async under_vol=0;under_info={}"
cd $ASYNC_DIR/build
export LD_PRELOAD=$ASYNC_DIR/lib/libh5async.so:$ABT_DIR/lib/libabt.so:$HDF5_DIR/lib/libhdf5.so
ctest
- name: Build h5bench SYNC
run: |
export HDF5_DIR=/opt/hdf5
export HDF5_HOME=$HDF5_DIR
export LD_LIBRARY_PATH=$HDF5_HOME/lib:$LD_LIBRARY_PATH
mkdir build-sync
cd build-sync
cmake .. \
-DH5BENCH_ALL=ON
make
sudo make install
sudo ldconfig
- name: Build h5bench ASYNC
run: |
current="$PWD"
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
mkdir build-async
cd build-async
cmake .. \
-DWITH_ASYNC_VOL:BOOL=ON \
-DCMAKE_C_FLAGS="-I$ASYNC_HOME/include -L$ASYNC_HOME/lib" \
-DH5BENCH_ALL=ON
make
sudo make install
sudo ldconfig
- name: Test h5bench SYNC write/read
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-read-contig-1d-small.json
- name: Test h5bench ASYNC write/read
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
cd build-async
python3 ../samples/update.py ../samples/async-write-read-contig-1d-small.json
./h5bench --debug --abort-on-failure ../samples/async-write-read-contig-1d-small.json
- name: Setup tmate session
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
- name: Test h5bench SYNC write 1D contiguous (memory) strided (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-strided.json
- name: Test h5bench SYNC write 1D contiguous (memory) contiguous (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-contig.json
- name: Test h5bench SYNC write 1D contiguous (memory) interleaved (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-interleaved.json
- name: Test h5bench SYNC write 1D interleaved (memory) contiguous (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-interleaved-contig.json
- name: Test h5bench SYNC write 1D interleaved (memory) interleaved (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-interleaved-interleaved.json
- name: Test h5bench SYNC write 2D contiguous (memory) contiguous (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-contig-contig.json
- name: Test h5bench SYNC write 2D contiguous (memory) interleaved (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-contig-interleaved.json
- name: Test h5bench SYNC write 2D interleaved (memory) contiguous (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-interleaved-contig.json
- name: Test h5bench SYNC write 2D interleaved (memory) interleaved (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-interleaved-interleaved.json
- name: Test h5bench SYNC write 3D contiguous (memory) contiguous (file)
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-3d-contig-contig.json
- name: Test h5bench SYNC read 1D contiguous (memory) contiguous (file) full
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-contig-read-full.json
- name: Test h5bench SYNC read 1D contiguous (memory) contiguous (file) partial
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-contig-read-partial.json
- name: Test h5bench SYNC read 1D contiguous (memory) contiguous (file) strided
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-1d-contig-contig-read-strided.json
- name: Test h5bench SYNC read 2D contiguous (memory) contiguous (file) full
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-contig-contig-read-full.json
- name: Test h5bench SYNC read 3D contiguous (memory) contiguous (file) full
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure --validate-mode ../samples/sync-write-2d-contig-contig-read-full.json
- name: Test h5bench SYNC write unlimited
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-write-unlimited.json
- name: Test h5bench SYNC overwrite
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-overwrite.json
- name: Test h5bench SYNC append
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-append.json
- name: Test h5bench SYNC exerciser
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-exerciser.json
- name: Test h5bench SYNC metadata
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-metadata.json
- name: Test h5bench SYNC amrex
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-amrex.json
- name: Test h5bench SYNC openpmd
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-openpmd.json
- name: Test h5bench SYNC e3sm
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-e3sm.json
- name: Test h5bench SYNC macsio
run: |
export HDF5_HOME=/opt/hdf5
export ABT_HOME=/opt/argobots
export ASYNC_HOME=/opt/vol-async
export LD_LIBRARY_PATH=$ASYNC_HOME/lib:$HDF5_HOME/lib:$ABT_HOME/lib:$LD_LIBRARY_PATH
cd build-sync
./h5bench --debug --abort-on-failure ../samples/sync-macsio.json
- name: Test h5bench ASYNC write/read
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-read-contig-1d-small.json
./h5bench --debug --abort-on-failure ../samples/async-write-read-contig-1d-small.json
- name: Test h5bench ASYNC write 1D contiguous (memory) strided (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-strided.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-strided.json
- name: Test h5bench ASYNC write 1D contiguous (memory) contiguous (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-contig.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-contig.json
- name: Test h5bench ASYNC write 1D contiguous (memory) interleaved (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-interleaved.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-interleaved.json
- name: Test h5bench ASYNC write 1D interleaved (memory) contiguous (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-interleaved-contig.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-interleaved-contig.json
- name: Test h5bench ASYNC write 1D interleaved (memory) interleaved (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-interleaved-interleaved.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-interleaved-interleaved.json
- name: Test h5bench ASYNC write 2D contiguous (memory) contiguous (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-contig-contig.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-contig-contig.json
- name: Test h5bench ASYNC write 2D contiguous (memory) interleaved (file)
run: |
current="$PWD"
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-contig-interleaved.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-contig-interleaved.json
- name: Test h5bench ASYNC write 2D interleaved (memory) contiguous (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-interleaved-contig.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-interleaved-contig.json
- name: Test h5bench ASYNC write 2D interleaved (memory) interleaved (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-interleaved-interleaved.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-interleaved-interleaved.json
- name: Test h5bench ASYNC write 3D contiguous (memory) contiguous (file)
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-3d-contig-contig.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-3d-contig-contig.json
- name: Test h5bench ASYNC read 1D contiguous (memory) contiguous (file) full
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-contig-read-full.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-contig-read-full.json
- name: Test h5bench ASYNC read 1D contiguous (memory) contiguous (file) partial
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-contig-read-partial.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-contig-read-partial.json
- name: Test h5bench ASYNC read 1D contiguous (memory) contiguous (file) strided
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-1d-contig-contig-read-strided.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-1d-contig-contig-read-strided.json
- name: Test h5bench ASYNC read 2D contiguous (memory) contiguous (file) full
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-contig-contig-read-full.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-contig-contig-read-full.json
- name: Test h5bench ASYNC read 3D contiguous (memory) contiguous (file) full
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-write-2d-contig-contig-read-full.json
./h5bench --debug --abort-on-failure --validate-mode ../samples/async-write-2d-contig-contig-read-full.json
- name: Test h5bench ASYNC amrex
run: |
export HDF5_DIR=/opt/hdf5
export ABT_DIR=/opt/argobots
export ASYNC_DIR=/opt/vol-async
export HDF5_ASYNC_MAX_MEM_MB=1024
cd build-async
python3 ../samples/update.py ../samples/async-amrex.json
./h5bench --debug --abort-on-failure ../samples/async-amrex.json
- name: Setup tmate session
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
- name: Upload artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: test
path: build*/storage/**/std*
retention-days: 5