Skip to content

Commit 07e07de

Browse files
committed
feat(ruby): restore RVM GPG retry/keyserver logic and update test base images per review
1 parent 0ed4087 commit 07e07de

2 files changed

Lines changed: 68 additions & 11 deletions

File tree

src/ruby/install.sh

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ RUBIES_DIR="/usr/local/rubies"
2525
RUBY_GROUP="ruby"
2626
RBENV_ROOT="/usr/local/share/rbenv"
2727
RVM_PATH="/usr/local/rvm"
28+
RVM_GPG_KEYS="409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB"
2829

2930
set -e
3031

@@ -86,6 +87,69 @@ apply_group_perms() {
8687
find "${dir}" -type d -exec chmod g+s {} + 2>/dev/null || true
8788
}
8889

90+
get_gpg_key_servers() {
91+
declare -A keyservers_curl_map=(
92+
["hkp://keyserver.ubuntu.com"]="http://keyserver.ubuntu.com:11371"
93+
["hkp://keyserver.ubuntu.com:80"]="http://keyserver.ubuntu.com"
94+
["hkps://keys.openpgp.org"]="https://keys.openpgp.org"
95+
["hkp://keyserver.pgp.com"]="http://keyserver.pgp.com:11371"
96+
)
97+
98+
local curl_args=""
99+
local keyserver_reachable=false
100+
101+
if [ -n "${KEYSERVER_PROXY:-}" ]; then
102+
curl_args="--proxy ${KEYSERVER_PROXY}"
103+
fi
104+
105+
for keyserver in "${!keyservers_curl_map[@]}"; do
106+
local keyserver_curl_url="${keyservers_curl_map[${keyserver}]}"
107+
if curl -s ${curl_args} --max-time 5 "${keyserver_curl_url}" > /dev/null; then
108+
echo "keyserver ${keyserver}"
109+
keyserver_reachable=true
110+
else
111+
echo "(*) Keyserver ${keyserver} is not reachable." >&2
112+
fi
113+
done
114+
115+
if ! $keyserver_reachable; then
116+
echo "(!) No keyserver is reachable." >&2
117+
exit 1
118+
fi
119+
}
120+
121+
receive_gpg_keys() {
122+
local keys=${!1}
123+
local keyring_args=""
124+
if [ -n "${2:-}" ]; then
125+
keyring_args="--no-default-keyring --keyring \"$2\""
126+
fi
127+
128+
export GNUPGHOME="/tmp/tmp-gnupg"
129+
mkdir -p "${GNUPGHOME}"
130+
chmod 700 "${GNUPGHOME}"
131+
echo -e "disable-ipv6\n$(get_gpg_key_servers)" > "${GNUPGHOME}/dirmngr.conf"
132+
133+
local retry_count=0
134+
local gpg_ok="false"
135+
set +e
136+
until [ "${gpg_ok}" = "true" ] || [ "${retry_count}" -eq "5" ]; do
137+
echo "(*) Downloading GPG key..."
138+
# shellcheck disable=SC2086
139+
( echo "${keys}" | xargs -n 1 gpg -q ${keyring_args} --recv-keys) 2>&1 && gpg_ok="true"
140+
if [ "${gpg_ok}" != "true" ]; then
141+
echo "(*) Failed getting key, retrying in 10s..."
142+
(( retry_count++ ))
143+
sleep 10s
144+
fi
145+
done
146+
set -e
147+
if [ "${gpg_ok}" = "false" ]; then
148+
echo "(!) Failed to get gpg key."
149+
exit 1
150+
fi
151+
}
152+
89153
default_ruby_version() {
90154
[ -L "${RUBIES_DIR}/current" ] && basename "$(readlink "${RUBIES_DIR}/current")"
91155
}
@@ -267,14 +331,7 @@ RBENV_PROFILE
267331
install_rvm() {
268332
echo "Installing rvm..."
269333

270-
# Best-effort GPG key import; some networks block keyservers.
271-
gpg --keyserver hkp://keyserver.ubuntu.com \
272-
--recv-keys \
273-
409B6B1796C275462A1703113804BB82D39DC0E3 \
274-
7D2BAF1CF37B13E2069D6956105BD0E739499BDB 2>/dev/null \
275-
|| curl -sSL https://rvm.io/mpapis.asc | gpg --import - 2>/dev/null \
276-
|| curl -sSL https://rvm.io/pkuczynski.asc | gpg --import - 2>/dev/null \
277-
|| true
334+
receive_gpg_keys RVM_GPG_KEYS
278335

279336
curl -sSL https://get.rvm.io | bash -s stable --path "${RVM_PATH}"
280337

test/ruby/scenarios.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@
3939
}
4040
},
4141
"ruby_debian": {
42-
"image": "mcr.microsoft.com/devcontainers/base:bullseye",
42+
"image": "mcr.microsoft.com/devcontainers/base:bookworm",
4343
"features": {
4444
"ruby": {}
4545
}
4646
},
4747
"ruby_rbenv": {
48-
"image": "ubuntu:noble",
48+
"image": "mcr.microsoft.com/devcontainers/base:noble",
4949
"features": {
5050
"ruby": {
5151
"version": "3.4.2",
@@ -54,7 +54,7 @@
5454
}
5555
},
5656
"ruby_rvm": {
57-
"image": "mcr.microsoft.com/devcontainers/base:bullseye",
57+
"image": "mcr.microsoft.com/devcontainers/base:bookworm",
5858
"features": {
5959
"ruby": {
6060
"version": "3.4.2",

0 commit comments

Comments
 (0)