Skip to content

Merge pull request #976 from ykempf/save_fsaved #10

Merge pull request #976 from ykempf/save_fsaved

Merge pull request #976 from ykempf/save_fsaved #10

Workflow file for this run

name: Github-CI
on:
# Dispatch this workflow whenever master or dev get a PR or commit
push:
branches : ["dev","master"]
pull_request:
branches: ["dev","master"]
# ... or when the workflow is started manually
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build_libraries:
# Build libraries for the current version of the docker image
# (to be used in any subsequent compilation and run jobs on said image)
runs-on: ubuntu-latest
container: ursg/vlasiator_ci:20240131_1
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Run library build script
run: ./build_libraries.sh
- name: Build libraries tar
run: tar --zstd -cvf libraries.tar.zstd libraries/
- name: Upload libraries as artifact
uses: actions/upload-artifact@v4
with:
name: libraries
path: libraries.tar.zstd
retention-days: 5
if-no-files-found: error
build_libraries_appleM1:
# Build libraries on macos with M1 hardware, to test both macOS and aarch64 compatibility
runs-on: macos-14
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Setup MPI
uses: mpi4py/setup-mpi@v1
with:
mpi: 'openmpi'
- name: Setup openmp-capable llvm
run: |
brew install llvm libomp
echo "CXX=/opt/homebrew/opt/llvm/bin/clang++" >> "$GITHUB_ENV"
echo "OMPI_CXX=/opt/homebrew/opt/llvm/bin/clang++" >> "$GITHUB_ENV"
echo "MPI_CXX=mpic++" >> "$GITHUB_ENV"
echo "CC=/opt/homebrew/opt/llvm/bin/clang" >> "$GITHUB_ENV"
echo "OMPI_CC=/opt/homebrew/opt/llvm/bin/clang" >> "$GITHUB_ENV"
echo "MPI_CC=mpicc" >> "$GITHUB_ENV"
- name: Run library build script
run: |
. ./build_libraries.sh appleM1
- name: Build libraries tar
run: tar --zstd -cvf libraries-appleM1.tar.zstd libraries-appleM1
- name: Upload libraries as artifact
uses: actions/upload-artifact@v4
with:
name: libraries-appleM1
path: libraries-appleM1.tar.zstd
retention-days: 5
if-no-files-found: error
build_libraries_riscv:
# Build libraries for the current version of the docker image
# (to be used in any subsequent compilation and run jobs on said image)
runs-on: risc-v
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- name: Clean workspace
run: |
rm -rf libraries library-build libraries-arriesgado.tar.gz
- name: Submit library job
run: |
#srun --interactive -p arriesgado-jammy -J vlasiator-libs -n 1 -c 4 -t 01:00:00 bash -lc 'module load openmpi; ./build_libraries.sh arriesgado'
ssh synth-hca 'source /etc/profile.d/lmod.sh; export PATH=$PATH:$HOME/bin; module load llvm/cross/EPI-0.7-development; cd '$GITHUB_WORKSPACE'; ./build_libraries.sh arriesgado'
- name: Build libraries tar
run: tar -czvf libraries-arriesgado.tar.gz libraries-arriesgado/
- name: Upload libraries as artifact
uses: actions/upload-artifact@v4
with:
name: libraries-arriesgado
path: libraries-arriesgado.tar.gz
retention-days: 5
if-no-files-found: error
build_production:
# Build Vlasiator with production flags
runs-on: ubuntu-latest
container: ursg/vlasiator_ci:20240131_1
needs: build_libraries
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- name: Download libraries
uses: actions/download-artifact@v4
with:
name: libraries
- name: Unpack libraries
run: tar --zstd -xvf libraries.tar.zstd
- uses: ursg/gcc-problem-matcher@master
- name: Compile vlasiator (Release build)
run: |
VLASIATOR_ARCH=github_actions make clean
VLASIATOR_ARCH=github_actions make -j 3
# - name: Compile vlasiator (Release build)
# run: |
# srun -M carrington --job-name release_compile --interactive --nodes=1 -n 1 -c 16 --mem=40G -p short -t 0:10:0 bash -c 'module purge; module load GCC/11.2.0; module load OpenMPI/4.1.1-GCC-11.2.0 ; module load PMIx/4.1.0-GCCcore-11.2.0; module load PAPI/6.0.0.1-GCCcore-11.2.0; export VLASIATOR_ARCH=carrington_gcc_openmpi; make clean; make -j 16'
build_testpackage:
# Build Vlasiator with testpackage flags, on the carrington cluster
# (for subsequent running of the integration test package)
runs-on: carrington
steps:
- name: Clean workspace
run: |
rm -rf libraries library-build testpackage
rm -f libraries.tar.zst testpackage_check_description.txt testpackage-output.tar.gz metrics.txt stdout.txt stderr.txt testpackage_output_variables.txt
rm -f *.xml
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- name: Make clean
run: VLASIATOR_ARCH=carrington_gcc_openmpi make clean
- uses: ursg/gcc-problem-matcher@master
- name: Compile vlasiator (Testpackage build)
run: |
export VLASIATOR_ARCH=carrington_gcc_openmpi
srun -M carrington --job-name tp_compile --interactive --nodes=1 -n 1 -c 16 --mem=40G -p short -t 0:10:0 bash -c 'module purge; module load GCC/11.2.0; module load OpenMPI/4.1.1-GCC-11.2.0 ; module load PMIx/4.1.0-GCCcore-11.2.0; module load PAPI/6.0.0.1-GCCcore-11.2.0; export VLASIATOR_ARCH=carrington_gcc_openmpi; make -j 16 testpackage; sleep 10s'
- name: Make sure the output binary is visible in lustre
uses: nick-fields/retry@v3
with:
timeout_seconds: 15
max_attempts: 3
retry_on: error
command: ls vlasiator
- name: Upload testpackage binary
uses: actions/upload-artifact@v4
with:
name: vlasiator-testpackage
path: vlasiator
if-no-files-found: error
#- name: Upload build log
# uses: actions/upload-artifact@v4
# with:
# name: Testpackage build log
# path: build.log
build_riscv:
runs-on: risc-v
needs: build_libraries_riscv
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- name: Clean workspace
run: |
rm -rf libraries library-build libraries-arriesgado.tar.gz
rm -rf stdout.txt stderr.txt metrics.txt
rm -rf *.xml
- name: Download libraries
uses: actions/download-artifact@v4
with:
name: libraries-arriesgado
- name: Unpack libraries
run: tar -xzvf libraries-arriesgado.tar.gz
- name: Make clean
run: VLASIATOR_ARCH=arriesgado make clean
- name: Compile vlasiator (RISC-V)
run: |
#srun --interactive -p arriesgado-jammy -J vlasiator_build -n 1 -c 4 --pty -t 01:00:00 bash -lc 'module load boost papi openmpi; export VLASIATOR_ARCH=arriesgado; make -j4'
ssh synth-hca 'source /etc/profile.d/lmod.sh; export PATH=$PATH:$HOME/bin; module load llvm/cross/EPI-0.7-development; export VLASIATOR_ARCH=arriesgado; cd '$GITHUB_WORKSPACE'; make -j 12'
- name: Upload riscv binary
uses: actions/upload-artifact@v4
with:
name: vlasiator-riscv
path: vlasiator
if-no-files-found: error
build_appleM1:
runs-on: macos-14
needs: build_libraries_appleM1
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- name: Setup MPI
uses: mpi4py/setup-mpi@v1
with:
mpi: 'openmpi'
- name: Setup openmp-capable llvm
run: |
brew install llvm libomp
echo "CXX=/opt/homebrew/opt/llvm/bin/clang++" >> "$GITHUB_ENV"
echo "OMPI_CXX=/opt/homebrew/opt/llvm/bin/clang++" >> "$GITHUB_ENV"
echo "CC=/opt/homebrew/opt/llvm/bin/clang" >> "$GITHUB_ENV"
echo "OMPI_CC=/opt/homebrew/opt/llvm/bin/clang" >> "$GITHUB_ENV"
- name: Install boost
run: |
brew install boost
ln -s /opt/homebrew/Cellar/boost/* /opt/homebrew/Cellar/boost/latest
- name: Download libraries
uses: actions/download-artifact@v4
with:
name: libraries-appleM1
- name: Unpack libraries
run: tar --zstd -xvf libraries-appleM1.tar.zstd
- name: Make clean
run: VLASIATOR_ARCH=appleM1 make clean
- name: Compile vlasiator (Release build)
run: |
VLASIATOR_ARCH=appleM1 make clean
VLASIATOR_ARCH=appleM1 make -j 3
build_tools:
# Build vlsvdiff and vlsvextract for testpackage use
runs-on: carrington
steps:
- name: Clean workspace
run: |
rm -rf libraries library-build testpackage
rm -f libraries.tar.zstd testpackage_check_description.txt testpackage-output.tar.gz metrics.txt stdout.txt stderr.txt testpackage_output_variables.txt
rm -f *.xml
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
- uses: ursg/gcc-problem-matcher@master
- name: Make clean
run: VLASIATOR_ARCH=carrington_gcc_openmpi make clean
- name: Compile tools
run: |
export VLASIATOR_ARCH=carrington_gcc_openmpi
srun -M carrington --job-name tp_compile --interactive --nodes=1 -n 1 -c 16 --mem=40G -p short -t 0:10:0 bash -c 'module purge; module load GCC/11.2.0; module load OpenMPI/4.1.1-GCC-11.2.0 ; module load PMIx/4.1.0-GCCcore-11.2.0; module load PAPI/6.0.0.1-GCCcore-11.2.0; export VLASIATOR_ARCH=carrington_gcc_openmpi; make -j 16 vlsvextract vlsvdiff'
- name: Upload tools binaries
uses: actions/upload-artifact@v4
with:
name: vlasiator-tools
path: |
vlsvextract_DP
vlsvdiff_DP
if-no-files-found: error
run_testpackage:
# Run the testpackage on the carrington cluster
runs-on: carrington
needs: [build_testpackage, build_tools]
continue-on-error: true
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: false
- name: Download testpackage binary
uses: actions/download-artifact@v4
with:
name: vlasiator-testpackage
- name: Download tools
uses: actions/download-artifact@v4
with:
name: vlasiator-tools
- name: Run testpackage
id: run
run: |
chmod +x $GITHUB_WORKSPACE/vlasiator
chmod +x $GITHUB_WORKSPACE/vlsv*_DP
cd testpackage
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/libraries/lib
#srun -M carrington -t 01:30:00 --job-name CI_testpackage --interactive --nodes=1 -c 4 -n 16 --mem-per-cpu=5G -p short ./small_test_carrington_github_ci.sh
VLASIATOR_CIRUNNER_JOBSPEC_TP=$(sbatch --parsable -o testpackage_run_output.txt ./small_test_carrington_github_ci.sh)
VLASIATOR_CIRUNNER_JOBSPEC_TP=(${VLASIATOR_CIRUNNER_JOBSPEC_TP//\;/ })
trap "scancel -M carrington ${VLASIATOR_CIRUNNER_JOBSPEC_TP[0]}" SIGINT
trap "scancel -M carrington ${VLASIATOR_CIRUNNER_JOBSPEC_TP[0]}" SIGTERM
RUN_STRING=$( cat << MORO
echo "Job finished, checking output."
cat testpackage_run_output.txt
cat $GITHUB_STEP_SUMMARY > $GITHUB_WORKSPACE/testpackage_check_description.txt
cd $GITHUB_WORKSPACE
ls -halB testpackage_check_description.txt
tar -czf testpackage-output.tar.gz testpackage_check_description.txt testpackage_output_variables.txt
MORO
)
srun -M carrington --dependency afterany:${VLASIATOR_CIRUNNER_JOBSPEC_TP[0]} bash -c "$RUN_STRING"
if [ -f $GITHUB_WORKSPACE/testpackage_failed ]; then
# Fail this step if any test failed.
exit 1
fi
- name: Make sure the output tarball is visible in lustre
uses: nick-fields/retry@v3
with:
timeout_seconds: 15
max_attempts: 3
retry_on: error
command: ls $GITHUB_WORKSPACE/testpackage-output.tar.gz
- name: Upload testpackage output
uses: actions/upload-artifact@v4
if: always()
with:
name: testpackage-output
path: testpackage-output.tar.gz
# Note: Testpackage output is further processed in the pr_report.yml workflow
# (to produce Checks against pull requests)
build_ionosphereTests:
# Build IonosphereSolverTests miniApp
runs-on: carrington
needs: [build_libraries]
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: true
# - name: Download libraries
# uses: actions/download-artifact@v4
# with:
# name: libraries
# - name: Unpack libraries
# run: tar --zstd -xvf libraries.tar.zstd
# - uses: ursg/gcc-problem-matcher@master
- name: Compile ionosphereSolverTests
run: |
cd mini-apps/ionosphereSolverTests/
srun -M carrington --job-name iST_compile --interactive --nodes=1 -n 1 -c 3 --mem=40G -p short -t 0:10:0 bash -c 'module purge; module load GCC/11.2.0; module load OpenMPI/4.1.1-GCC-11.2.0 ; module load PMIx/4.1.0-GCCcore-11.2.0; module load PAPI/6.0.0.1-GCCcore-11.2.0; export VLASIATOR_ARCH=carrington_gcc_openmpi; make -j 3 main differentialFlux sigmaProfiles'
# VLASIATOR_ARCH=carrington_gcc_openmpi make -j 3 main differentialFlux sigmaProfiles
- name: Upload ionosphereTest binaries
uses: actions/upload-artifact@v4
with:
name: ionosphereTests
path: |
mini-apps/ionosphereSolverTests/main
mini-apps/ionosphereSolverTests/differentialFlux
mini-apps/ionosphereSolverTests/sigmaProfiles
if-no-files-found: error