title |
---|
Website architecture |
We use Gatsby for static site generation because sites built with it are very fast.
This framework uses React and JavaScript/TypeScript.
The website lives in docs/
directory of golangci-lint repository.
Initially the site is based on @rocketseat theme.
Later we've merged it's code into src/@rocketseat
because we needed too much changes
and gatsby shadowing doesn't
allow shadowing gatsby-node.js
or gatsby-config.js
.
Left menu is configured in src/config/sidebar.yml
.
Articles are located in src/docs/
in *.mdx
files. MDX is markdown
allowing to use React
components.
We use templates like {.SomeField}
inside our mdx
files. There templates are expanded
by running make expand_website_templates
in the root of the repository.
It runs script scripts/expand_website_templates/main.go
that rewrites mdx
files with replaced templates.
We use CloudFlare for CDN, proxying and DNS management.
We use Netlify as static website hosting and CD.
It's integrated into our pull requests: if docs/
directory has changes Netlify
will trigger website rebuild and deploy it's preview for a branch. You can view
it to ensure that everything ok.
Netlify deploys the website to production after merging anything to a master
branch.
Run:
npm install
npm run start
And navigate to http://localhost:8000
after successful Gatsby build.
There is no need to restart Gatsby server almost for all changes: it supports hot reload.
Also, there is no need to refresh a webpage: hot reload updates changed content on the open page.
Currently, Netlify triggers rebuild only if anything has changes in docs/
directory.
But we can add a new linter and need to change a documentation to list the linter.
To do it run
go run ./scripts/expand_website_templates/main.go -only-state
It saves a hash of template replacements (that include all linters, configs, etc)
into docs/template_data.state
.