Welcome to the source for the Darklang documentation.
Contribute your improvements as a pull request or report problems in an issue.
View the live docs on our documentation website: https://darklang.com/docs
(ℹ) The Darklang docs are built using Docusaurus. If you're trying to do something beyond the scope of this README, please check out their docs.
- Get started in 5 minutes
- Documentation structure
- Project structure
- Editing content
- Adding content
- How CI auto-deploys
- Publishing changes manually
To change these docs and test the results locally:
npm install
npm run-script start
Darklang's documentation is organized into four categories:
- Tutorials
- How-to guides
- Background information and discussion
- Reference material
This follows the Divio Documentation System. Using this system, documentation in each category should not do the work of any other category. For example, a tutorial should just step the user through doing the work, and should not provide background explanations or other reference material, or discussion.
In the future, we intend to provide access to all this material in the app, with context-sensitive reference materials available for all product and language features, as well as interactive tutorials and how-to guides built-in.
A tutorial that teaches a child how to cook:
- Tells them what to do.
- Does not explain why they are doing it.
- Includes specifics and lets them learn the generalities over time.
- Assumes that "obvious" things are not known.
- Does not include choices.
- Should be bulletproof.
- "Recipes" showing how to do something.
- Should have very specific names, such as "How to add a custom domain to Darklang."
- Background material to understand further.
- Provides context.
- Just descriptions.
- Follows the structure of the project/language (e.g., each type is represented).
There are two important branches:
main
gh-pages
The website is hosted on gh-pages
, but everything there is auto-generated
from main
. When we want to make changes, we create a new branch from main
in the format username/my-change
and make as many commits as we need to.
Then, we create a new pull request from that branch with main
as the base.
When the pull request is merged, CircleCI will automatically deploy the changes
from main
to the website (it runs a script against the source files on main
and deploys the generated website to gh-pages
).
The project file structure in main
is:
docs/
README.md (this file)
.circleci/config.yml (used to auto-deploy via CircleCI)
.gitignore (ignores autogenerated files that shouldn't sync via git)
.spelling (a place to add words not in a standard dictionary)
docs/ (individual markdown documentation pages)
changelog.md
getting-started.md
...
src/
css/
plugins/ (docusaurus plugins)
package.json (helper scripts)
docusaurus.config.js (core site configuration)
sidebars.json (sidebar sections and pages)
static/
img/ (static images, posts, and also favicon.ico)
slack-apps/
tutorials/
index.html
CNAME
.nojekyll
node_modules/
Editing content in Docusaurus is straightforward. Whether you want to make small tweaks or significant changes, the following section will guide you through the process.
Edit docs by navigating to docs/
and editing the corresponding document:
docs/doc-to-be-edited.md
---
id: page-needs-edit
title: This Doc Needs to Be Edited
---
Edit me...
For more information about working with docs, read the Docusaurus docs.
The following section will walk you through the process of adding a new document and integrating it into an existing sidebar.
- Create the doc as a new markdown file in
/docs
. For example,docs/newly-created-doc.md
:
---
id: newly-created-doc
title: This Doc Needs to Be Created
---
My new content here...
- Refer to that doc's ID in an existing sidebar in
sidebars.json
:
// Add newly-created-doc to the Getting Started category of docs
{
"docs": {
"Getting Started": [
"quick-start",
"newly-created-doc" // new doc here
],
...
},
...
}
For more information about adding new docs, see the guide on adding items to the sidebar.
- Add links to docs, custom pages, or external links by editing the navbar items in the
themeConfig
section ofdocusaurus.config.js
:
{
themeConfig: {
navBar: {
items: [
{
to: "/introduction", // The URL path to the landing page,
label: "Classic",
position: "right",
},
{
to: "/next/introduction",
activeBasePath: "docs",
label: "Next",
position: "right",
},
{
href: 'https://github.com/darklang/docs',
label: 'GitHub',
position: 'right',
},
...
]
}
}
...
}
For more information about the navigation bar, see the corresponding Docusaurus guide.
We run some tools to ensure that the docs are consistently formatted and to find
common errors. If you run npm run format
, you should pass the linter.
CI automatically runs markdownlint
. You can run it locally as
npm run lint
.
The .circleci/config.yml
file describes the CircleCI configuration. It monitors commits
and merges into the main
branch, runs a script to generate the contents of gh-pages
,
and pushes gh-pages
to GitHub.
(ℹ) You shouldn't need to do this because CircleCI runs this automatically.
On the command line (remember to replace <YOUR USERNAME>
with your GitHub
username):
GIT_USER=<YOUR USERNAME> CURRENT_BRANCH=main npm deploy
If you're using SSH instead of HTTPS, replace GIT_USER=<YOUR USERNAME>
with
USE_SSH=true
.