Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
  Deploy Blog

This is the source for my personal website at

It is generated using Hugo and the Hugo-Octopress Theme. I ported the Octopress classic theme to Hugo.


  1. Create a new post with hugo new post/2018-11-23-post-name/index.markdown (or
  2. Edit the post and proofread. Pictures are in the same directory to take advantage of page bundles.
  3. ctrl+shift+b in VS Code starts a task that runs the Hugo watch server and opens it in a browser. See .vscode/tasks.json.
  4. Push to GitHub.
  5. GitHub action takes over and builds the site and deploys it to GitHub pages.
    • See the "Deploying" section below for more information.
  6. s3deploy uploads the results to AWS.
  7. ???
  8. Profit. The website is now updated. Add CI/CD to your resume.


The website is hosted in an AWS S3 bucket. CloudFront provides CDN and TLS (and certificate). GitHub pages are also popular (and free). See my blog post Automagically Deploying Websites with Custom Domains to GitHub Pages.


I use a custom GitHub action. See deploy.yml.

s3deploy - Not Used Anymore

I used s3deploy to deploy the blog to AWS. The configuration is inside .s3deploy.yml. This example is suitable (with a bit of modification) for most static websites.

Static resources (fonts, images, css, etc.) do not have expiration dates. Everything else uses gzip compression. When a resource is updated, s3deploy invalidates its CloudFront cache.

Note: Enabling gzip compression for Keybase proofs (see static/keybase.txt) breaks them.

Use the s3deploy's example IAM policy. At the time of writing, AWS does not support addressing separate CloudFront distributions with ARNs (Amazon Resource Names) so the resulting key can list and invalidate all distributions.

Travis CI - Not Used Anymore

The blog used to use Travis CI. See @archive/.travis.yml.

  • The theme is a submodule. It's updated first.
  • Install two debs. Hugo and s3deploy. I like to control the versions as both software are under heavy development.
  • language:minimal reduces build time by 20 seconds (compared to the default container).
  • AWS key and secret are in AWS_ACCESS_KEY and AWS_SECRET_ACCESS_KEY environment variables respectively. These are used by s3deploy.

See @archive/deploy.bat for manual deployment.