Use GitHub Pages to host a Thulite site directly from a repository on GitHub.com.

Looking for an example? Check out the official GitHub Pages Doks example project!

How to deploy

Deploy your Thulite site to GitHub Pages with GitHub Actions, which builds and publishes your site automatically. Your source code must be hosted on GitHub.

Follow these steps:

  1. Create .github/workflows/deploy.yml in your project and paste in the workflow below.

    deploy.yml
    # Sample workflow for building and deploying a Thulite site to GitHub Pages
    name: Deploy Thulite 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.161.1
        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
            run: sudo snap install dart-sass
          - name: Checkout
            uses: actions/checkout@v4
            with:
              submodules: recursive
              fetch-depth: 0
          - name: Setup Node.js
            uses: actions/setup-node@v4
            with:
              node-version: '24'
              cache: 'npm'
          - name: Setup Pages
            id: pages
            uses: actions/configure-pages@v4
          - name: Install dependencies
            run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
          - name: Build production website
            env:
              # For maximum backward compatibility with Hugo modules
              HUGO_ENVIRONMENT: production
              HUGO_ENV: production
              TZ: America/Los_Angeles
            run: |
              npm run build \
                -- \
                --baseURL "${{ steps.pages.outputs.base_url }}/"
          - name: Upload artifact
            uses: actions/upload-pages-artifact@v3
            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@v4
  2. In GitHub, open your repository’s Settings and go to Pages.
  3. Set Source to GitHub Actions.
  4. Commit the workflow file and push to GitHub.
  5. Copy the “Your site is published at” URL and set it as baseurl in ./config/production/hugo.toml.
  6. Push the changes and wait for the action to complete successfully (about 30 seconds).

That’s it. After about a minute, your site is available at the “Your site is published at” URL. Each push to your Thulite repository triggers an automatic deployment.

Set up a custom domain

You can optionally set up a custom domain by adding the following ./public/CNAME file to your project:

sub.mydomain.com

This will deploy your site at your custom domain instead of user.github.io. Don’t forget to also configure DNS for your domain provider.