Skip to content

Commit

Permalink
[ubuntu] Refactor bash functions (actions#9055)
Browse files Browse the repository at this point in the history
  • Loading branch information
shamil-mubarakshin authored Dec 26, 2023
1 parent d16bc5f commit 503ae89
Show file tree
Hide file tree
Showing 38 changed files with 191 additions and 224 deletions.
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/configure-dpkg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ source $HELPER_SCRIPTS/etc-environment.sh
# automatic installs. If you are using this front-end, and require
# non-default answers to questions, you will need to preseed the
# debconf database
setEtcEnvironmentVariable "DEBIAN_FRONTEND" "noninteractive"
set_etc_environment_variable "DEBIAN_FRONTEND" "noninteractive"

# dpkg can be instructed not to ask for confirmation
# when replacing a configuration file (with the --force-confdef --force-confold options)
Expand Down
12 changes: 6 additions & 6 deletions images/ubuntu/scripts/build/configure-environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ source $HELPER_SCRIPTS/os.sh
source $HELPER_SCRIPTS/etc-environment.sh

# Set ImageVersion and ImageOS env variables
setEtcEnvironmentVariable "ImageVersion" "${IMAGE_VERSION}"
setEtcEnvironmentVariable "ImageOS" "${IMAGE_OS}"
set_etc_environment_variable "ImageVersion" "${IMAGE_VERSION}"
set_etc_environment_variable "ImageOS" "${IMAGE_OS}"

# Set the ACCEPT_EULA variable to Y value to confirm your acceptance of the End-User Licensing Agreement
setEtcEnvironmentVariable "ACCEPT_EULA" "Y"
set_etc_environment_variable "ACCEPT_EULA" "Y"

# This directory is supposed to be created in $HOME and owned by user(https://github.com/actions/runner-images/issues/491)
mkdir -p /etc/skel/.config/configstore
setEtcEnvironmentVariable "XDG_CONFIG_HOME" '$HOME/.config'
set_etc_environment_variable "XDG_CONFIG_HOME" '$HOME/.config'

# Change waagent entries to use /mnt for swapfile
sed -i 's/ResourceDisk.Format=n/ResourceDisk.Format=y/g' /etc/waagent.conf
Expand All @@ -30,7 +30,7 @@ sed -i 's/::1 ip6-localhost ip6-loopback/::1 localhost ip6-localhost ip6-loo
# Prepare directory and env variable for toolcache
AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
mkdir $AGENT_TOOLSDIRECTORY
setEtcEnvironmentVariable "AGENT_TOOLSDIRECTORY" "${AGENT_TOOLSDIRECTORY}"
set_etc_environment_variable "AGENT_TOOLSDIRECTORY" "${AGENT_TOOLSDIRECTORY}"
chmod -R 777 $AGENT_TOOLSDIRECTORY

# https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
Expand Down Expand Up @@ -62,6 +62,6 @@ fi

# Disable to load providers
# https://github.com/microsoft/azure-pipelines-agent/issues/3834
if isUbuntu22; then
if is_ubuntu22; then
sed -i 's/openssl_conf = openssl_init/#openssl_conf = openssl_init/g' /etc/ssl/openssl.cnf
fi
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/configure-snap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ source $HELPER_SCRIPTS/etc-environment.sh
# Update /etc/environment to include /snap/bin in PATH
# because /etc/profile.d is ignored by `--norc` shell launch option

prependEtcEnvironmentPath "/snap/bin"
prepend_etc_environment_path "/snap/bin"

# Put snapd auto refresh on hold
# as it may generate too much traffic on Canonical's snap server
Expand Down
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/configure-system.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ chmod 755 $IMAGE_FOLDER
ENVPATH=$(grep 'PATH=' /etc/environment | head -n 1 | sed -z 's/^PATH=*//')
ENVPATH=${ENVPATH#"\""}
ENVPATH=${ENVPATH%"\""}
addEtcEnvironmentVariable "PATH" "${ENVPATH}"
add_etc_environment_variable "PATH" "${ENVPATH}"
echo "Updated /etc/environment: $(cat /etc/environment)"

# Сlean yarn and npm cache
Expand Down
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/install-actions-cache.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ACTION_ARCHIVE_CACHE_DIR=/opt/actionarchivecache
mkdir -p $ACTION_ARCHIVE_CACHE_DIR
chmod -R 777 $ACTION_ARCHIVE_CACHE_DIR
echo "Setting up ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE variable to ${ACTION_ARCHIVE_CACHE_DIR}"
setEtcEnvironmentVariable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIVE_CACHE_DIR}"
set_etc_environment_variable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIVE_CACHE_DIR}"

