Add automatic ionosphere testing (Merkin2010) as a CI stage. #64
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 dtestpackage_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 dtestpackage_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: true | |
- 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 ${VLASIATOR_CIRUNNER_JOBSPEC_TP[1]} ${VLASIATOR_CIRUNNER_JOBSPEC_TP[0]}" SIGINT | |
srun -M carrington --dependency afterany:${VLASIATOR_CIRUNNER_JOBSPEC_TP[0]} echo "Job finished, checking output." | |
cat testpackage_run_output.txt | |
cat $GITHUB_STEP_SUMMARY > $GITHUB_WORKSPACE/testpackage_check_description.txt | |
cd $GITHUB_WORKSPACE | |
tar -czvf testpackage-output.tar.gz testpackage_check_description.txt testpackage_output_variables.txt | |
if [ -f $GITHUB_WORKSPACE/testpackage_failed ]; then | |
# Fail this step if any test failed. | |
exit 1 | |
fi | |
- 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: 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: Download libraries | |
uses: actions/download-artifact@v4 | |
with: | |
name: libraries | |
- name: Unpack libraries | |
run: tar --zstd -xvf libraries.tar.zstd | |
- name: Compile ionosphereSolverTests | |
run: | | |
cd mini-apps/ionosphereSolverTests/ | |
VLASIATOR_ARCH=github_actions 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 | |
run_ionosphere_LFMtest: | |
runs-on: ubuntu-latest | |
container: ursg/vlasiator_ci:20240131_1 | |
needs: build_ionosphereTests | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v4 | |
with: | |
submodules: false | |
- name: Download ionosphereTests | |
uses: actions/download-artifact@v4 | |
with: | |
name: ionosphereTests | |
- name: checkout Analysator | |
cd mini-apps/ionosphereSolverTests/ | |
git clone https://github.com/fmihpc/analysator | |
- name: Run LFMtest | |
run: | | |
cd mini-apps/ionosphereSolverTests/ | |
OMP_NUM_THREADS=1 ./main -N 2000 -r 40 90 -r 50 90 -r 60 80 -sigma 10 -fac merkin2010 -gaugeFix equator45 -o LFMtest.vlsv -maxIter 10000 | |
export PYTHONPATH=$PYTHONPATH:analysator | |
export PTNONINTERACTIVE=1 | |
./lfmformat.py LFMtest.vlsv > lfmtest.dat | |
./plot_LFMtest.gp | |
- name: Run atmospheric profile test | |
run: | | |
./sigmaProfiles 1e6 1.16046e7 > atmosphere.dat | |
./sigmaProfiles 1e6 1.16046e8 > atmosphere10.dat | |
./sigmaProfiles 1e6 1.16046e9 > atmosphere100.dat | |
./plotAtmosphere.gp | |
- name: Upload ionosphereTest result images | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ionosphereTestResults | |
path: | | |
mini-apps/ionosphereSolverTests/LFMtest.png | |
mini-apps/ionosphereSolverTests/atmosphere.png | |
if-no-files-found: error |