Skip to content

Commit

Permalink
Merge pull request #35 from Shopify/rwstauner/truffleruby+graalvm-gft…
Browse files Browse the repository at this point in the history
…c-dev

Add definition for truffleruby+graalvm GFTC dev build
  • Loading branch information
rwstauner committed Feb 15, 2024
2 parents e1d8194 + 26b7766 commit 44a551e
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 5 deletions.
58 changes: 58 additions & 0 deletions rubies/truffleruby+graalvm-gftc-dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
sort_release_urls () {
# With release names like /^(jdk-)?24.1.0-dev-20240207_2228$/
# strip everything up to the last dash so we can use the date as the sort field.
sed 's/\(.\{1,\}-\([0-9_]\{1,\}\)\)$/\2;\1/' | sort -rn | sed 's/.\{1,\};//'
}

find_asset_url () {
local repo="$1" filename="$2"
local releases_prefix="https://github.com/${repo}/releases"
local assets_urls assets_url path
local sort_release_urls=sort_release_urls
type -t $sort_release_urls >/dev/null || sort_release_urls=cat

# The releases page hides assets behind an "expanded_assets" url
# so we gather those, sort them according to "sort_release_urls" and store
# them in an array to loop over next.
IFS=$'\n' read -d '' -r -a assets_urls < <(http get "$releases_prefix" - | grep -oE "$releases_prefix/expanded_assets/[^\"]+" | $sort_release_urls)

# For each release look in the assets output for a download link to the specified filename.
for assets_url in "${assets_urls[@]}"; do
path="$(http get "$assets_url" - | grep -m1 -oE "/$repo/releases/download/[^/]+/$filename")"
if [[ -n "$path" ]]; then
echo "https://github.com/$path"
return 0
fi
done

echo "Failed to find $repo release containing $filename" >&2
return 1
}

truffleruby_asset_url () {
find_asset_url "graalvm/oracle-graalvm-dev-builds" "$1"
}

platform="$(uname -s)-$(uname -m)"
case $platform in
Linux-x86_64)
truffleruby_url="$(truffleruby_asset_url "truffleruby-jvm-dev-linux-amd64.tar.gz")" || return $?
install_package "truffleruby+graalvm-gftc-dev" "$truffleruby_url" truffleruby
;;
Linux-aarch64)
truffleruby_url="$(truffleruby_asset_url "truffleruby-jvm-dev-linux-aarch64.tar.gz")" || return $?
install_package "truffleruby+graalvm-gftc-dev" "$truffleruby_url" truffleruby
;;
Darwin-x86_64)
truffleruby_url="$(truffleruby_asset_url "truffleruby-jvm-dev-macos-amd64.tar.gz")" || return $?
install_package "truffleruby+graalvm-gftc-dev" "$truffleruby_url" truffleruby
;;
Darwin-arm64)
truffleruby_url="$(truffleruby_asset_url "truffleruby-jvm-dev-macos-aarch64.tar.gz")" || return $?
install_package "truffleruby+graalvm-gftc-dev" "$truffleruby_url" truffleruby
;;
*)
colorize 1 "Unsupported platform: $platform"
return 1
;;
esac
47 changes: 43 additions & 4 deletions rubies/truffleruby-gftc-dev
Original file line number Diff line number Diff line change
@@ -1,16 +1,55 @@
sort_release_urls () {
# With release names like /^(jdk-)?24.1.0-dev-20240207_2228$/
# strip everything up to the last dash so we can use the date as the sort field.
sed 's/\(.\{1,\}-\([0-9_]\{1,\}\)\)$/\2;\1/' | sort -rn | sed 's/.\{1,\};//'
}

find_asset_url () {
local repo="$1" filename="$2"
local releases_prefix="https://github.com/${repo}/releases"
local assets_urls assets_url path
local sort_release_urls=sort_release_urls
type -t $sort_release_urls >/dev/null || sort_release_urls=cat

# The releases page hides assets behind an "expanded_assets" url
# so we gather those, sort them according to "sort_release_urls" and store
# them in an array to loop over next.
IFS=$'\n' read -d '' -r -a assets_urls < <(http get "$releases_prefix" - | grep -oE "$releases_prefix/expanded_assets/[^\"]+" | $sort_release_urls)

# For each release look in the assets output for a download link to the specified filename.
for assets_url in "${assets_urls[@]}"; do
path="$(http get "$assets_url" - | grep -m1 -oE "/$repo/releases/download/[^/]+/$filename")"
if [[ -n "$path" ]]; then
echo "https://github.com/$path"
return 0
fi
done

echo "Failed to find $repo release containing $filename" >&2
return 1
}

truffleruby_asset_url () {
find_asset_url "graalvm/oracle-graalvm-dev-builds" "$1"
}

platform="$(uname -s)-$(uname -m)"
case $platform in
Linux-x86_64)
install_package "truffleruby-gftc-dev" "https://github.com/graalvm/oracle-graalvm-dev-builds/releases/latest/download/truffleruby-dev-linux-amd64.tar.gz" truffleruby
truffleruby_url="$(truffleruby_asset_url "truffleruby-dev-linux-amd64.tar.gz")" || return $?
install_package "truffleruby-gftc-dev" "$truffleruby_url" truffleruby
;;
Linux-aarch64)
install_package "truffleruby-gftc-dev" "https://github.com/graalvm/oracle-graalvm-dev-builds/releases/latest/download/truffleruby-dev-linux-aarch64.tar.gz" truffleruby
truffleruby_url="$(truffleruby_asset_url "truffleruby-dev-linux-aarch64.tar.gz")" || return $?
install_package "truffleruby-gftc-dev" "$truffleruby_url" truffleruby
;;
Darwin-x86_64)
install_package "truffleruby-gftc-dev" "https://github.com/graalvm/oracle-graalvm-dev-builds/releases/latest/download/truffleruby-dev-macos-amd64.tar.gz" truffleruby
truffleruby_url="$(truffleruby_asset_url "truffleruby-dev-macos-amd64.tar.gz")" || return $?
install_package "truffleruby-gftc-dev" "$truffleruby_url" truffleruby
;;
Darwin-arm64)
install_package "truffleruby-gftc-dev" "https://github.com/graalvm/oracle-graalvm-dev-builds/releases/latest/download/truffleruby-dev-macos-aarch64.tar.gz" truffleruby
truffleruby_url="$(truffleruby_asset_url "truffleruby-dev-macos-aarch64.tar.gz")" || return $?
install_package "truffleruby-gftc-dev" "$truffleruby_url" truffleruby
;;
*)
colorize 1 "Unsupported platform: $platform"
Expand Down
2 changes: 1 addition & 1 deletion test/shopify_ruby_definitions/test_ruby_versions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_ALL_VERSIONS
end

truffleruby_versions.each do |v|
assert_match(/\Atruffleruby(?:\+graalvm|-gftc)?(\-\d+\.\d+\.\d+|-dev)(?:\-ce)?\z/, v)
assert_match(/\Atruffleruby(?:\+graalvm)?(?:-gftc)?(\-\d+\.\d+\.\d+|-dev)(?:\-ce)?\z/, v)
end
end

Expand Down

0 comments on commit 44a551e

Please sign in to comment.