diff --git a/.github/ci_scripts/ci_ISSM.sh b/.github/ci_scripts/ci_ISSM.sh
deleted file mode 100755
index 9c8dbed5e..000000000
--- a/.github/ci_scripts/ci_ISSM.sh
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-
-# Source config file
-if [ $# -ne 1 ]; then
-	#no config file specified: exit
-	echo "No config file specified. Exiting..." >&2 # Error message to stderr.
-	exit 1
-fi
-if [ ! -f "$1" ]; then
-	echo "File $1 not found!" >&2 # Error message to stderr.
-	exit 1
-fi
-
-# Initialize test suite variables (to avoid "-eq: unary operator expected")
-NUMCPUS_INSTALL=1
-NUMCPUS_RUN=1
-
-# Source configuration script
-source $1;
-
-# Number of packages
-NUMPACKAGES=$(($(echo ${EXTERNALPACKAGES} | wc -w ) / 2))
-source ${ISSM_DIR}/etc/environment.sh
-
-for ((i=1;i<=$NUMPACKAGES;i++)); do
-	NUM1=$((2*$i-1))
-	NUM2=$((2*$i))
-	PACKAGENAME=$(echo $EXTERNALPACKAGES | cut -d " " -f $NUM1-$NUM1)
-	PACKAGEINST=$(echo $EXTERNALPACKAGES | cut -d " " -f $NUM2-$NUM2)
-
-	# Install if requested or if previous install has not been successful
-	cd ${ISSM_DIR}/externalpackages/$PACKAGENAME
-
-	# Do not install package if it already exists
-	PREFIX=$(egrep "PREFIX=" ./$PACKAGEINST | cut -d'"' -f 2 | envsubst)
-	echo "======================================================";
-	echo "       Installing $PACKAGENAME                        ";
-	echo "======================================================";
-
-	./$PACKAGEINST $NUMCPUS_INSTALL &> compil.log
-	if [ $? -ne 0 ] && [ "${PACKAGENAME}" != "boost" ]; then
-		cat compil.log
-		echo "======================================================";
-		echo "    ERROR: installation of $PACKAGENAME failed        ";
-		echo "======================================================";
-		exit 1;
-	fi
-	source ${ISSM_DIR}/etc/environment.sh
-done
-
-# ISSM compilation
-cd $ISSM_DIR
-echo "======================================================";
-echo "                    Reconfiguring                     ";
-echo "======================================================";
-autoreconf -ivf
-if [ $? -ne 0 ]; then
-	echo "autoreconf failed!"
-	exit 1
-fi
-
-eval "./configure ${ISSM_CONFIG}"
-if [ $? -ne 0 ]; then
-	echo "ISSM configuration failed (see options below)"
-	echo $ISSM_CONFIG
-	echo "ISSM configuration failed!"
-	exit 1
-fi
-
-# Compile and install ISSM
-echo "======================================================"
-echo "                    Compiling ISSM                    "
-echo "======================================================"
-make -j $NUMCPUS_INSTALL install
-if [ $? -ne 0 ]; then
-	echo "ISSM_COMPILATION failed!"
-	exit 1
-fi
-
-echo "======================================================"
-echo "             Preparing Test scripts                   "
-echo "======================================================"
-
-#Prepare MATLAB tests
-cat > ${ISSM_DIR}/matlab_ci.m << EOF
-% Go to the test directory
-cd $ISSM_DIR/test/NightlyRun/
-
-% Add ISSM tools to path
-addpath('${ISSM_DIR}/src/m/dev');
-devpath;
-
-% Run tests
-runme(${MATLAB_NROPTIONS},'quitonerror',1);
-disp('MATLABEXITEDCORRECTLY');
-quit(0);
-EOF
diff --git a/.github/ci_scripts/github_linux_basic b/.github/ci_scripts/github_linux_basic
deleted file mode 100644
index b73e5157b..000000000
--- a/.github/ci_scripts/github_linux_basic
+++ /dev/null
@@ -1,52 +0,0 @@
-#--------------------#
-# ISSM Configuration #
-#--------------------#
-ISSM_CONFIG='\
-	--prefix=${ISSM_DIR} \
-	--disable-static \
-	--enable-development \
-	--enable-debugging \
-	--with-numthreads=4 \
-	--with-matlab-dir=${MATLAB_PATH} \
-	--with-fortran-lib="-L/usr/lib/x86_64-linux-gnu -lgfortran" \
-	--with-mpi-include="/usr/lib/x86_64-linux-gnu/openmpi/include/" \
-	--with-mpi-libflags="-L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi -lmpi_cxx" \
-	--with-petsc-dir="/usr/lib/petscdir/petsc-real/" \
-	--with-blas-lapack-dir="/usr/lib/petscdir/petsc-real/" \
-	--with-metis-dir="/usr/include" \
-	--with-scalapack-dir="/usr/lib/x86_64-linux-gnu/" \
-	--with-mumps-dir="/usr/lib/petscdir/petsc-real/" \
-	--with-triangle-dir="${ISSM_DIR}/externalpackages/triangle/install" \
-	--with-m1qn3-dir="${ISSM_DIR}/externalpackages/m1qn3/install" \
-	--with-semic-dir="${ISSM_DIR}/externalpackages/semic/install"
-'
-
-#	--with-mpi-include="${ISSM_DIR}/externalpackages/petsc/install/include" \
-#   --with-mpi-libflags="-L${ISSM_DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \
-#	--with-petsc-dir="${ISSM_DIR}/externalpackages/petsc/install" \
-#   --with-blas-lapack-dir="${ISSM_DIR}/externalpackages/petsc/install" \
-#   --with-metis-dir="${ISSM_DIR}/externalpackages/petsc/install" \
-#   --with-scalapack-dir="${ISSM_DIR}/externalpackages/petsc/install" \
-#   --with-mumps-dir="${ISSM_DIR}/externalpackages/petsc/install" \
-
-#petsc     install-3.21-linux.sh
-
-#-------------------#
-# External Packages #
-#-------------------#
-EXTERNALPACKAGES="
-	triangle  install-linux.sh
-	m1qn3     install-linux.sh
-	semic     install.sh
-"
-
-# Number of CPUs used in ISSM compilation
-NUMCPUS_INSTALL=8
-
-#---------#
-# Testing #
-#---------#
-
-# Nightly run options
-MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')],'id',101:110"
-PYTHON_NROPTIONS=""
diff --git a/.github/workflows/c-cpp-apt.yml b/.github/workflows/c-cpp-apt.yml
new file mode 100644
index 000000000..f48ab6ae1
--- /dev/null
+++ b/.github/workflows/c-cpp-apt.yml
@@ -0,0 +1,89 @@
+name: Compilation CI
+
+on:
+  push:
+    branches: [ "main" ]
+  pull_request:
+    branches: [ "main" ]
+env:
+  ISSM_DIR: ${{ github.workspace }}
+  
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+
+      - run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
+      - run: echo "This job is now running on a ${{ runner.os }} server hosted by GitHub!"
+      - run: echo "The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
+
+      - name: Installing MATLAB
+        id:   setup-matlab
+        uses: matlab-actions/setup-matlab@v2
+        with:
+          release: R2023b
+
+      - name: Installling Open MPI, METIS and PETSc
+        run: |
+          sudo apt-get install -y libopenmpi-dev libmetis-dev petsc-dev
+
+      - name: Check out repository code
+        uses: actions/checkout@v4
+
+      - name: Install External packages
+        run: |
+          cd $ISSM_DIR/externalpackages/triangle && ./install-linux.sh && source $ISSM_DIR/etc/environment.sh
+          cd $ISSM_DIR/externalpackages/m1qn3    && ./install-linux.sh && source $ISSM_DIR/etc/environment.sh
+
+      - name: Reconfigure ISSM
+        run: |
+          autoreconf -ivf
+          ./configure --prefix=${ISSM_DIR} \
+          --disable-static \
+          --enable-development \
+          --enable-debugging \
+          --with-numthreads=4 \
+          --with-matlab-dir=${{ steps.setup-matlab.outputs.matlabroot }} \
+          --with-fortran-lib="-L/usr/lib/x86_64-linux-gnu -lgfortran" \
+          --with-mpi-include="/usr/lib/x86_64-linux-gnu/openmpi/include/" \
+          --with-mpi-libflags="-L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi -lmpi_cxx" \
+          --with-petsc-dir="/usr/lib/petscdir/petsc-real/" \
+          --with-blas-lapack-dir="/usr/lib/petscdir/petsc-real/" \
+          --with-metis-dir="/usr/include" \
+          --with-scalapack-dir="/usr/lib/x86_64-linux-gnu/" \
+          --with-mumps-dir="/usr/lib/petscdir/petsc-real/" \
+          --with-triangle-dir="${ISSM_DIR}/externalpackages/triangle/install" \
+          --with-m1qn3-dir="${ISSM_DIR}/externalpackages/m1qn3/install"
+
+      - name: Compile ISSM
+        run: make -j8 install
+
+      - name: Prepare MATLAB script
+        run: |
+          cat > ${ISSM_DIR}/matlab_ci.m << EOF
+          % Go to the test directory
+          cd $ISSM_DIR/test/NightlyRun/
+
+          % Add ISSM tools to path
+          addpath('${ISSM_DIR}/src/m/dev');
+          devpath;
+
+          % Run tests
+          runme('exclude',[IdFromString('Dakota')],'id',101:110,'quitonerror',1);
+          quit(0);
+          EOF
+          cat ${ISSM_DIR}/matlab_ci.m
+
+      - name: Get run-matlab-command
+        run: |
+          wget -O /usr/local/bin/run-matlab-command https://ssd.mathworks.com/supportfiles/ci/run-matlab-command/v2/glnxa64/run-matlab-command
+          chmod +x /usr/local/bin/run-matlab-command
+
+      - name: Run MATLAB Command
+        run: |
+          source $ISSM_DIR/etc/environment.sh
+          LD_PRELOAD=/lib/x86_64-linux-gnu/libstdc++.so.6 run-matlab-command "matlab_ci"
+
+      - run: echo "This job's status is ${{ job.status }}."