Build and Deploy Pages #335
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# @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.135.0 | |
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 |