12-29-2020: Lab Notebook Setup
Introduction
I’ve noticed a few people whom I follow and admire online have started to keep lab notebooks. I first ran across the idea when I saw @whitequark’s notebook lab.whitequark.org, and then this evening I ran across @bitshiftmask’s lab.jamesmunns.com by chance and saw they were doing a similar thing with mdbook which seems very easy to use and straight forward to setup and maintain.
I’ve been on a personal knowledge management kick recently, and I’ve been playing whit obsidian.md for maintaining a ‘second brain’. The idea of a public lab notebook seems like an interesting idea that I want to play with. So this first post is going to be the process of setting this up.
Boot Strapping The Book
To get started with the notebook first I created a new GitHub repository github.com/bgianfo/lab-notebook.
Then I configured my lab notebook mdbook
project just enough so that this page building.
C:\src\lab-notebook>tree /A /F
| .gitignore
| book.toml
| README.md
|
\---src
| SUMMARY.md
|
\---notes
2020-12-29.md
Once we have the shell of the project setup and can use mdbook serve
to have the system automatically rebuild and refresh pages as we edit them:
C:\src\lab-notebook>mdbook serve
2020-12-29 03:02:15 [INFO] (mdbook::book): Book building has started
2020-12-29 03:02:15 [INFO] (mdbook::book): Running the html backend
2020-12-29 03:02:15 [INFO] (mdbook::cmd::serve): Serving on: http://localhost:3000
2020-12-29 03:02:15 [INFO] (warp::server): Server::run; addr=[::1]:3000
2020-12-29 03:02:15 [INFO] (warp::server): listening on http://[::1]:3000
2020-12-29 03:02:15 [INFO] (mdbook::cmd::watch): Listening for changes...
2020-12-29 03:02:22 [INFO] (mdbook::cmd::serve): Files changed: ["notes\2020-12-29.md"]
2020-12-29 03:02:22 [INFO] (mdbook::cmd::serve): Building book...
2020-12-29 03:02:22 [INFO] (mdbook::book): Book building has started
2020-12-29 03:02:22 [INFO] (mdbook::book): Running the html backend
Publishing
Now that we have the basics of the book building, I want to get the notebook published, and served off of my subdomain lab.bjg.io where nothing currently resides today. To make this as pain free as possible I was hoping to use github pages for this, the same as the rest of my site. When poking around I found the mdbook-action which allows you to painlessly publish your mdbook from a github actions workflow.
Following the documentation I was able to create a simple workflow (324781fae):
name: Publish To GitHub Pages
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Setup mdBook
uses: peaceiris/actions-mdbook@v1
with:
mdbook-version: 'latest'
- run: mdbook build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./book
I looked for signs that the action ran, and nothing… so double checking the pipeline
I realized that GitHub created the new default branch as main
, not master
. So our
pipeline wasn’t running because we are listening for push events on the wrong branch.
Announcement: https://github.com/github/renaming
So we need one small change to our pipeline to fix things up:
commit 78fd8a787cf6a2f49eca8e402eb6aede9caad174
Author: Brian Gianforcaro <b.gianfo@gmail.com>
Date: Tue Dec 29 03:17:52 2020 -0800
CI: Fix to modern branch name
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index cf0fa96..7707376 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -3,7 +3,7 @@ name: Publish To GitHub Pages
on:
push:
branches:
- - master
+ - main
That worked and automatically created a new gh-pages
branch in the repository.
In the GitHub repository settings I was then able to configure github pages
to use the new gh-pages branch. See: GitHub Docs: Managing a custom domain for your GitHub Pages site
I then configured github pages to publish under a custom domain (lab.bjg.io), this
will automatically create a new CNAME
file in the root of your project. Next I went to by DNS provider and added a new
CNAME record to my domain configuration pointing lab.bjg.io -> bgianfo.github.io
.
And Voila! It Alive!
Well kind of … As soon as I pushed new changes, the sub domain no longer works. That is very strange?
After some digging in the CI logs, I realized that the actions-gh-pages
action was
deleting the CNAME file in the gh-pages branch on every push, breaking the configuration.
I looked through the docs for the gh-pages action and found they have their own
option for auto generating the CNAME file from within the action. So I made a
small change to use that option:
commit 2f5c50ad033f4db4401ba7ddf427306ed326ab2e
Author: Brian Gianforcaro <b.gianfo@gmail.com>
Date: Tue Dec 29 04:10:11 2020 -0800
CI: Configure CNAME when generating html and publishing to gh-pages
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 7707376..1364391 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -23,3 +23,4 @@ jobs:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./book
+ cname: lab.bjg.io