Files
hugo/snap/snapcraft.yaml
T
Joe Mooring b8a2c10d06 snap: Limit build platforms to amd64, arm64, ppc64el, and s390x
The Node 24 Snap has dropped support for armhf and riscv64.
2026-01-01 19:58:01 -08:00

226 lines
6.3 KiB
YAML

name: hugo
base: core24
adopt-info: hugo
confinement: strict
title: Hugo
icon: snap/local/logo.png
summary: Fast and Flexible Static Site Generator
description: |
Hugo is a static site generator written in Go, optimized for speed and
designed for flexibility. With its advanced templating system and fast asset
pipelines, Hugo renders a complete site in seconds, often less.
Due to its flexible framework, multilingual support, and powerful taxonomy
system, Hugo is widely used to create:
* Corporate, government, nonprofit, education, news, event, and project sites
* Documentation sites
* Image portfolios
* Landing pages
* Business, professional, and personal blogs
* Resumes and CVs
# Project links
issues: https://github.com/gohugoio/hugo/issues
license: "Apache-2.0"
source-code: https://github.com/gohugoio/hugo.git
website: https://gohugo.io/
platforms:
amd64:
arm64:
ppc64el:
s390x:
lint:
ignore:
- library:
- usr/lib/**/libform.so.*
- usr/lib/**/liblua*.so.*
- usr/lib/**/libmenu.so.*
- usr/lib/**/libpanel.so.*
- usr/lib/**/libperl.so.*
# Interfaces
plugs:
dot-aws:
interface: personal-files
read:
- $HOME/.aws
dot-azure:
interface: personal-files
read:
- $HOME/.azure
dot-cache-hugo:
interface: personal-files
write:
- $HOME/.cache/hugo_cache
dot-config-gcloud:
interface: personal-files
read:
- $HOME/.config/gcloud
etc-gitconfig:
interface: system-files
read:
- /etc/gitconfig
gitconfig:
interface: personal-files
read:
- $HOME/.config/git
- $HOME/.gitconfig
- $HOME/.gitconfig.local
ssh-keys:
interface: ssh-keys
# Runtime environment
environment:
# Ruby
GEM_HOME: $SNAP_USER_DATA/gems
GEM_PATH: $SNAP/usr/share/rubygems-integration/all:$SNAP/usr/lib/ruby/gems/3.2.0:$SNAP/var/lib/gems/3.2.0
RUBYLIB: $SNAP/usr/lib/ruby/vendor_ruby/3.2.0:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/ruby/vendor_ruby/3.2.0:$SNAP/usr/lib/ruby/vendor_ruby:$SNAP/usr/lib/ruby/3.2.0:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/ruby/3.2.0
# Node
npm_config_cache: $SNAP_USER_DATA/.npm
npm_config_init_module: $SNAP_USER_DATA/.npm-init.js
npm_config_userconfig: $SNAP_USER_DATA/.npmrc
# Other
PYTHONHOME: /usr:$SNAP/usr
pandoc_datadir: $SNAP/usr/share/pandoc
GIT_EXEC_PATH: $SNAP/usr/lib/git-core
GOCACHE: $SNAP_USER_DATA/.cache/go-build
# Allowlist for environment variables
# Default: (?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE|PROGRAMDATA)$
HUGO_SECURITY_EXEC_OSENV: (?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE|PROGRAMDATA|GIT_EXEC_PATH|LD_LIBRARY_PATH|npm_config_(cache|init_module|userconfig)|pandoc_datadir|PYTHONHOME|SNAP|GEM_HOME|GEM_PATH|RUBYLIB)$
# App definition
apps:
hugo:
command: bin/hugo
completer: hugo-completion
plugs:
- desktop
- dot-aws
- dot-azure
- dot-cache-hugo
- dot-config-gcloud
- etc-gitconfig
- gitconfig
- home
- network-bind
- removable-media
- ssh-keys
# Build parts
parts:
asciidoctor:
plugin: nil
stage-packages:
- asciidoctor
- ruby-asciidoctor
- rubygems-integration
override-build: |
set -ex
craftctl default
# Use env ruby to ensure the snap's ruby interpreter is used
sed -i '1s|#!/usr/bin/ruby|#!/usr/bin/env ruby|' $CRAFT_PART_INSTALL/usr/bin/asciidoctor
# Patch rubygems to avoid flock() errors in strict confinement
sed -i 's|!solaris_platform|win_platform|' $CRAFT_PART_INSTALL/usr/lib/ruby/vendor_ruby/rubygems.rb
dart-sass:
plugin: nil
build-packages:
- curl
override-build: |
set -ex
craftctl default
case "$CRAFT_ARCH_BUILD_FOR" in
amd64) arch=x64 ;;
arm64) arch=arm64 ;;
*) arch="" ;;
esac
if [[ -n $arch ]]; then
url=$(curl -s https://api.github.com/repos/sass/dart-sass/releases/latest | awk -F\" "/browser_download_url.*-linux-${arch}.tar.gz/{print \$(NF-1)}")
curl -LO --retry-connrefused --retry 10 "${url}"
tar xf dart-sass-*-linux-${arch}.tar.gz
install -d $CRAFT_PART_INSTALL/bin
cp -av dart-sass/* $CRAFT_PART_INSTALL/bin/
fi
git:
plugin: nil
stage-packages:
- git
prime:
- usr/bin/git
- usr/lib
go:
plugin: nil
stage-snaps:
- go/latest/stable
prime:
- bin/go
- pkg/tool
- -pkg/tool/*
node:
plugin: nil
stage-snaps:
- node/24/stable
organize:
"LICENSE": "LICENSE_NODE"
"README.md": "README_NODE.md"
pandoc:
plugin: nil
stage-packages:
- pandoc
rst2html:
plugin: nil
stage-packages:
- python3-docutils
override-build: |
set -ex
craftctl default
sed -i "s|'/usr/share/docutils/'|os.path.expandvars('\$SNAP/usr/share/docutils/')|" $CRAFT_PART_INSTALL/usr/lib/python3/dist-packages/docutils/__init__.py
organize:
usr/share/docutils/scripts/python3: usr/bin
hugo:
plugin: nil
source: .
after:
- git
- go
build-packages:
- git
override-pull: |
craftctl default
craftctl set version=$(git describe --tags --always --match 'v[0-9]*' | sed 's/^v//; s/-/+git/; s/-g/./')
if grep -q 'Suffix:\s*""' common/hugo/version_current.go; then
craftctl set grade=stable
else
craftctl set grade=devel
fi
override-build: |
set -ex
export GOPATH=$(realpath ../go)
export PATH=$GOPATH/bin:$PATH
HUGO_BUILD_TAGS="extended"
echo "Building Hugo (extended)..."
go build -v -ldflags "-s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=snap:$(craftctl get version)" -tags "$HUGO_BUILD_TAGS"
echo "Generating Shell Completion..."
./hugo completion bash > hugo-completion
echo "Installing Binaries..."
install -d $CRAFT_PART_INSTALL/bin
cp -av hugo $CRAFT_PART_INSTALL/bin/
mv -v hugo-completion $CRAFT_PART_INSTALL/
echo "Stripping Binary..."
strip --remove-section=.comment --remove-section=.note $CRAFT_PART_INSTALL/bin/hugo