godotengine / godot-website

The code for the official Godot Engine website. A static site built using Jekyll.
https://godotengine.org
MIT License
280 stars 138 forks source link
godot godot-engine jekyll website

Godot Engine Website

Welcome to the source code for the Godot Engine website. This is a static website, generated offline using Jekyll.

Contributing

Contributions are always welcome! Godot's website is open source, just like Godot Engine.

However, when contributing to the website, it is important to keep in mind that it acts as a public face of the Godot organization and community. Thus, substantial changes must be discussed ahead of time. You don't necessarily need to open a formal Godot improvement proposal like you do with engine features, but starting an issue on this repository or joining the discussion on the Godot Contributors Chat is a good idea.

Browser support

When working on new features, keep in mind this website only supports evergreen browsers:

Internet Explorer isn't supported.

Development

Building

To build the website locally, follow these steps:

  1. Install Jekyll prerequisites.
    • Make sure bundle is available from the command line.
  2. Install Minify.
    • Make sure minify is available from the command line.
  3. Clone this repository.
  4. Install the necessary dependencies: bundle install.
  5. Build the site: bundle exec jekyll build.
    • Append --config _config.yml,_config.development.yml to use the development config with your build.

For simplicity, these two commands are also available as a build.sh script in this repository.

Alternatively, you can also use the official Docker container for Jekyll. This container is designed to be run once to perform the build, so you don't need to compose and permanently store it in your Docker setup. If you're on Linux, execute the following command:

docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh

On Windows (from CMD.exe):

docker run --rm --volume="%CD%:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh

Building may take several minutes to finish.

Local server

As this is a static website, it can be served locally using any server stack you want.

After following either one of these steps the site will be available at http://localhost:4000.

Deployment

The project is built automatically by GitHub Actions whenever the master branch receives a new commit. The master branch itself should not be deployed, as it only contains the source files. The built version of the website is available as the published branch instead.

Note that this is not relevant for local development. Locally you would build the website in place and then serve the _site folder. See the detailed instructions above.

Project structure

Content data and metadata

The following folders contain data files, used for generating more dynamic parts of the website, such as the blog, the showcase, and the downloads page. These pages are written in Markdown and contain a metadata header used by the generator. Markdown files form Jekyll collections with the same name as their containing folder. To create a new Markdown document, you can start by copying an existing one and then change its content.

Some information is also stored in YAML files, acting as a file-based database for several meta properties.

Content pages and templates

The following folders contain entry points for almost every website page, as well as shared templates and assets. The templating language used in Jekyll is liquid.

File storage

Build system

This project is build with Jekyll, with the build instructions located in Gemfile and _config.yml. When building locally, some configuration options may need to be different. To define those, _config.development.yml is used.

Content update guidelines

Updating Godot download version

All download information on the website is data-driven. This means that to change the information about the current stable version, or on-going version previews, you don't need to modify pages directly. Instead, data files must be updated.

The main file for keeping track of every official version is data/_versions.yml. It contains exactly one record per each official release, including pre-releases. This file should be updated every time there is a new official build available for download.

To create a new version, add the following block to the file:

- name: "4.0.1"
  flavor: "stable"
  release_date: "20 March 2023"
  release_notes: "/article/maintenance-release-godot-4-0-1/"

Make sure to order entries correctly, with the higher version number being closer to the top. Use the flavor field to mark release as stable or as one of the pre-release builds. Make sure to always fill out the release date, and the release notes link, if available.

When a new build for an existing version is published, update its corresponding block, changing the flavor and the release information. Make sure to update this information when publishing the release notes.

Stable releases featured across the website, must be marked with the featured field and the corresponding major version number. Only one record must be marked as featured per version, so don't forget to remove it from the current holder of the mark.

- name: "4.0.3"
  flavor: "stable"
  release_date: "19 May 2023"
  release_notes: "/article/maintenance-release-godot-4-0-3/"
  featured: "4"

There are two additional files providing data for download pages and links: _data/download_configs.yml and _data/download_platforms.yml. These files don't normally require changes and are used as a static reference table. 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_builds", "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