Source for the IPFS Blog
- Usage
- Publishing Post
- Editing
- Publishing
- Translating (optional)
- Contribute
- License
The IPFS blog is a static website, built with hugo
. We use node
, npm
, less
, and a few other helpful modules to optimize the site for deployment.
With make
, node
and npm
installed on your system, you can:
Run the site in dev mode
$ make dev
...
Web Server is available at http://localhost:1313/
The first time you run it, it will install all the dependencies ✨, Then it will watch for changes in the source code and rebuild the site when you save your changes.
Run it and open http://localhost:1313/ in your browser, and start editing your new blog post.
Note: In dev mode, you will see all posts, even ones where you set the date
field to be in the future, say to schedule a post for a specific date. Posts with a date
value in the future will not appear on the live site until that date arrives. There is a nightly CI job that runs at 00:00 UTC that will cause posts that are merged to master to go live on the date
you set.
Build the production site
$ make
...
Site built out to ./public dir
This will build out the static site, optimized and ready for deployment, to the ./public
directory.
Each blog post is a markdown file, with a little metadata at the top (known as YAML front matter) to help us create the post index page.
A blog post looks like this:
---
date: 2019-01-24
title: 2018 Q4 London Hack Week Summary
author: David Dias
---
Back in October last year, the Go Core Dev Team for the IPFS, IPLD, and libp2p projects spent some quality time together.
...
To create your new post find the last post in content/post
, create a copy, and change the file name by incrementing the number in the title, and change the name to be a useful URL slug for your post. e.g.
$ cd content/post
$ cp 66-london-hack-week-report.md 67-incredible-adventures.md
Now edit the metadata at the top of the file.
date
- the "published at" date, shown on the blog index page, please update at posting time to reflect current date - required (posts will not be displayed until this date on the live blog, but you will see them locally when usingmake dev
)author
- used to give you credit for your words - requiredtitle
- used as theh1
on the post-page, and the name of the post on the index page. requiredtags
- don't appear to be used right now, but set them anyway as we'll want to add a see more posts like this one feature one day.url
- can be used to override the post URL if needed.header_image
- name of the image displayed on the blog homepage. If no image is set, a default header image is shown. See Custom header image for more details.snippet
- the short string of text that is displayed for each post on the blog homepage. If no snippet is set, the first ~20 words are shown.
We have a process for creating and reviewing content before it gets published. Please review PIPELINE.md for the details.
Each post can have a custom image that is shown on the blog homepage. To set an image:
-
Create the image you want to use and crop it to
500px
by250px
. -
Move the image into
static\header_images
. -
Rename the image to match the file name of your post. For example, the
085-announcing-rust-ipfs.md
post uses085-announcing-rust-ipfs.png
as the header. -
In the post markdown, edit the front-matter to include the
header_image
variable:header_image: 085-announcing-rust-ipfs.png
-
Push your changes.
Submit a Github PR with your changes, and request a review.
- Make a change to a file
- Add and commit.
- Push to a remote branch.
- Make a pull request to
master
. - Request a review from another member of the IPFS org.
CircleCI builds the static site, Pins it to our IPFS Cluster, and provides a preview link for a review on the Gateway. Merges to to master
do the same steps plus update the DNSLink for the domain.
In order for CircleCI to build the site after your merge, you must be a member of the website-deployers, comms, GUI or admin teams on the IPFS GitHub org and you must subscribe to the CircleCI builds for the ipfs/blog repository. Create a free CircleCI account, and then subscribe to the repo here.
After the CircleCI build completes, it will take a few minutes for the DNS update to propagate and your changes to show up on the website.
Every post can be optionally translated by:
-
Ensuring
config.toml
includes relevant language code in[languages]
section -
Adding a translation file with correct locale suffix, for example:
- English:
content/post/45-ipfs-weekly-11.md
→ //blog.ipfs.io/45-ipfs-weekly-11/ - Chinese (Simplified):
content-i18n/<lang_code>/post/45-ipfs-weekly-11.md
→ //blog.ipfs.io/zh-cn/45-ipfs-weekly-11/
Note: To ensure the translation is grouped with source post the
translationKey
header needs to be the same in both files, andurl
of translation needs to be prefixed with locale code (zh-cn
for Chinese Simplified), for example:--- date: 2018-09-25 title: IPFS 周报-11 url: /zh-cn/45-ipfs-weekly-11/ translationKey: 45-ipfs-weekly-11 ---
- English:
Having that, non-english version will have unique URL, as seen on the example below:
Chinese (Simplified) | English |
---|---|
Feel free to join in! PRs and issues are welcome.
This repository falls under the IPFS Code of Conduct.
© Protocol Labs | Code is licensed with the MIT License. Except as noted, other content licensed CC-BY 3.0.