Files
godot-website/_plugins/make_download.rb
Yuri Sizov cf65bfbf62 Switch GitHub download links to the new repo
Every available release is now mirrored on GitHub, so we can
finally update the mirror list and the download archive
to point there, which offers better download speeds for
users.

Also added all release dates to the versions file.
2023-09-20 16:08:34 +02:00

152 lines
4.2 KiB
Ruby

# Generate a download URL for a particular version of the engine.
#
# See `_data/download_configs.yml` for a reference table of slugs.
HOST_TUXFAMILY = "https://downloads.tuxfamily.org/godotengine"
HOST_GITHUB = "https://github.com/godotengine/godot/releases/download"
HOST_GITHUB_BUILDS = "https://github.com/godotengine/godot-builds/releases/download"
module MakeDownloadFilter
def get_download_platforms(input, mono = false)
slugs_defaults = get_download_slugs(input, mono)
if slugs_defaults.nil?
return []
end
platforms = slugs_defaults["editor"].keys
if slugs_defaults.key?("templates")
platforms.push("templates")
end
if slugs_defaults.key?("extras")
extras = slugs_defaults["extras"].keys
for extra in extras do
platforms.push(extra)
end
end
return platforms
end
def get_download_primary(input, mono = false)
slugs_defaults = get_download_slugs(input, mono)
if slugs_defaults.nil?
return {}
end
primary = {}
platforms = slugs_defaults["editor"].keys
for platform in platforms do
platform_key = platform.split(".")[0]
unless primary.key?(platform_key)
primary[platform_key] = platform
end
end
if slugs_defaults.key?("templates")
primary["templates"] = "templates"
end
return primary
end
def make_download(input, platform, mono = false, host = "github")
version_name = input["name"]
version_flavor = input["flavor"]
version_bits = version_name.split(".")
version_majmin = "#{version_bits[0]}.#{version_bits[1]}"
slugs_defaults = get_download_slugs(input, mono)
if slugs_defaults.nil?
return "#"
end
mono_slug = ""
if mono
mono_slug = "/mono"
end
download_slug = ""
if platform == "templates" and slugs_defaults.key?(platform)
download_slug = slugs_defaults[platform]
elsif slugs_defaults["editor"].key?(platform)
download_slug = slugs_defaults["editor"][platform]
elsif slugs_defaults.key?("extras") and slugs_defaults["extras"].key?(platform)
download_slug = slugs_defaults["extras"][platform]
else
# Unknown platform key, abort.
return "#"
end
download_file = ""
if platform == "aar_library"
download_file = "godot-lib.#{version_name}.#{version_flavor}.#{download_slug}"
else
# Format was slightly different up until 2.1.
if version_bits[0] == "1" or (version_bits[0] == "2" and version_bits[1] == "0")
download_file = "Godot_v#{version_name}_#{version_flavor}_#{download_slug}"
else
download_file = "Godot_v#{version_name}-#{version_flavor}_#{download_slug}"
end
end
if host == "github"
return "#{HOST_GITHUB}/#{version_name}-#{version_flavor}/#{download_file}"
elsif host == "github_builds"
return "#{HOST_GITHUB_BUILDS}/#{version_name}-#{version_flavor}/#{download_file}"
elsif host == "tuxfamily"
if version_flavor == "stable"
return "#{HOST_TUXFAMILY}/#{version_name}#{mono_slug}/#{download_file}"
else
return "#{HOST_TUXFAMILY}/#{version_name}/#{version_flavor}#{mono_slug}/#{download_file}"
end
end
end
def make_release_version(input, release)
if release.nil?
return input
end
new_version = input.dup
new_version["flavor"] = release["name"]
new_version["release_date"] = release["release_date"]
new_version["release_notes"] = release["release_notes"]
return new_version
end
private
def get_download_slugs(input, mono = false)
version_major = input["name"].split(".")[0].to_i
# Access the site data for the slug reference table.
site_data = @context.registers[:site].data
download_configs = site_data["download_configs"]
# If there is no config for this major version, abort.
if not download_configs["defaults"].key?(version_major)
return nil
end
slugs_defaults = download_configs["defaults"][version_major]
if mono
# Requesting mono, but there is no config for mono, abort.
if not slugs_defaults.key?("mono")
return nil
end
slugs_defaults = slugs_defaults["mono"]
end
return slugs_defaults
end
end
Liquid::Template.register_filter(MakeDownloadFilter)