Well, this isn't the first time I've used Hugo, but each time I go to look for a nice blogging platform, I keep returning to its simplicity. While I miss some of the plugins that you get out of the box with WordPress etc, I find Hugo a lot easier to customize.
Super fast summary would be that you write your posts in Markdown and Hugo
transforms this into a static website. Being a static website, you can simply throw it up onto AWS S3 to host it. Maybe do a little magic with AWS CloudFront if you want!
This time around also gave me a chance to play with GitHub Actions. I've tended to keep build internal to AWS to manage everything via permissions, though the heavy lifting of setting up an AWS CodePipeline to execute the AWS CodeBuild buildspec just to generate the HTML and sync it with S3, feels like it could be simpler - to match Hugo!
So took my old buildspec:
version: 0.1
phases:
install:
commands:
- curl -Ls https://github.com/spf13/hugo/releases/download/v0.59.1/hugo_0.59.1_Linux-64bit.tar.gz -o /tmp/hugo.tar.gz
- tar xf /tmp/hugo.tar.gz -C /tmp
build:
commands:
- /tmp/hugo
post_build:
commands:
- aws s3 sync --delete --acl public-read public s3://s3-bucket-name
and used the Hugo deploy feature with GitHub Actions that I found on MonkeyPatch's site:
name: Build and Deploy
on: push
jobs:
build:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install Hugo
run: |
HUGO_DOWNLOAD=hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/${HUGO_DOWNLOAD}
tar xvzf ${HUGO_DOWNLOAD} hugo
mv hugo $HOME/hugo
env:
HUGO_VERSION: 0.59.1
- name: Hugo Build
run: cd $GITHUB_WORKSPACE/website && $HOME/hugo -v
- name: Deploy to S3
if: github.ref == 'refs/heads/master'
run: cd $GITHUB_WORKSPACE/website && $HOME/hugo -v deploy --maxDeletes -1
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
This now allowed my to embed the configuration of the upload into Hugo's own config file:
[deployment]
order = [".png$", ".jpg$", ".gif$", ".svg$"]
[[deployment.targets]]
URL = "s3://s3-bucket-name?region=region-name"
[[deployment.matchers]]
# Cache static assets for 20 years.
pattern = "^.+\\.(js|css|png|jpg|gif|svg|ttf)$"
cacheControl = "max-age=630720000, no-transform, public"
gzip = true
[[deployment.matchers]]
pattern = "^.+\\.(html|xml|json)$"
gzip = true
This is obviously the most basic use of GitHub Actions, a one step pipeline with no artifacts etc generated. Looking at the
monthly cost side, I guess AWS would be $1 for the CodePipeline, and with the CodeBuild taking under 1 minute that would be $0.005 per update. GitHub Actions is billed out by the minute, with the first 2000 minutes free. After that its $4 for an extra 1000 updates. So if we max out at 2000 updates... hahaha... it would cost me $11 on the AWS, and still free on GitHub Actions.
I'll be curious how this scales with more complex and longer running pipelines.
Top comments (0)