In this blog post, we will discuss how to deploy a Hugo static site to GitHub Pages using GitHub Actions. GitHub Actions is an automation feature provided by GitHub that allows you to create custom software development workflows directly in your GitHub repository. By using GitHub Actions, you can automate the process of building and deploying your Hugo static site to GitHub Pages with ease.
Configuring GitHub Pages Settings
Before you can successfully deploy your Hugo static site to GitHub Pages using GitHub Actions, you need to configure the GitHub Pages settings for your project.
- Go to your GitHub project page and click on the “Settings” tab in the top right corner.
- Scroll down to the “Pages” section.
- In the “Build and deployment” settings, locate the “Source” dropdown menu.
- Select “GitHub Actions” from the available options. This tells GitHub Pages to use the artifacts generated by GitHub Actions for deployment.
Now that you’ve configured your GitHub Pages settings, your site will be deployed using the workflow defined in the hugo.yaml
file.
Setting Up Your GitHub Pages Workflow
To set up a GitHub Pages workflow with Hugo and GitHub Actions, follow these steps:
- Create a new file named
hugo.yaml
in the.github/workflows/
directory of your Hugo site’s repository. - Copy the following YAML configuration into the
hugo.yaml
file:
name: Deploy Hugo site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.111.3
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass Embedded
run: sudo snap install dart-sass-embedded
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v3
- name: Install Node.js dependencies
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: |
hugo \
--gc \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/"
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: ./public
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
This configuration file sets up a workflow that builds your Hugo static site and deploys it to GitHub Pages when you push to the main
branch or run the workflow manually from the Actions tab.
Conclusion
With the addition of configuring GitHub Pages settings in your project and using the provided hugo.yaml
workflow configuration, you can easily automate the process of building and deploying your Hugo static site to GitHub Pages. By utilizing GitHub Actions, you can focus on creating content and making updates to your site without having to manually deploy it each time. This setup also allows you to take advantage of the built-in CI/CD capabilities provided by GitHub Actions, further improving your development workflow.
Source code : https://github.com/hobbyworker/hugo-demo