Awesome
Write the Docs website
This is the code that powers www.writethedocs.org. It contains information about the Write the Docs group, as well as information about writing documentation.
To contribute to the Write the Docs website, it's helpful to familiarize yourself with the Sphinx site generator and reStructuredText markup syntax.
Code Architecture
All of the generated website lives inside the docs
directory, but many files outside the conf/
directory are just static RST like any other Sphinx project.
All RST files are rendered with Jinja, which allows the use of Jinja tags in all of them. A few custom Jinja filters are available for things like generating photo paths for speakers.
Conference pages
For conferences, see the conference site documentation.
Videos
An even more fragile process that needs documenting and fixing. Note specifically if year > 2023:
around line 134 of docs/_ext/videos.py
.
WIP (Work In Progress) Docs on how to do this:
-
In
_data/<year>.<city>.speakers.yaml
, add ayoutubeId: 12345678901
key value pair to each talk. See also_scripts/insert-video-ids.py
. -
Make sure the directory
videos/<city>/<year>
is included in the Video Archivetoctree
indocs/videos/index.rst
. -
In the virtual environment, switch to the
docs
directory and runBUILD_VIDEOS=True make html
. -
Commit the relevant changed files:
docs/videos/index.rst
_data/<year>.<city>.speakers.yaml
docs/videos/<city>/<year>/*
-
If you want to preview locally:
- Run
BUILD_VIDEOS=True make livehtml
and browse the new video pages athttp://127.0.0.1:8888
.
- Run
Troubleshooting
If you run into trouble with broken links to video files, have a look at _ext/fix_video_yaml.py
:
-
Add a line at the end with the relevant places and dates.
-
Change to the
_ext
directory and run it:python fix_video_yaml.py
-
Commit the fixed
_data/<year>.<city>.speakers.yaml
file.
Prerequisites for generating the docs locally
-
Install
python 3.8.x
using your package manager, if not installed already. You'll probably needroot
privileges to do this. -
Generate a virtual environment for the WTD repo in the
venv
directory:virtualenv --python=/usr/bin/python3.8 venv
Installing the project requirements
-
Activate the virtual environment as per your operating system:
- On Linux-based systems, run
source venv/bin/activate
. - On Windows using the Command Prompt, run
venv\Scripts\activate.bat
. - On Windows using PowerShell, run
. venv\Scripts\activate.ps1
. - On Windows using Git Bash, run
source venv\Scripts\activate
.
You'll need to do this every time you come back to the project.
- On Linux-based systems, run
-
In the repository root directory (
www
by default), runpip install -r requirements.txt
to install sphinx and other requirements.
Previewing the docs locally
Remember to activate the virtual environment using the appropriate command for your OS and Shell before running the following commands.
- In the
docs
directory, runmake livehtml
to view the docs on http://127.0.0.1:8888/.
If you're not seeing new content in the local preview, run make clean
to delete the generated files, then make livehtml
to regenerate them.
The Write the Docs website is hosted on Read the Docs.
Updating the CSS
Styling is maintained in docs/_static/conf/css/
as SASS. Convert SASS to minified CSS by installing SASS
npm install -g sass
and then running (using a 2022 example):
sass --style=compressed docs/_static/conf/scss/main-2022.scss docs/_static/conf/css/main-2022.min.css
Deactivating venv
After your work is complete, you can save resources by deactivating the virtual Python environment with the following command on Linux:
deactivate
If you have verified this command on Windows, we invite you to submit a PR to include that information here.
Using devcontainer
In addition to local development with Python venv
, it is also possible to use the devcontainer found in the root of the project.
Requirements
Make sure all of the following is installed.
Follow the steps below to open the development environment.
- Open a supported IDE
- Click the "Open in devcontainer" popup
- The development environment starts in an containerized environment