Skip to content

Commit 4429cbb

Browse files
authored
Fix issues with setup-fortran in a container (#153)
I ran into two issues when using this in a container - github.action_path contains wrong path when used inside a container (actions/runner#2185) - sudo may not be available
1 parent c6c4aa6 commit 4429cbb

File tree

2 files changed

+32
-19
lines changed

2 files changed

+32
-19
lines changed

action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ runs:
7373
COMPILER: ${{ inputs.compiler }}
7474
VERSION: ${{ inputs.version }}
7575
run: |
76-
cd $(echo '/${{ github.action_path }}' | sed -e 's/\\/\//g' -e 's/://')
76+
cd $(echo "/$GITHUB_ACTION_PATH" | sed -e 's/\\/\//g' -e 's/://')
7777
source ./main.sh
7878
7979
if [[ "${{ inputs.update-environment }}" == "true" ]]; then

setup-fortran.sh

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
set -ex
44

5+
sudo_wrapper() {
6+
if command -v sudo > /dev/null 2>&1; then
7+
SUDO="sudo"
8+
else
9+
if [[ $EUID -ne 0 ]]; then
10+
echo "This script requires 'sudo' to install packages. Please install 'sudo' or run as root."
11+
exit 1
12+
fi
13+
SUDO=""
14+
fi
15+
$SUDO "$@"
16+
}
17+
518
require_fetch()
619
{
720
if command -v curl > /dev/null 2>&1; then
@@ -18,7 +31,7 @@ require_fetch()
1831
# https://github.com/cea-hpc/modules
1932
install_environment_modules_apt() {
2033
echo "Installing environment-modules package..."
21-
sudo apt-get install -y environment-modules
34+
sudo_wrapper apt-get install -y environment-modules
2235
echo "Environment-modules installed."
2336
echo "Sourcing modules.sh script to set up environment modules..."
2437
source /etc/profile.d/modules.sh
@@ -53,8 +66,8 @@ install_gcc_brew()
5366
install_gcc_apt()
5467
{
5568
if [ "$version" == "latest" ]; then
56-
sudo apt-get update
57-
sudo apt-get install -y gcc gfortran g++
69+
sudo_wrapper apt-get update
70+
sudo_wrapper apt-get install -y gcc gfortran g++
5871
else
5972
# Check whether the system gcc version is the version we are after.
6073
cur=$(apt show gcc | grep "Version" | cut -d':' -f3 | cut -d'-' -f1)
@@ -68,15 +81,15 @@ install_gcc_apt()
6881
fi
6982
else
7083
# Install the PPA for installing other versions of gcc.
71-
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
72-
sudo apt-get update
84+
sudo_wrapper add-apt-repository --yes ppa:ubuntu-toolchain-r/test
85+
sudo_wrapper apt-get update
7386
fi
7487

7588
if [ "${needs_install}" == "1" ]; then
76-
sudo apt-get install -y gcc-${version} gfortran-${version} g++-${version}
89+
sudo_wrapper apt-get install -y gcc-${version} gfortran-${version} g++-${version}
7790
fi
7891

79-
sudo update-alternatives \
92+
sudo_wrapper update-alternatives \
8093
--install /usr/bin/gcc gcc /usr/bin/gcc-${version} 100 \
8194
--slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${version} \
8295
--slave /usr/bin/gcov gcov /usr/bin/gcov-${version} \
@@ -367,25 +380,25 @@ install_intel_apt()
367380
require_fetch
368381
local _KEY="GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB"
369382
$fetch https://apt.repos.intel.com/intel-gpg-keys/$_KEY > $_KEY
370-
sudo apt-key add $_KEY
383+
sudo_wrapper apt-key add $_KEY
371384
rm $_KEY
372385
echo "deb https://apt.repos.intel.com/oneapi all main" \
373-
| sudo tee /etc/apt/sources.list.d/oneAPI.list
374-
sudo apt-get update
386+
| sudo_wrapper tee /etc/apt/sources.list.d/oneAPI.list
387+
sudo_wrapper apt-get update
375388

376389
if [ "$version" == "latest" ]; then
377-
sudo apt-get install -y \
390+
sudo_wrapper apt-get install -y \
378391
intel-oneapi-compiler-fortran \
379392
intel-oneapi-compiler-dpcpp-cpp
380393
else
381394
# c/cpp compiler package names changed with 2024+
382395
case $version in
383396
2024* | 2025*)
384-
sudo apt-get install -y \
397+
sudo_wrapper apt-get install -y \
385398
intel-oneapi-compiler-{fortran,dpcpp-cpp}-$version
386399
;;
387400
*)
388-
sudo apt-get install -y \
401+
sudo_wrapper apt-get install -y \
389402
intel-oneapi-compiler-{fortran,dpcpp-cpp-and-cpp-classic}-$version
390403
;;
391404
esac
@@ -453,7 +466,7 @@ install_intel_dmg()
453466
require_fetch
454467
$fetch $MACOS_HPCKIT_URL > m_HPCKit.dmg
455468
hdiutil attach m_HPCKit.dmg
456-
sudo /Volumes/"$(basename "$MACOS_HPCKIT_URL" .dmg)"/bootstrapper.app/Contents/MacOS/bootstrapper -s \
469+
sudo_wrapper /Volumes/"$(basename "$MACOS_HPCKIT_URL" .dmg)"/bootstrapper.app/Contents/MacOS/bootstrapper -s \
457470
--action install \
458471
--eula=accept \
459472
--continue-with-optional-error=yes \
@@ -589,10 +602,10 @@ install_nvidiahpc_apt()
589602

590603
# install NVIDIA HPC SDK
591604
echo "Installing NVIDIA HPC SDK $version..."
592-
curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg
593-
echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list
594-
sudo apt-get update -y
595-
sudo apt-get install -y nvhpc-$cversion
605+
curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo_wrapper gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg
606+
echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo_wrapper tee /etc/apt/sources.list.d/nvhpc.list
607+
sudo_wrapper apt-get update -y
608+
sudo_wrapper apt-get install -y nvhpc-$cversion
596609
echo "NVIDIA HPC SDK $version installed."
597610

598611
# load NVIDIA HPC SDK module

0 commit comments

Comments
 (0)