Skip to content

Build and Deploy Pages #353

Build and Deploy Pages

Build and Deploy Pages #353

Workflow file for this run

# @license Apache-2.0
#
# Copyright 2024 8 Hobbies, LLC <[email protected]>
#
# Licensed under the Apache License, Version 2.0(the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Build and Deploy Pages
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
schedule:
- cron: '0 1 * * *'
jobs:
build_website:
name: Build Website
runs-on: ubuntu-24.04
# Ironically, to avoid cycled self-dependency, use a Hugo installation from a different source
# here to build the website.
container: hugomods/hugo:reg-git-0.136.2
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Build the site
working-directory: website
run: ./build-website.sh
- name: Upload site
uses: actions/[email protected]
with:
name: website
path: website/public
if-no-files-found: error
build:
name: Build Repo
runs-on: ubuntu-24.04
needs: build_website
env:
DIST_ROOT_DIR: _site/dists/latest
steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
with:
name: website
path: _site
- name: Create the dist root directory
run: |
mkdir -p ${DIST_ROOT_DIR}
- name: Download latest Hugo
run: scripts/download_latest_hugo_deb.sh
- name: Generate Debian Repo files
run: scripts/generate_repo_files.sh
- name: Configuring signing key
run: gpg --import <<< "${{ secrets.SIGNING_KEY }}"
- name: Sign Release
run: |
gpg -u 'Hugo APT Repo 8 Hobbies Signing Bot <[email protected]>' -a -s --clearsign --output ${DIST_ROOT_DIR}/InRelease ${DIST_ROOT_DIR}/Release
- name: Make Public Key available
run: mv signing-key _site/
- name: Upload GitHub Pages Artifact
uses: actions/[email protected]
with:
path: _site
test:
name: Test the Repo
runs-on: ubuntu-24.04
strategy:
matrix:
os: ['debian:11', 'debian:12', 'ubuntu:20.04', 'ubuntu:22.04', 'ubuntu:24.04']
container: ${{ matrix.os }}
needs: build
steps:
# We don't build the website with the Hugo installation from this step, because we intend to
# test with the final version of the whole repository in case any website building part
# interferes with the repo.
- uses: actions/[email protected]
with:
name: github-pages
- name: Decompress Artifact
run: |
tar xvf artifact.tar
rm artifact.tar
- name: Install Python and NetCat
run: |
apt-get update
apt-get install -y python3 netcat-openbsd
- name: Ensure no Hugo Package in Default Repo
run: |
if [ -e /etc/apt/sources.list ]; then
rm /etc/apt/sources.list
fi
if [ -d /etc/apt/sources.list.d ]; then
rm -f /etc/apt/sources.list.d/*
fi
apt-get update
! apt-cache show hugo
- name: Ensure no Hugo installed
run: |
! type hugo
- name: Add the APT Repo
run: echo "deb [signed-by=/etc/apt/keyrings/hugo.gpg] http://localhost:9000 latest main" | tee /etc/apt/sources.list.d/hugo.list
- name: Trust the Key
run: |
if [ ! -d /etc/apt/keyrings ]; then
mkdir -p /etc/apt/keyrings
fi
cp ${PWD}/signing-key /etc/apt/keyrings/hugo.gpg
- name: Install Hugo
run: |
python3 -m http.server 9000 &
while ! nc -z localhost 9000; do
sleep 0.5
done
apt-get update
apt-get install -y hugo
- name: Test running Hugo
run: hugo version
deploy:
name: Deploy Pages
if: github.ref == 'refs/heads/master'
runs-on: ubuntu-24.04
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
needs: [build, test]
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4