Skip to content

Commit 45d7084

Browse files
authored
copilot review inspired
1 parent 415eba3 commit 45d7084

2 files changed

Lines changed: 79 additions & 38 deletions

File tree

.devcontainer/devcontainer.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
22
"name": "choosealicense.com",
3+
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
4+
"remoteEnv": {
5+
"PATH": "/home/vscode/.rbenv/shims:/home/vscode/.rbenv/bin:${containerEnv:PATH}"
6+
},
37
"postCreateCommand": "bash .devcontainer/post-create.sh"
48
}

.devcontainer/post-create.sh

Lines changed: 75 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,97 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
if ! command -v curl >/dev/null 2>&1; then
5-
echo "curl is required to fetch GitHub Pages versions metadata"
6-
exit 1
7-
fi
4+
for cmd in curl git sed; do
5+
if ! command -v "${cmd}" >/dev/null 2>&1; then
6+
echo "${cmd} is required for .devcontainer/post-create.sh"
7+
exit 1
8+
fi
9+
done
810

9-
if ! command -v ruby >/dev/null 2>&1; then
10-
echo "ruby is required to parse GitHub Pages versions metadata"
11-
exit 1
11+
if command -v apt-get >/dev/null 2>&1; then
12+
packages=(
13+
build-essential
14+
cmake
15+
pkg-config
16+
libffi-dev
17+
libyaml-dev
18+
libssl-dev
19+
zlib1g-dev
20+
libreadline-dev
21+
libgdbm-dev
22+
libncurses-dev
23+
libssh2-1-dev
24+
)
25+
26+
missing_packages=()
27+
for package in "${packages[@]}"; do
28+
if ! dpkg-query -W -f='${Status}' "${package}" 2>/dev/null | grep -q 'install ok installed'; then
29+
missing_packages+=("${package}")
30+
fi
31+
done
32+
33+
if [[ ${#missing_packages[@]} -gt 0 ]]; then
34+
echo "Installing Ruby build dependencies: ${missing_packages[*]}"
35+
if command -v sudo >/dev/null 2>&1; then
36+
sudo apt-get update
37+
sudo apt-get install -y "${missing_packages[@]}"
38+
else
39+
apt-get update
40+
apt-get install -y "${missing_packages[@]}"
41+
fi
42+
fi
1243
fi
1344

14-
pages_ruby_version="$({
15-
curl -fsSL https://pages.github.com/versions.json
16-
} | ruby -rjson -e 'print JSON.parse(STDIN.read).fetch("ruby")')"
45+
echo "Initializing/updating git submodules"
46+
git submodule update --init --recursive
1747

18-
if [[ -z "${pages_ruby_version}" ]]; then
19-
echo "Could not determine Ruby version from https://pages.github.com/versions.json"
48+
versions_json="$(curl -fsSL https://pages.github.com/versions.json)" || {
49+
echo "Failed to fetch https://pages.github.com/versions.json"
2050
exit 1
21-
fi
51+
}
52+
53+
pages_ruby_version="$(
54+
printf '%s' "${versions_json}" |
55+
sed -n 's/.*"ruby"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' |
56+
head -n 1
57+
)"
2258

2359
echo "GitHub Pages Ruby version: ${pages_ruby_version}"
2460

25-
if ! command -v git >/dev/null 2>&1; then
26-
echo "git is required to initialize submodules"
61+
if [[ -z "${pages_ruby_version}" ]]; then
62+
echo "Could not determine Ruby version from https://pages.github.com/versions.json"
2763
exit 1
2864
fi
2965

30-
echo "Initializing/updating git submodules"
31-
git submodule update --init --recursive
32-
33-
# RVM scripts can reference internal variables before they are initialized,
34-
# which fails under `set -u` (for example: `_system_name: unbound variable`).
35-
# Temporarily disable nounset while sourcing and invoking RVM.
36-
nounset_was_set=0
37-
if [[ $- == *u* ]]; then
38-
nounset_was_set=1
39-
set +u
66+
if [[ ! -d "$HOME/.rbenv" ]]; then
67+
git clone --depth 1 https://github.com/rbenv/rbenv.git "$HOME/.rbenv"
4068
fi
4169

42-
if [[ -s /usr/local/rvm/scripts/rvm ]]; then
43-
source /usr/local/rvm/scripts/rvm
44-
elif [[ -s "$HOME/.rvm/scripts/rvm" ]]; then
45-
source "$HOME/.rvm/scripts/rvm"
46-
else
47-
echo "RVM was not found; unable to auto-install Ruby ${pages_ruby_version}"
48-
exit 1
70+
if [[ ! -d "$HOME/.rbenv/plugins/ruby-build" ]]; then
71+
mkdir -p "$HOME/.rbenv/plugins"
72+
git clone --depth 1 https://github.com/rbenv/ruby-build.git "$HOME/.rbenv/plugins/ruby-build"
4973
fi
5074

51-
rvm install "${pages_ruby_version}" --quiet-curl
52-
rvm use "${pages_ruby_version}"
53-
rvm alias create default "${pages_ruby_version}"
75+
export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
76+
eval "$(rbenv init - bash)"
5477

55-
if [[ "${nounset_was_set}" -eq 1 ]]; then
56-
set -u
57-
fi
78+
rbenv install -s "${pages_ruby_version}"
79+
rbenv global "${pages_ruby_version}"
80+
rbenv rehash
81+
82+
for profile in "$HOME/.bashrc" "$HOME/.zshrc"; do
83+
if [[ -f "$profile" ]] && ! grep -q 'rbenv init - bash' "$profile"; then
84+
{
85+
echo
86+
echo '# Load rbenv'
87+
echo 'export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"'
88+
echo 'eval "$(rbenv init - bash)"'
89+
} >> "$profile"
90+
fi
91+
done
5892

5993
gem install bundler --no-document
94+
rbenv rehash
95+
mkdir -p "$HOME/.local/bin"
96+
ln -sf "$HOME/.rbenv/shims/bundle" "$HOME/.local/bin/bundle"
6097
bundle install

0 commit comments

Comments
 (0)