From 69841fad7a3e0a33c692fb07060ad53a2e675771 Mon Sep 17 00:00:00 2001 From: Yuri Sizov Date: Mon, 19 Jun 2023 14:41:47 +0200 Subject: [PATCH] Generate the mirrorlist based on static version data --- Gemfile.lock | 5 +- README.md | 19 ++ _config.yml | 55 +--- _data/download_configs.yml | 17 + _data/mirrorlist_configs.yml | 48 +++ _data/versions.yml | 536 +++++++++++++++++++++++++++++++ _layouts/mirrorlist.json | 10 + _plugins/make_download.rb | 5 +- _plugins/mirrorlist_generator.rb | 122 +++++++ build-and-watch.sh | 0 10 files changed, 767 insertions(+), 50 deletions(-) create mode 100644 _data/mirrorlist_configs.yml create mode 100644 _layouts/mirrorlist.json create mode 100644 _plugins/mirrorlist_generator.rb mode change 100644 => 100755 build-and-watch.sh diff --git a/Gemfile.lock b/Gemfile.lock index 996326375e..6d42a267a0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,7 +10,6 @@ GEM http_parser.rb (~> 0) eventmachine (1.2.7) ffi (1.15.5) - ffi (1.15.5-x64-mingw-ucrt) ffi (1.15.5-x64-unknown) forwardable-extended (2.6.0) http_parser.rb (0.8.0) @@ -68,7 +67,7 @@ GEM PLATFORMS arm64-darwin-22 - x64-mingw-ucrt + x64-unknown x64-unknown x86_64-linux @@ -81,4 +80,4 @@ DEPENDENCIES webrick (~> 1.7) BUNDLED WITH - 2.4.2 + 2.4.13 diff --git a/README.md b/README.md index 5cbacab109..077886a286 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,25 @@ There are two additional files providing data for download pages and links: `_da They define descriptions, tags, and filename slugs for all downloadable builds, as well as order for downloads on some pages. +### Adding a mirrorlist host + +If a new host needs to be supported by the mirrorlist, it needs to be added in a few places. For the data side of +things you need to update `_data/mirrorlist_configs.yml` and add another record for the major-minor version code. + +``` + - name: "4.1" + stable: [ "github", "tuxfamily" ] + preview: [ "github_builder", "tuxfamily" ] +``` + +The `stable` key refers to hosts available for the stable release of that version, while the `preview` key refers +to all pre-releases and dev snapshots, which typically share all their characteristics. If in future there is a +need for finer control, some overrides system needs to be implemented. + +For the logic side of things the new host needs to be supported by the `_plugins/make_download.rb` script. Refer +to how other hosts are handled in that file and do the necessary adjustments. We assume that the final filenames +are standard across all hosts, so `_data/download_configs.yml` is respected. + ## Resources - Join the discussion on Godot Contributors Chat in the [#website](https://chat.godotengine.org/channel/website) diff --git a/_config.yml b/_config.yml index 6678445fe1..148a6eb2e0 100644 --- a/_config.yml +++ b/_config.yml @@ -32,31 +32,30 @@ future: true defaults: - scope: - path: "" type: "article" values: layout: "article" og_type: "article" - scope: - path: "" type: "event" values: layout: "event" - scope: - path: "" type: "showcase" values: layout: "showcase-item" - scope: - path: "" type: "download" values: layout: "download" - scope: - path: "" type: "download_3" values: layout: "download-3" + - scope: + type: "mirrorlist" + values: + layout: "mirrorlist" # Plugins plugins: @@ -71,56 +70,20 @@ default_lang: "en" # Pagination (used by the blog) pagination: - # Site-wide kill switch, disabled here it doesn't run at all enabled: true - - # Set to 'true' to enable pagination debugging. This can be enabled in the site config or only for individual pagination pages debug: false - # The default document collection to paginate if nothing is specified ('posts' is default) collection: "article" - - # How many objects per paginated page, used to be `paginate` (default: 0, means all) per_page: 24 - - # The permalink structure for the paginated pages (this can be any level deep) - permalink: "/:num/" # Pages are index.html inside this folder (default) - #permalink: '/page/:num.html' # Pages are simple html files - #permalink: '/page/:num' # Pages are html files, linked jekyll extensionless permalink style. - - # Optional the title format for the paginated pages (supports :title for original page title, :num for pagination page number, :max for total number of pages) - title: ":title - Page :num" - - # Limit how many pagenated pages to create (default: 0, means all) - limit: 0 - - # Optional, defines the field that the posts should be sorted on (omit to default to 'date') sort_field: "date" - - # Optional, sorts the posts in reverse order (omit to default decending or sort_reverse: true) sort_reverse: true - - # Optional, the default category to use, omit or just leave this as 'posts' to get a backwards-compatible behavior (all posts) - category: "posts" - - # Optional, the default tag to use, omit to disable - tag: "" - - # Optional, the default locale to use, omit to disable (depends on a field 'locale' to be specified in the posts, - # in reality this can be any value, suggested are the Microsoft locale-codes (e.g. en_US, en_GB) or simply the ISO-639 language code ) - locale: "" - - # Optional,omit or set both before and after to zero to disable. # Controls how the pagination trail for the paginated pages look like. trail: before: 2 after: 2 - # Optional, the default file extension for generated pages (e.g html, json, xml). - # Internally this is set to html by default - extension: html - - # Optional, the default name of the index file for generated pages (e.g. 'index.html') - # Without file extension - indexpage: "index" -############################################################ + title: ":title - Page :num" + permalink: "/:num/" + category: "posts" + tag: "" + locale: "" diff --git a/_data/download_configs.yml b/_data/download_configs.yml index 1fca931508..99cb704378 100644 --- a/_data/download_configs.yml +++ b/_data/download_configs.yml @@ -50,4 +50,21 @@ defaults: aar_library: mono.release.aar 2: + templates: export_templates.tpz + editor: + linux.64: x11.64.zip + linux.32: x11.32.zip + macos.universal: osx.fat.zip + windows.64: win64.exe.zip + windows.32: win32.exe.zip + linux_server.64: linux_server.64.zip + 1: + templates: export_templates.tpz + editor: + linux.64: x11.64.zip + linux.32: x11.32.zip + macos.universal: osx32.zip + windows.64: win64.exe.zip + windows.32: win32.exe.zip + linux_server.64: linux_server.64.zip diff --git a/_data/mirrorlist_configs.yml b/_data/mirrorlist_configs.yml new file mode 100644 index 0000000000..c71e8fedd1 --- /dev/null +++ b/_data/mirrorlist_configs.yml @@ -0,0 +1,48 @@ +hosts: + - name: "github" + title: "Official GitHub Releases mirror" + - name: "github_builder" + title: "Official GitHub Releases mirror" + - name: "tuxfamily" + title: "Official TuxFamily mirror" + +defaults: + - name: "4.1" + stable: [ "github", "tuxfamily" ] + preview: [ "github_builder", "tuxfamily" ] + - name: "4.0" + stable: [ "github", "tuxfamily" ] + preview: [ "github_builder", "tuxfamily" ] + - name: "3.6" + stable: [ "github", "tuxfamily" ] + preview: [ "github_builder", "tuxfamily" ] + - name: "3.5" + stable: [ "github", "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "3.4" + stable: [ "github", "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "3.3" + stable: [ "github", "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "3.2" + stable: [ "github", "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "3.1" + stable: [ "github", "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "3.0" + stable: [ "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "2.1" + stable: [ "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "2.0" + stable: [ "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "1.1" + stable: [ "tuxfamily" ] + preview: [ "tuxfamily" ] + - name: "1.0" + stable: [ "tuxfamily" ] + preview: [ "tuxfamily" ] diff --git a/_data/versions.yml b/_data/versions.yml index ece416c4bd..089f3113a0 100644 --- a/_data/versions.yml +++ b/_data/versions.yml @@ -2,63 +2,294 @@ flavor: "beta2" release_date: "14 June 2023" release_notes: "/article/dev-snapshot-godot-4-1-beta-2/" + releases: + - name: "beta1" + release_date: "8 June 2023" + release_notes: "/article/dev-snapshot-godot-4-1-beta-1/" + - name: "dev4" + release_date: "1 June 2023" + release_notes: "/article/dev-snapshot-godot-4-1-dev-4/" + - name: "dev3" + release_date: "25 May 2023" + release_notes: "/article/dev-snapshot-godot-4-1-dev-3/" + - name: "dev2" + release_date: "09 May 2023" + release_notes: "/article/dev-snapshot-godot-4-1-dev-2/" + - name: "dev1" + release_date: "21 April 2023" + release_notes: "/article/dev-snapshot-godot-4-1-dev-1/" - name: "4.0.3" flavor: "stable" release_date: "19 May 2023" release_notes: "/article/maintenance-release-godot-4-0-3/" featured: "4" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-3-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-3-rc-1/" - name: "4.0.2" flavor: "stable" release_date: "4 April 2023" release_notes: "/article/maintenance-release-godot-4-0-2/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-2-rc-1/" - name: "4.0.1" flavor: "stable" release_date: "20 March 2023" release_notes: "/article/maintenance-release-godot-4-0-1/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-1-rc-1/" - name: "4.0" flavor: "stable" release_date: "1 March 2023" release_notes: "/article/godot-4-0-sets-sail/" + releases: + - name: "rc6" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-6/" + - name: "rc5" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-5/" + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-4-0-rc-1/" + - name: "beta17" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-17/" + - name: "beta16" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-16/" + - name: "beta15" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-15/" + - name: "beta14" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-14/" + - name: "beta13" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-13/" + - name: "beta12" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-12/" + - name: "beta11" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-11/" + - name: "beta10" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-10/" + - name: "beta9" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-9/" + - name: "beta8" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-8/" + - name: "beta7" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-7/" + - name: "beta6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-6/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-beta-1/" + - name: "alpha17" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-17/" + - name: "alpha16" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-16/" + - name: "alpha15" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-15/" + - name: "alpha14" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-14/" + - name: "alpha13" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-13/" + - name: "alpha12" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-12/" + - name: "alpha11" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-11/" + - name: "alpha10" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-10/" + - name: "alpha9" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-9/" + - name: "alpha8" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-8/" + - name: "alpha7" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-7/" + - name: "alpha6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-6/" + - name: "alpha5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-5/" + - name: "alpha4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-4/" + - name: "alpha3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-3/" + - name: "alpha2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-2/" + - name: "alpha1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-4-0-alpha-1/" - name: "3.6" flavor: "beta2" release_date: "25 May 2023" release_notes: "/article/dev-snapshot-godot-3-6-beta-2/" + releases: + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-6-beta-1/" - name: "3.5.2" flavor: "stable" release_date: "7 March 2023" release_notes: "/article/maintenance-release-godot-3-5-2/" featured: "3" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-2-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-2-rc-1/" - name: "3.5.1" flavor: "stable" release_date: "28 September 2022" release_notes: "/article/maintenance-release-godot-3-5-1/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-1-rc-1/" - name: "3.5" flavor: "stable" release_date: "" release_notes: "/article/godot-3-5-cant-stop-wont-stop/" + releases: + - name: "rc8" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-8/" + - name: "rc7" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-7/" + - name: "rc6" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-6/" + - name: "rc5" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-5/" + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-3-5-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-5-rc-1/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-5-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-5-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-5-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-5-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-5-beta-1/" - name: "3.4.5" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-4-5/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-5-rc-1/" - name: "3.4.4" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-4-4/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-4-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-4-rc-1/" - name: "3.4.3" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-4-3/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-3-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-3-rc-1/" - name: "3.4.2" flavor: "stable" @@ -69,21 +300,70 @@ flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-4-1/" + releases: + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-1-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-1-rc-1/" - name: "3.4" flavor: "stable" release_date: "" release_notes: "/article/godot-3-4-is-released/" + releases: + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-4-rc-1/" + - name: "beta6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-6/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-4-beta-2/" - name: "3.3.4" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-3-4/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-4-rc-1/" - name: "3.3.3" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-3-3/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-3-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-3-rc-1/" - name: "3.3.2" flavor: "stable" @@ -94,46 +374,262 @@ flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-3-1/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-1-rc-1/" - name: "3.3" flavor: "stable" release_date: "" release_notes: "/article/godot-3-3-has-arrived/" + releases: + - name: "rc9" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-rc-9/" + - name: "rc8" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-rc-8/" + - name: "rc7" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-rc-7/" + - name: "rc6" + release_date: "" + release_notes: "/article/release-candidate-godot-3-3-rc-6/" + - name: "rc5" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-4-rc-5/" + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-4-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-4-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-4-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-4-rc-1/" + - name: "beta6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-6/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-4-beta-1/" - name: "3.2.3" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-2-3/" + releases: + - name: "rc6" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-3-rc-6/" + - name: "rc5" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-3-rc-5/" + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-3-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-3-2-3-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-3-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-3-rc-1/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-3-beta-1/" - name: "3.2.2" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-2-2/" + releases: + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-2-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-2-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-2-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-2-rc-1/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-2-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-2-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-2-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-2-beta-1/" - name: "3.2.1" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-2-1/" + releases: + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-1-rc-1/" - name: "3.2" flavor: "stable" release_date: "" release_notes: "/article/here-comes-godot-3-2/" + releases: + - name: "rc4" + release_date: "" + release_notes: "/article/release-candidate-3-2-rc-4/" + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-2-rc-1/" + - name: "beta6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-6/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-beta-1/" + - name: "alpha3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-alpha-3/" + - name: "alpha2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-alpha-2/" + - name: "alpha1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-2-alpha-1/" + - name: "alpha0-unofficial" + release_date: "" + release_notes: "" - name: "3.1.2" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-1-2/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-1-2-rc-1/" - name: "3.1.1" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-1-1/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-1-1-rc-1/" - name: "3.1" flavor: "stable" release_date: "" release_notes: "/article/godot-3-1-released/" + releases: + - name: "rc3" + release_date: "" + release_notes: "/article/release-candidate-godot-3-1-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/release-candidate-godot-3-1-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/release-candidate-godot-3-1-rc-1/" + - name: "beta11" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-11/" + - name: "beta10" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-10/" + - name: "beta9" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-9/" + - name: "beta8" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-8/" + - name: "beta7" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-7/" + - name: "beta6" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-6/" + - name: "beta5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-5/" + - name: "beta4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-4/" + - name: "beta3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-3/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-beta-1/" + - name: "alpha5" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-alpha-5/" + - name: "alpha4" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-alpha-4/" + - name: "alpha3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-alpha-3/" + - name: "alpha2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-alpha-2/" + - name: "alpha1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-1-alpha-1/" - name: "3.0.6" flavor: "stable" @@ -154,6 +650,16 @@ flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-0-3/" + releases: + - name: "rc3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-3-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-3-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-3-rc-1/" - name: "3.0.2" flavor: "stable" @@ -164,16 +670,46 @@ flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-3-0-1/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-1-rc1/" - name: "3.0" flavor: "stable" release_date: "" release_notes: "/article/godot-3-0-released/" + releases: + - name: "rc3" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-rc-3/" + - name: "rc2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-rc-2/" + - name: "rc1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-rc-1/" + - name: "beta2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-beta-2/" + - name: "beta1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-beta-1/" + - name: "alpha2" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-alpha-2/" + - name: "alpha1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-3-0-alpha-1/" - name: "2.1.6" flavor: "stable" release_date: "" release_notes: "/article/maintenance-release-godot-2-1-6/" + releases: + - name: "rc1" + release_date: "" + release_notes: "/article/dev-snapshot-godot-2-1-6-rc-1/" - name: "2.1.5" flavor: "stable" diff --git a/_layouts/mirrorlist.json b/_layouts/mirrorlist.json new file mode 100644 index 0000000000..eacfe0a2f0 --- /dev/null +++ b/_layouts/mirrorlist.json @@ -0,0 +1,10 @@ +{ + "mirrors": [ + {% for mirror in page.version_mirrors %} + { + "name": "{{ mirror.name }}", + "url": "{{ mirror.url }}" + }{% unless forloop.last %},{% endunless %} + {% endfor %} + ] +} diff --git a/_plugins/make_download.rb b/_plugins/make_download.rb index 48d3aa7c71..a94130e063 100644 --- a/_plugins/make_download.rb +++ b/_plugins/make_download.rb @@ -4,6 +4,7 @@ HOST_TUXFAMILY = "https://downloads.tuxfamily.org/godotengine" HOST_GITHUB = "https://github.com/godotengine/godot/releases/download" +HOST_GITHUB_BUILDER = "https://github.com/GodotBuilder/godot-builds/releases/download" module MakeDownloadFilter def get_download_platforms(input, mono = false) @@ -87,9 +88,11 @@ module MakeDownloadFilter if host == "github" return "#{HOST_GITHUB}/#{version_name}-#{version_flavor}/#{download_file}" + elsif host == "github_builder" + return "#{HOST_GITHUB_BUILDER}/#{version_name}-prerelease-templates/#{download_file}" elsif host == "tuxfamily" if version_flavor == "stable" - return "#{HOST_TUXFAMILY}/#{version_name}/#{mono_slug}/#{download_file}" + return "#{HOST_TUXFAMILY}/#{version_name}#{mono_slug}/#{download_file}" else return "#{HOST_TUXFAMILY}/#{version_name}/#{version_flavor}#{mono_slug}/#{download_file}" end diff --git a/_plugins/mirrorlist_generator.rb b/_plugins/mirrorlist_generator.rb new file mode 100644 index 0000000000..40612e5298 --- /dev/null +++ b/_plugins/mirrorlist_generator.rb @@ -0,0 +1,122 @@ +module MirrorlistGeneratorPlugin + class MirrorlistGenerator < Jekyll::Generator + safe true + + def generate(site) + site.data["versions"].each do |version| + + # Generate files for the current main flavor (stable or latest pre-release). + site.pages << MirrorlistPage.new(site, version, false) + site.pages << MirrorlistPage.new(site, version, true) + + # Iterate through previous releases and generate files for them as well. + if version.key?("releases") + version["releases"].each do |release| + prerelease = { + 'name' => version["name"], + 'flavor' => release["name"] + } + site.pages << MirrorlistPage.new(site, prerelease, false) + site.pages << MirrorlistPage.new(site, prerelease, true) + end + end + end + end + end + + class MirrorlistPage < Jekyll::Page + def initialize(site, version, mono) + # Configure static information and path. + @site = site + @base = site.source + @dir = 'mirrorlist' + + # Generate the version identificator. + version_name = version["name"] + version_flavor = version["flavor"] + + version_id = "#{version_name}.#{version_flavor}" + if version_name == "3.0" # Hack for the only version before the naming scheme has been changed. + version_id = "#{version_name}-#{version_flavor}" + end + if mono + version_id = "#{version_id}.mono" + end + + version_bits = version_name.split(".") + version_majmin = "#{version_bits[0]}.#{version_bits[1]}" + + # Configure the permalink information. + @basename = version_id + @ext = '.json' + @name = "#{version_id}.json" + + # Generate the list of mirrors. + mirrors = [] + + mirrorlist_configs = site.data["mirrorlist_configs"] + mirrorlist_hosts = mirrorlist_configs["hosts"] + + version_defaults = mirrorlist_configs["defaults"].find { |config| config["name"] == version_majmin } + + unless version_defaults.nil? + mirror_hosts = version_defaults["stable"] + unless version_flavor == "stable" + mirror_hosts = version_defaults["preview"] + end + + mirror_hosts.each do |host_name| + mirror_host = mirrorlist_hosts.find { |host| host["name"] == host_name } + mirror_url = make_download(version, mono, host_name) + + unless mirror_url == "#" + mirror = { 'name' => mirror_host["title"], 'url' => mirror_url } + mirrors.push(mirror) + end + end + else + mirror_host = mirrorlist_hosts.find { |host| host["name"] == "tuxfamily" } + mirror_url = make_download(version, mono, "tuxfamily") + + unless mirror_url == "#" + mirror = { 'name' => mirror_host["title"], 'url' => mirror_url } + mirrors.push(mirror) + end + end + + # Initialize data hash to pass objects to the template. + @data = { + 'version_mirrors' => mirrors + } + + # Defaults can be configured via the `_config.yml`, same as with normal + # collections. + data.default_proc = proc do |_, key| + site.frontmatter_defaults.find(relative_path, :mirrorlist, key) + end + end + + # This is a hack to generate the URL from code. I don't know a better way to hook into Liquid and use its + # registered filters. But it's short and sweet enough for now (or for... ever). + def make_download(version, mono, host) + template = Liquid::Template.parse('{{ version | make_download: "templates", mono, host }}') + + assigns = { + 'version' => version, + 'mono' => mono, + 'host' => host + } + # We need to pass the site reference to registers because make_downloads relies on this context being + # present. + return template.render(assigns, registers: { site: @site }) + end + + def url_placeholders + { + :path => @dir, + :basename => basename, + :output_ext => output_ext, + } + end + end + end diff --git a/build-and-watch.sh b/build-and-watch.sh old mode 100644 new mode 100755