This repo is used to build the Apache Druid website. It is the source of truth for website pages such as the website homepage and pages like Community.
A different repo houses the source of truth for the following:
- Markdown files for
docs
(If you're looking for the HTML pages that were previously here for pre-26.0.0 docs, they're now inpublished_versions
) - the sidebar file
- the redirects file
For those, see apache/druid
.
The target repo for the website when you're ready to publish is druid-website
.
The state of master
for apache/druid-website-src
should match the state of asf-site
for apache/druid-website
. For asf-staging
in apache/druid-website
, those PRs should be left unnmerged until they go into asf-site
.
If you need to update the contents of Upcoming Events, Featured Content or Latest releases widgets, you can find them in static/js
:
EventList.js
(rendered byEventsWidget.js
)FeaturedContent.js
(rendered byFeaturedContentWidget.js
)version.js
(rendered byRecentReleasesWidget.js
)
If you only need to update the homepage widgets, use the --no-docs
flag (as shown in example 5) to build the site. This uses the existing docs in latest
and only builds latest
, which is what's used for the homepage and other non-doc pages.
By default, the repo always starts/builds latest if you run npm start|build
or yarn start|build
. This way, you can always view the site locally.
The build scripts described in Publish the site handles building the versioned docs for when you're ready to do a release.
To start, you'll need to install Docusaurus 2.
You need a supported version of node, such as the latest Node 18.
Run npm install
or yarn install
in the root of the directory.
These are the steps to publish either a new release or a hotfix to an existing release. Note that you'll always need to build latest
so that the downloads page lists the correct versions, so the script automatically builds latest for you.
Before you start:
- Make sure you're on the correct branch in your apache/druid repo.
- Get the path of the apache/druid repo. You can skip this if you have
apache/druid
andapache/druid-website-src
as peers at the same directory level.
-
Update the version list in
static/js/version.js
. The highest release version goes in position 0. This file is used byRecentReleasesWidget
on the home page to display the 3 most recent versions and to interpolate the download links on the download page. -
From the root of
druid-website-src
, go toscripts/
. -
In
scripts
, runpython do_all_things.py -v VERSION
. The script assumes you usednpm
to install. See example 3 if you useyarn
.Example 1: This command builds version 27.0.0 of the docs and latest.
python do_all_things.py -v 27.0.0
Example 2: If you already have Docusaurus 2 installed, skip the installation by specifying the flag
--skip-install
.python do_all_things.py -v 27.0.0 --skip-install
Example 3: If you want to use yarn instead of npm, specify the flag
--yarn
.python do_all_things.py -v 27.0.0 --yarn
Example 4: If you have apache/druid in different place from druid-website-src, or use a different directory name than
druid
, specify its path using the--source
flag.python do_all_things.py -v 27.0.0 --source /my/path/to/apache/druid
Example 5: If you want to use the Markdown files already in this repo because you don't want to also publish doc changes, use the
--no-docs
flag. The script will use the docs already indocs/latest
to build the site. Use this if you need to republish the site to update the homepage widgets or other non-doc website pages.python do_all_things.py --no-docs
For more information about the scripts, see the scripts.
While the script builds the docs for the specified version, you'll get some false positives for broken links. (The first version that the script builds.) These are from the website pages to
/latest
doc pages, which don't exist yet. You only need to pay attention to broken links from the second build, which is forlatest
.
The versions you built (such as 26.0.0 and latest) are copied to published_versions
where the compiled pages for the older docs live.
-
Go to
published_versions
and verify the site. If you run it locally, such as withhttp-server
you'll get the latest version of the site, such aslocalhost:8080/docs/latest/
and the version you built, such aslocalhost:8080/docs/26.0.0/
. In addition, you should be able to see pre-Docusaurus2 versions such as 25.0.0 with the old CSS. -
Commit the built files along with the Markdown files to
druid-website-src
and make a PR. -
Use the contents of
published_versions
to make a PR tohttps://github.com/apache/druid-website
(either theasf-staging
branch or theasf-site
branch).
The do_all_things.py
script is a wrapper for the following scripts:
-
Uses
copy_druid_docs.py
to copy the markdown files for the docs over and inserts the actual Druid version for the variable {{DRUIDVERSION}}. It copies the Markdown files todocs/VERSION
. If the version is going to be the highest version available, it'll also copy todocs/latest
. -
Uses
build_docs.py
to build the version you want and latest. You always need to build latest to update the downloads page and the widgets on the home page. It also handles writing the redirects to create the versioned redirects for (/docs/VERSION/
).
Once do_all_things.py
builds the version you want and latest, it copies the build output to published_versions
. You can use this directory to republish the whole site.
published_versions
houses the following:
- The old CSS needed to properly render Docusaurus 1 pages
- The website pages, like Community
- All the built HTML pages for the docs, including pre-Docusaurus 2 HTML pages
The HTML files for pre-Docusaurus 2 versions (versions before 26) are in .published_versions/docs. If you need to publish updated versions of those files for any reason, you need to build the docs with Docusaurus 1 in the apache/druid
repo:
- Checkout the branch you want to build, such as
25.0.0
. - In
apache/druid/website
, runnpm run build
oryarn build
. - Copy the HTML files for the docs from the build output to
published_versions/docs/VERSION
. - Publish the site as you normally would for a new release.
If you want to add a new example data file, add it to the data
directory in the root of the repo. As part of the build process, it gets copied into the build output that's used to publish the site.
See CONTRIBUTING.md.