forked from 0k/0k-charms
Browse Source
new: [hugo] add ``hugo`` charm
new: [hugo] add ``hugo`` charm
Signed-off-by: Valentin Lab <valentin.lab@kalysto.org>cups_service_alpha
Valentin Lab
2 years ago
6 changed files with 203 additions and 0 deletions
-
53hugo/actions/generate
-
21hugo/hooks/init
-
12hugo/hooks/pre_deploy
-
12hugo/hooks/publish_dir-relation-joined
-
65hugo/lib/common
-
40hugo/metadata.yml
@ -0,0 +1,53 @@ |
|||
#!/bin/bash |
|||
## compose: no-hooks |
|||
|
|||
if [ -z "$SERVICE_DATASTORE" ]; then |
|||
echo "This script is meant to be run through 'compose' to work properly." >&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
. "$CHARM_PATH/lib/common" |
|||
|
|||
|
|||
version=0.1 |
|||
usage="$exname [-h|--help]" |
|||
help=" |
|||
USAGE: |
|||
|
|||
$usage |
|||
|
|||
DESCRIPTION: |
|||
|
|||
Generate website from current content. |
|||
|
|||
EXAMPLES: |
|||
|
|||
$exname |
|||
|
|||
" |
|||
|
|||
|
|||
dbname= |
|||
output= |
|||
while [ "$1" ]; do |
|||
case "$1" in |
|||
"--help"|"-h") |
|||
print_help >&2 |
|||
exit 0 |
|||
;; |
|||
--*|-*) |
|||
err "Unexpected optional argument '$1'" |
|||
print_usage >&2 |
|||
exit 1 |
|||
;; |
|||
*) |
|||
err "Unexpected positional argument '$1'" |
|||
print_usage >&2 |
|||
exit 1 |
|||
;; |
|||
esac |
|||
shift |
|||
done |
|||
|
|||
|
|||
hugo:generate "$HOST_HUGO_SOURCE" "$HOST_HUGO_OUTPUT" |
@ -0,0 +1,21 @@ |
|||
#!/bin/bash |
|||
|
|||
## Init is run on host |
|||
## For now it is run every time the script is launched, but |
|||
## it should be launched only once after build. |
|||
|
|||
## Accessible variables are: |
|||
## - SERVICE_NAME Name of current service |
|||
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any |
|||
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service |
|||
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service |
|||
|
|||
|
|||
. lib/common |
|||
|
|||
set -e |
|||
|
|||
if ! [ -d "$HOST_HUGO_SOURCE" ]; then |
|||
hugo:init-dir || exit 1 |
|||
fi |
|||
|
@ -0,0 +1,12 @@ |
|||
#!/bin/bash |
|||
## Should be executable N time in a row with same result. |
|||
|
|||
set -e |
|||
|
|||
. lib/common |
|||
|
|||
|
|||
if ! [ -d "$HOST_HUGO_OUTPUT" ]; then |
|||
hugo:generate "$HOST_HUGO_SOURCE" "$HOST_HUGO_OUTPUT" || exit 1 |
|||
fi |
|||
|
@ -0,0 +1,12 @@ |
|||
#!/bin/bash |
|||
|
|||
. lib/common |
|||
|
|||
set -e |
|||
|
|||
url=$(relation-get url) || exit 1 |
|||
|
|||
mkdir -p "${HOST_HUGO_CONFIG}" |
|||
cat <<EOF > "${HOST_HUGO_CONFIG}"/01-baseurl.yaml |
|||
baseURL: $url |
|||
EOF |
@ -0,0 +1,65 @@ |
|||
# -*- mode: shell-script -*- |
|||
|
|||
HUGO_CONFIG="/etc/hugo" |
|||
HUGO_BASE="/opt/apps/hugo" |
|||
HUGO_SOURCE="$HUGO_BASE/src" |
|||
HUGO_OUTPUT="$HUGO_BASE/output" |
|||
HUGO_THEME="$HUGO_BASE/theme" |
|||
|
|||
|
|||
HOST_HUGO_SOURCE="$SERVICE_DATASTORE$HUGO_BASE/src" |
|||
HOST_HUGO_OUTPUT="$SERVICE_DATASTORE$HUGO_BASE/output" |
|||
HOST_HUGO_THEME="$SERVICE_DATASTORE$HUGO_BASE/theme" |
|||
HOST_HUGO_CONFIG="$SERVICE_CONFIGSTORE$HUGO_CONFIG" |
|||
|
|||
HUGO_BUILDER_DEFAULT_IMAGE="docker.0k.io/hugo:0.88.1" |
|||
|
|||
|
|||
hugo:init-dir() { |
|||
mkdir -p "$HOST_HUGO_SOURCE" || return 1 |
|||
cd "$HOST_HUGO_SOURCE" && |
|||
git config --global user.email "compose@mail.com" && |
|||
git config --global user.name "compose" && |
|||
docker run --rm -v "$HOST_HUGO_SOURCE":"$HUGO_SOURCE" \ |
|||
-w "$HUGO_SOURCE" "$HUGO_BUILDER_DEFAULT_IMAGE" \ |
|||
new site -f yaml . && |
|||
docker run --rm -v "$HOST_HUGO_SOURCE":"$HUGO_SOURCE" \ |
|||
-w "$HUGO_SOURCE" "$HUGO_BUILDER_DEFAULT_IMAGE" \ |
|||
new posts/my-first-post.md && |
|||
sed -ri '/^baseURL:/d' config.yaml && |
|||
git init && |
|||
git add -A . && |
|||
git commit -m "First import" |
|||
} |
|||
|
|||
|
|||
hugo:generate() { |
|||
local src="$1" dst="$2" configs c |
|||
|
|||
theme_url=$(options-get theme-url 2>/dev/null) || true |
|||
theme_url=${theme_url:-https://github.com/theNewDynamic/gohugo-theme-ananke.git} |
|||
|
|||
if ! [ -d "$HOST_HUGO_THEME/default" ]; then |
|||
mkdir -p "$HOST_HUGO_THEME" |
|||
git clone "${theme_url}" "$HOST_HUGO_THEME/default" || { |
|||
err "Could not clone theme '$HOST_HUGO_THEME'." |
|||
return 1 |
|||
} |
|||
fi |
|||
echo "theme: default" > "$HOST_HUGO_CONFIG/80-theme.yaml" |
|||
config_files=("$HOST_HUGO_CONFIG/"*.yaml) |
|||
configs="" |
|||
for c in "${config_files[@]}"; do |
|||
configs+="config${c#$SERVICE_CONFIGSTORE$HUGO_CONFIG}," |
|||
done |
|||
mkdir -p "$dst" || return 1 |
|||
docker run --rm -v "$src":"$HUGO_SOURCE" \ |
|||
-v "$dst":"$HUGO_OUTPUT" \ |
|||
-v "$HOST_HUGO_CONFIG":"$HUGO_CONFIG" \ |
|||
-v "$HOST_HUGO_THEME":"$HUGO_SOURCE/themes" \ |
|||
-v "$HOST_HUGO_CONFIG":"$HUGO_SOURCE/config" \ |
|||
-w "$HUGO_SOURCE" "$HUGO_BUILDER_DEFAULT_IMAGE" \ |
|||
-D --config "${configs}config.yaml" \ |
|||
-d "${dst#$SERVICE_DATASTORE}" && |
|||
find "$HOST_HUGO_SOURCE" -depth -type d -empty -delete |
|||
} |
@ -0,0 +1,40 @@ |
|||
description: Hugo |
|||
subordinate: true |
|||
requires: |
|||
web-publishing-directory: |
|||
interface: publish-dir |
|||
scope: container |
|||
data-resources: |
|||
- /opt/apps/hugo/output |
|||
|
|||
default-options: |
|||
# config: |
|||
# language-code: "en-us" |
|||
# title: "My Hugo Site" |
|||
# theme: "ananke" |
|||
|
|||
uses: |
|||
publish-dir: |
|||
#constraint: required | recommended | optional |
|||
#auto: pair | summon | none ## default: pair |
|||
scope: container |
|||
constraint: required |
|||
auto: summon |
|||
solves: |
|||
container: "main running server" |
|||
default-options: |
|||
location: !var-expand "$DATASTORE/$BASE_SERVICE_NAME/opt/apps/hugo/output" |
|||
backup: |
|||
constraint: recommended |
|||
auto: pair |
|||
solves: |
|||
backup: "Automatic regular backup" |
|||
default-options: |
|||
## First pattern matching wins, no pattern matching includes. |
|||
## include-patterns are checked first, then exclude-patterns |
|||
## Patterns rules: |
|||
## - ending / for directory |
|||
## - '*' authorized |
|||
## - must start with a '/', will start from $SERVICE_DATASTORE |
|||
exclude-patterns: |
|||
- "/opt/apps/hugo/output/" |
Write
Preview
Loading…
Cancel
Save
Reference in new issue