Skip to content
Source code for the website
Branch: master
Clone or download
grampelberg Update to fix new slug format (#280)
* Update to fix new slug format

* Address review feedback
Latest commit 63db05d Apr 23, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Publish on merges to master (#202) Feb 28, 2019
.github Initial opening of the linkerd websites Aug 16, 2018 Initial opening of the linkerd websites Aug 16, 2018 update emojivoto version in manifests (#246) Apr 9, 2019 Remove legacy `version` release channel. (#101) Jan 23, 2019
.gitignore feat: linkerd blog (#229) Mar 26, 2019 Make all links relative (#71) Nov 30, 2018
DCO Initial opening of the linkerd websites Aug 16, 2018
LICENSE Initial opening of the linkerd websites Aug 16, 2018
Makefile Update website for stable-2.3.0 release (#262) Apr 17, 2019 Update set up instructions (#241) Apr 5, 2019

Source code for the website.

General development instructions

  1. Install Hugo:

    for Mac users:

    brew install hugo

    for Linux users:

    download the extended release of Hugo from GitHub, then install the following dependencies:

    curl | bash
    npm install -g markdownlint-cli

    make sure they are added to $PATH

  2. From the root /website directory, build site and run Hugo in development mode:

    hugo serve -s
  3. Also in the root directory, run checks on any changes you make:

    make check lint

You should see the site on localhost:1313, and it should reload automatically upon file write.

To change the way the site looks


Images and static CSS and JavaScript files are located in the static directory. These files are served as-is. Some of the site's CSS, however, is generated from Sass sources in assets/scss by Hugo. When you change those files, Hugo updates the CSS for the site automatically and refreshes the page.

The files in layouts/ are the HTML for the site (including layout/index.html for the front page.) These files are Go templates with a couple extra Hugo goodies thrown in. See the hugo documentation for details.

If you're running hugo server (see above) then updates should be reflected in your browser window via some fancy javascript magic.

Install scripts for linkerd as well as demo applications such as emojivoto.

Location for existing installations to check and see if they're up to date or not.

To build and serve against the latest Linkerd2 release:


API docs for linkerd1.

Note: this does not deploy by default as part of make publish. It needs to be released separately.

Updating docs from Linkerd

See slate documentation ./build will grab whatever's on master from slate-linkerd and add it to the public dir.

Creating a new release

  1. From the directory, run:

    ./release-next-version <new version>
  2. Run ./release-next-version <release-tag> <new version> in slate-linkerd

  3. Then check locally

  4. Finally push to production



  1. Make sure your gcloud tooling is up to date:

    gcloud components update
    gcloud auth login
  2. Do a dry run and make sure everything works:

    make publish DRY_RUN=true
  3. Update the website:

    make publish


  • This does not update, see the section for that specifically to update it.

  • There is no caching in front of and You should see updates there immediately.

  • There is caching for non-html pages in front of If you're updating a non-html page for, it might be worth flushing the cache (cloudflare) and waiting awhile.

If you have to create a new bucket

You probably won't have to do this, but if you do, don't forget to do this stuff too to set up the bucket for public serving:

gsutil defacl ch -u AllUsers:R gs://bucketname
gsutil web set -m index.html -e 404.html gs://bucketname

Verifying cache updates

Turn off all caching on all files:

gsutil -m setmeta -r -h "Cache-Control: no-cache, no-store, must-revalidate" gs://

Turn caching back on:

gsutil -m setmeta -r -h "Cache-Control:" gs://

Enable access logs (should only need to be run once)

gsutil logging set on -b gs://linkerd2-access-logs -o AccessLog gs://

Get access logs

# note: this will download ALL logs. probably not what you want.
gsutil -m rsync gs://linkerd2-access-logs logs/

Set CORS policy (should only need to be run once)

gsutil cors set gs://
You can’t perform that action at this time.