# Download latest release from github.com/actions/action-versions and untar to /opt/actionarchivecache
downloadUrl=$(resolve_github_release_asset_url "actions/action-versions" "endswith(\"action-versions.tar.gz\")" "latest")
Expand Down
4 changes: 2 additions & 2 deletions images/ubuntu/scripts/build/install-aliyun-cli.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ source $HELPER_SCRIPTS/install.sh

# Install Alibaba Cloud CLI
# Pin tool version on ubuntu20 due to issues with GLIBC_2.32 not available
if isUbuntu20; then
if is_ubuntu20; then
toolset_version=$(get_toolset_value '.aliyunCli.version')
download_url="https://github.com/aliyun/aliyun-cli/releases/download/v$toolset_version/aliyun-cli-linux-$toolset_version-amd64.tgz"
else
Expand All @@ -22,7 +22,7 @@ fi
archive_path=$(download_with_retry "$download_url")

# Supply chain security - Alibaba Cloud CLI
if isUbuntu20; then
if is_ubuntu20; then
external_hash=$(get_toolset_value '.aliyunCli.sha256')
else
external_hash=$(get_checksum_from_url "$hash_url" "aliyun-cli-linux.*amd64.tgz" "SHA256")
Expand Down
14 changes: 7 additions & 7 deletions images/ubuntu/scripts/build/install-android-sdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ get_full_ndk_version() {
ANDROID_ROOT=/usr/local/lib/android
ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
SDKMANAGER=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager
setEtcEnvironmentVariable "ANDROID_SDK_ROOT" "${ANDROID_SDK_ROOT}"
set_etc_environment_variable "ANDROID_SDK_ROOT" "${ANDROID_SDK_ROOT}"

# ANDROID_HOME is deprecated, but older versions of Gradle rely on it
setEtcEnvironmentVariable "ANDROID_HOME" "${ANDROID_SDK_ROOT}"
set_etc_environment_variable "ANDROID_HOME" "${ANDROID_SDK_ROOT}"

# Create android sdk directory
mkdir -p ${ANDROID_SDK_ROOT}
Expand Down Expand Up @@ -87,10 +87,10 @@ ndk_default_full_version=$(get_full_ndk_version $android_ndk_major_default)
ndk_latest_full_version=$(get_full_ndk_version $android_ndk_major_latest)
ANDROID_NDK=${ANDROID_SDK_ROOT}/ndk/${ndk_default_full_version}
# ANDROID_NDK, ANDROID_NDK_HOME, and ANDROID_NDK_ROOT variables should be set as many customer builds depend on them https://github.com/actions/runner-images/issues/5879
setEtcEnvironmentVariable "ANDROID_NDK" "${ANDROID_NDK}"
setEtcEnvironmentVariable "ANDROID_NDK_HOME" "${ANDROID_NDK}"
setEtcEnvironmentVariable "ANDROID_NDK_ROOT" "${ANDROID_NDK}"
setEtcEnvironmentVariable "ANDROID_NDK_LATEST_HOME" "${ANDROID_SDK_ROOT}/ndk/${ndk_latest_full_version}"
set_etc_environment_variable "ANDROID_NDK" "${ANDROID_NDK}"
set_etc_environment_variable "ANDROID_NDK_HOME" "${ANDROID_NDK}"
set_etc_environment_variable "ANDROID_NDK_ROOT" "${ANDROID_NDK}"
set_etc_environment_variable "ANDROID_NDK_LATEST_HOME" "${ANDROID_SDK_ROOT}/ndk/${ndk_latest_full_version}"

# Prepare components for installation
extras=$(get_toolset_value '.android.extra_list[] | "extras;" + .')
Expand Down Expand Up @@ -119,6 +119,6 @@ sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" ${ANDROID_SDK_ROOT}/tools/bin/sd
# Add required permissions
chmod -R a+rwx ${ANDROID_SDK_ROOT}

reloadEtcEnvironment
reload_etc_environment

invoke_tests "Android"
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/install-azure-devops-cli.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ source $HELPER_SCRIPTS/etc-environment.sh
# AZURE_EXTENSION_DIR shell variable defines where modules are installed
# https://docs.microsoft.com/en-us/cli/azure/azure-cli-extensions-overview
export AZURE_EXTENSION_DIR=/opt/az/azcliextensions
setEtcEnvironmentVariable "AZURE_EXTENSION_DIR" "${AZURE_EXTENSION_DIR}"
set_etc_environment_variable "AZURE_EXTENSION_DIR" "${AZURE_EXTENSION_DIR}"

# install azure devops Cli extension
az extension add -n azure-devops
Expand Down
10 changes: 5 additions & 5 deletions images/ubuntu/scripts/build/install-clang.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
# Source the helpers for use with the script
source $HELPER_SCRIPTS/install.sh

function InstallClang {
install_clang() {
local version=$1

echo "Installing clang-$version..."
apt-get install -y "clang-$version" "lldb-$version" "lld-$version" "clang-format-$version" "clang-tidy-$version"
}

function SetDefaultClang {
set_default_clang() {
local version=$1

echo "Make Clang ${version} default"
Expand All @@ -30,11 +30,11 @@ default_clang_version=$(get_toolset_value '.clang.default_version')

for version in ${versions[*]}; do
if [[ $version != $default_clang_version ]]; then
InstallClang $version
install_clang $version
fi
done

InstallClang $default_clang_version
SetDefaultClang $default_clang_version
install_clang $default_clang_version
set_default_clang $default_clang_version

invoke_tests "Tools" "clang"
6 changes: 3 additions & 3 deletions images/ubuntu/scripts/build/install-container-tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ source $HELPER_SCRIPTS/os.sh
# pin podman due to https://github.com/actions/runner-images/issues/7753
# https://bugs.launchpad.net/ubuntu/+source/libpod/+bug/2024394
#
if isUbuntu20; then
if is_ubuntu20; then
install_packages=(podman buildah skopeo)
else
install_packages=(podman=3.4.4+ds1-1ubuntu1 buildah skopeo)
fi

# Packages is available in the official Ubuntu upstream starting from Ubuntu 21
if isUbuntu20; then
if is_ubuntu20; then
REPO_URL="https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable"
source /etc/os-release
sh -c "echo 'deb ${REPO_URL}/x${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
Expand All @@ -31,7 +31,7 @@ apt-get -y install ${install_packages[@]}
mkdir -p /etc/containers
printf "[registries.search]\nregistries = ['docker.io', 'quay.io']\n" | tee /etc/containers/registries.conf

if isUbuntu20; then
if is_ubuntu20; then
# Remove source repo
rm /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# Document source repo
Expand Down
2 changes: 1 addition & 1 deletion images/ubuntu/scripts/build/install-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ gpg_key="/usr/share/keyrings/docker.gpg"
repo_path="/etc/apt/sources.list.d/docker.list"

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o $gpg_key
echo "deb [arch=amd64 signed-by=$gpg_key] $repo_url $(getOSVersionLabel) stable" > $repo_path
echo "deb [arch=amd64 signed-by=$gpg_key] $repo_url $(get_os_version_label) stable" > $repo_path
apt-get update
apt-get install --no-install-recommends docker-ce docker-ce-cli containerd.io docker-buildx-plugin

Expand Down
10 changes: 5 additions & 5 deletions images/ubuntu/scripts/build/install-dotnetcore-sdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ apt-get update

for latest_package in ${LATEST_DOTNET_PACKAGES[@]}; do
echo "Determing if .NET Core ($latest_package) is installed"
if ! IsPackageInstalled $latest_package; then
if ! dpkg -S $latest_package &> /dev/null; then
echo "Could not find .NET Core ($latest_package), installing..."
apt-get install $latest_package -y
else
Expand Down Expand Up @@ -82,10 +82,10 @@ find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}'

# NuGetFallbackFolder at /usr/share/dotnet/sdk/NuGetFallbackFolder is warmed up by smoke test
# Additional FTE will just copy to ~/.dotnet/NuGet which provides no benefit on a fungible machine
setEtcEnvironmentVariable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
setEtcEnvironmentVariable DOTNET_NOLOGO 1
setEtcEnvironmentVariable DOTNET_MULTILEVEL_LOOKUP 0
prependEtcEnvironmentPath '$HOME/.dotnet/tools'
set_etc_environment_variable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
set_etc_environment_variable DOTNET_NOLOGO 1
set_etc_environment_variable DOTNET_MULTILEVEL_LOOKUP 0
prepend_etc_environment_path '$HOME/.dotnet/tools'

# install dotnet tools
for dotnet_tool in ${DOTNET_TOOLS[@]}; do
Expand Down
4 changes: 2 additions & 2 deletions images/ubuntu/scripts/build/install-firefox.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ repo_path="/etc/apt/sources.list.d/mozillateam-ubuntu-ppa-focal.list"

# Install Firefox
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x${gpg_fingerprint}" | sudo gpg --dearmor -o $gpg_key
echo "deb $repo_url $(getOSVersionLabel) main" > $repo_path
echo "deb $repo_url $(get_os_version_label) main" > $repo_path

apt-get update
apt-get install --target-release 'o=LP-PPA-mozillateam' -y firefox
Expand All @@ -44,6 +44,6 @@ tar -xzf "$driver_archive_path" -C $GECKODRIVER_DIR

chmod +x $GECKODRIVER_BIN
ln -s "$GECKODRIVER_BIN" /usr/bin/
setEtcEnvironmentVariable "GECKOWEBDRIVER" "${GECKODRIVER_DIR}"
set_etc_environment_variable "GECKOWEBDRIVER" "${GECKODRIVER_DIR}"

invoke_tests "Browsers" "Firefox"
10 changes: 2 additions & 8 deletions images/ubuntu/scripts/build/install-gcc-compilers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,15 @@
source $HELPER_SCRIPTS/os.sh
source $HELPER_SCRIPTS/install.sh

function InstallGcc {
version=$1

echo "Installing $version..."
apt-get install $version -y
}

# Install GNU C++ compiler
add-apt-repository ppa:ubuntu-toolchain-r/test -y
apt-get update -y

versions=$(get_toolset_value '.gcc.versions[]')

for version in ${versions[*]}; do
InstallGcc $version
echo "Installing $version..."
apt-get install $version -y
done

invoke_tests "Tools" "gcc"
13 changes: 3 additions & 10 deletions images/ubuntu/scripts/build/install-gfortran.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,15 @@
source $HELPER_SCRIPTS/install.sh
source $HELPER_SCRIPTS/os.sh

function InstallFortran {
version=$1

echo "Installing $version..."
apt-get install $version -y
}

# Install GNU Fortran compiler
add-apt-repository ppa:ubuntu-toolchain-r/test -y
apt-get update -y

versions=$(get_toolset_value '.gfortran.versions[]')

for version in ${versions[*]}
do
InstallFortran $version
for version in ${versions[*]}; do
echo "Installing $version..."
apt-get install $version -y
done

invoke_tests "Tools" "gfortran"
26 changes: 14 additions & 12 deletions images/ubuntu/scripts/build/install-google-chrome.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,37 @@
source $HELPER_SCRIPTS/install.sh
source $HELPER_SCRIPTS/etc-environment.sh

function GetChromiumRevision {
CHROME_REVISION=$1
get_chromium_revision() {
local chrome_revision=$1

# Take the first part of the revision variable to search not only for a specific version,
# but also for similar ones, so that we can get a previous one if the required revision is not found
CHROME_REVISION_PREFIX=${CHROME_REVISION:0:${#CHROME_REVISION}/2+1}
chrome_revision_prefix=${chrome_revision:0:${#chrome_revision}/2+1}
SEARCH_URL="https://www.googleapis.com/storage/v1/b/chromium-browser-snapshots/o?delimiter=/&prefix=Linux_x64"
# Revision can include a hash instead of a number. Need to filter it out https://github.com/actions/runner-images/issues/5256
REVISIONS_AVAILABLE=$(curl -s $SEARCH_URL/${CHROME_REVISION_PREFIX} | jq -r '.prefixes[]' | grep -E "Linux_x64\/[0-9]+\/"| cut -d "/" -f 2 | sort --version-sort)
revisions_available=$(curl -s $SEARCH_URL/${chrome_revision_prefix} | jq -r '.prefixes[]' | grep -E "Linux_x64\/[0-9]+\/"| cut -d "/" -f 2 | sort --version-sort)

# If required Chromium revision is not found in the list
# we should have to decrement the revision number until we find one.
# This is mentioned in the documentation we use for this installation:
# https://www.chromium.org/getting-involved/download-chromium
LATEST_VALID_REVISION=$(echo $REVISIONS_AVAILABLE | cut -f 1 -d " ")
for REVISION in $REVISIONS_AVAILABLE; do
if [ "$CHROME_REVISION" -lt "$REVISION" ]; then
latest_valid_revision=$(echo $revisions_available | cut -f 1 -d " ")
for revision in $revisions_available; do
if [ "$chrome_revision" -lt "$revision" ]; then
break
fi
LATEST_VALID_REVISION=$REVISION

latest_valid_revision=$revision
done
echo $LATEST_VALID_REVISION

echo $latest_valid_revision
}

# Download and install Google Chrome
CHROME_DEB_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
CHROME_DEB_PATH=$(download_with_retry "$CHROME_DEB_URL")
apt install "$CHROME_DEB_PATH" -f
setEtcEnvironmentVariable "CHROME_BIN" "/usr/bin/google-chrome"
set_etc_environment_variable "CHROME_BIN" "/usr/bin/google-chrome"

# Remove Google Chrome repo
rm -f /etc/cron.daily/google-chrome /etc/apt/sources.list.d/google-chrome.list /etc/apt/sources.list.d/google-chrome.list.save
Expand All @@ -63,11 +65,11 @@ unzip -qq "$driver_archive_path" -d /usr/local/share

chmod +x $CHROMEDRIVER_BIN
ln -s "$CHROMEDRIVER_BIN" /usr/bin/
setEtcEnvironmentVariable "CHROMEWEBDRIVER" "${CHROMEDRIVER_DIR}"
set_etc_environment_variable "CHROMEWEBDRIVER" "${CHROMEDRIVER_DIR}"

# Download and unpack Chromium
CHROME_REVISION=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].revision')
CHROMIUM_REVISION=$(GetChromiumRevision $CHROME_REVISION)
CHROMIUM_REVISION=$(get_chromium_revision $CHROME_REVISION)
CHROMIUM_URL="https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F${CHROMIUM_REVISION}%2Fchrome-linux.zip?alt=media"
CHROMIUM_DIR="/usr/local/share/chromium"
CHROMIUM_BIN="${CHROMIUM_DIR}/chrome-linux/chrome"
Expand Down
6 changes: 3 additions & 3 deletions images/ubuntu/scripts/build/install-haskell.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ export BOOTSTRAP_HASKELL_INSTALL_NO_STACK_HOOK=1
export GHCUP_INSTALL_BASE_PREFIX=/usr/local
export BOOTSTRAP_HASKELL_GHC_VERSION=0
ghcup_bin=$GHCUP_INSTALL_BASE_PREFIX/.ghcup/bin
setEtcEnvironmentVariable "BOOTSTRAP_HASKELL_NONINTERACTIVE" $BOOTSTRAP_HASKELL_NONINTERACTIVE
setEtcEnvironmentVariable "GHCUP_INSTALL_BASE_PREFIX" $GHCUP_INSTALL_BASE_PREFIX
set_etc_environment_variable "BOOTSTRAP_HASKELL_NONINTERACTIVE" $BOOTSTRAP_HASKELL_NONINTERACTIVE
set_etc_environment_variable "GHCUP_INSTALL_BASE_PREFIX" $GHCUP_INSTALL_BASE_PREFIX

# Install GHCup
curl --proto '=https' --tlsv1.2 -fsSL https://get-ghcup.haskell.org | sh > /dev/null 2>&1 || true
export PATH="$ghcup_bin:$PATH"
prependEtcEnvironmentPath $ghcup_bin
prepend_etc_environment_path $ghcup_bin

availableVersions=$(ghcup list -t ghc -r | grep -v "prerelease" | awk '{print $2}')

Expand Down
6 changes: 3 additions & 3 deletions images/ubuntu/scripts/build/install-homebrew.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ source $HELPER_SCRIPTS/install.sh
# Invoke shellenv to make brew available during runnig session
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

setEtcEnvironmentVariable HOMEBREW_NO_AUTO_UPDATE 1
setEtcEnvironmentVariable HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS 3650
set_etc_environment_variable HOMEBREW_NO_AUTO_UPDATE 1
set_etc_environment_variable HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS 3650

# Validate the installation ad hoc
echo "Validate the installation reloading /etc/environment"
reloadEtcEnvironment
reload_etc_environment

gfortran=$(brew --prefix)/bin/gfortran
# Remove gfortran symlink, not to conflict with system gfortran
Expand Down
Loading

0 comments on commit 503ae89

Please sign in to comment.