From ab4c7711d991062a837e840f98b65fafd81e5bfa Mon Sep 17 00:00:00 2001 From: w-bonelli Date: Tue, 5 Sep 2023 12:20:57 -0400 Subject: [PATCH] ci: add gitlab config for automatic denali build (#1339) --- .gitlab-ci.yml | 31 +++++++++++++++++++++++++++ .hpc/cray-meson-build.slurm.batch | 3 +-- .hpc/update-module.slurm.batch | 35 +++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 .hpc/update-module.slurm.batch diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000000..6e5e6b8ee3d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,31 @@ +image: ubuntu:20.04 +workflow: + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == 'push' +before_script: + # install ssh agent + - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' + # configure ssh agent + - eval $(ssh-agent -s) + # set private key permissions + - chmod 400 "$SSH_PRIVATE_KEY" + # add key to the agent store + - ssh-add "$SSH_PRIVATE_KEY" + # configure known hosts + - mkdir -p ~/.ssh + - cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts +deploy_denali: + stage: deploy + script: | + # fetch and checkout latest + ssh -l "$SSH_USERNAME" "$SSH_HOSTNAME" "cd $MF6_PROJ_ROOT && git fetch $GIT_REMOTE && git checkout $GIT_BRANCH && git pull" + echo "Updated repository $MF6_PROJ_ROOT" + # submit a job to build mf6 + jobid=$(ssh -l "$SSH_USERNAME" "$SSH_HOSTNAME" "sbatch --account=$SLURM_ACCOUNT --reservation=$SLURM_RESERVATION --parsable -D $MF6_PROJ_ROOT/.hpc $MF6_PROJ_ROOT/$BUILD_SCRIPT" | tail -n 1) + echo "Submitted build job $jobid" + # submit a job to update the mf6 module + jobid=$(ssh -l "$SSH_USERNAME" "$SSH_HOSTNAME" "sbatch --export=ALL,INTEL_VERSION=$INTEL_VERSION,MF6_PROJ_ROOT=$MF6_PROJ_ROOT,MODULES_PATH=$MODULES_PATH --account=$SLURM_ACCOUNT --reservation=$SLURM_RESERVATION --parsable -D $MF6_PROJ_ROOT/.hpc -d afterok:$jobid $MF6_PROJ_ROOT/$MODULE_SCRIPT" | tail -n 1) + echo "Submitted module update job $jobid" + environment: denali + diff --git a/.hpc/cray-meson-build.slurm.batch b/.hpc/cray-meson-build.slurm.batch index 63a7cd9b413..08d0e4ed89c 100644 --- a/.hpc/cray-meson-build.slurm.batch +++ b/.hpc/cray-meson-build.slurm.batch @@ -3,7 +3,6 @@ #SBATCH --job-name=meson-MODFLOW-build #SBATCH --nodes=1 #SBATCH --ntasks=2 -#SBATCH --account=impd #SBATCH --time=00:10:00 #SBATCH --output=slurm-%j.out @@ -34,4 +33,4 @@ cd $TESTDIR $BINDIR/mf6 # parallel run -srun $BINDIR/mf6 -p \ No newline at end of file +srun $BINDIR/mf6 -p diff --git a/.hpc/update-module.slurm.batch b/.hpc/update-module.slurm.batch new file mode 100644 index 00000000000..cb6ac1ed18f --- /dev/null +++ b/.hpc/update-module.slurm.batch @@ -0,0 +1,35 @@ +#!/bin/bash + +#SBATCH --job-name=update-mf6-module +#SBATCH --nodes=1 +#SBATCH --ntasks=1 +#SBATCH --time=00:05:00 +#SBATCH --output=slurm-%j.out + +# variables +MF6_BINDIR="$MF6_PROJ_ROOT/bin" +MF6_VERSION=$(cat "$MF6_PROJ_ROOT/version.txt") +MF6_MODULEFILE_PATH="$MODULES_PATH/modulefiles/modflow/$MF6_VERSION" +MF6_MODULES_PATH="$MODULES_PATH/apps/modflow" +MF6_MODULE_PATH="$MF6_MODULES_PATH/$MF6_VERSION" + +if [ -d "$MF6_MODULE_PATH" ]; then + echo "Updating module modflow/$MF6_VERSION" +else + echo "Creating module modflow/$MF6_VERSION" + + mkdir -p "$MF6_MODULE_PATH/$INTEL_VERSION/bin" + mkdir -p "$MF6_MODULE_PATH/$INTEL_VERSION/lib" + echo "Created bin/lib dirs in $MF6_MODULE_PATH/$INTEL_VERSION/" + + rsync "$MODULES_PATH/modulefiles/modflow/6.4.2" "$MF6_MODULEFILE_PATH" + sed -i -e "s/6.4.2/$MF6_VERSION/g" "$MF6_MODULEFILE_PATH" + echo "Created module file" +fi + +# copy binaries from build dir +rsync "$MF6_BINDIR/mf6" "$MF6_MODULE_PATH/$INTEL_VERSION/bin/" +rsync "$MF6_BINDIR/zbud6" "$MF6_MODULE_PATH/$INTEL_VERSION/bin/" +rsync "$MF6_BINDIR/libmf6.so" "$MF6_MODULE_PATH/$INTEL_VERSION/lib/" +echo "Copied binaries to $MF6_MODULE_PATH/$INTEL_VERSION lib/bin dirs" +