Jeden partial w nagłówku: auto-OG albo adres podpisany podczas builda.
Hugo nie wykonuje żądań HTTP przy budowaniu w sposób, na którym da się polegać — a z tym modułem nie musi. Partial albo kieruje endpoint auto-OG na permalink strony, bez żadnego sekretu, albo podpisuje adres szablonu wbudowaną funkcją `crypto.HMAC`. Obrazek powstaje przy pierwszej wizycie crawlera.
layouts/partials/head.html
{{/*
hugo.toml:
[module]
[[module.imports]]
path = "github.com/dziulatex/shareglint-hugo"
[params.shareglint]
account = "acc_..."
Build: HUGO_SHAREGLINT_SIGNING_SECRET=sign_... hugo
*/}}
{{ if .IsPage }}
{{/* A blog-og card signed during the build with crypto.HMAC. */}}
{{ partial "shareglint/og-image.html" (dict
"page" .
"template" "blog-og"
"fields" (dict "title" .Title "author" .Params.author "site" site.Title)
"alt" .Title) }}
{{ else }}
{{/* Auto-OG: /u/acc_....png?url=<permalink> - no secret needed. */}}
{{ partial "shareglint/og-image.html" . }}
{{ end }}
To samo jednym zwykłym wywołaniem HTTP — bez instalowania zależności.
scripts/og.sh
#!/usr/bin/env bash
set -euo pipefail
# For every post without an og_image field: generate one and write it back.
for file in content/posts/*.md; do
grep -q '^og_image:' "$file" && continue
title=$(grep -m1 '^title:' "$file" | sed 's/^title:[[:space:]]*//; s/^"//; s/"$//')
url=$(curl -sS -X POST "https://shareglint.com/v1/images?wait=true" \
-H "Authorization: Bearer $SHAREGLINT_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg t "$title" '{template:"blog-og",modifications:{title:$t,site:"yourblog.com"}}')" \
| jq -r .url)
# Append to the front matter, right below the first '---' line.
sed -i "0,/^---$/{s|^---$|---\nog_image: \"$url\"|}" "$file"
echo "$file -> $url"
done
`getenv` w Hugo czyta tylko zmienne zaczynające się od `HUGO_`, więc sekret musi się nazywać `HUGO_SHAREGLINT_SIGNING_SECRET` — ustaw go w CI, nigdy w `hugo.toml`. Bez niego build wypisze ostrzeżenie i użyje adresu auto-OG.
Z ?wait=true czekasz na gotowy obrazek w tym samym połączeniu — zwykle około sekundy.
{
"id": "img_01m08s3ez1zcv28h335g9923bw",
"status": "completed",
"url": "https://cdn.shareglint.com/renders/img_01m08s3ez1zcv28h335g9923bw.png",
"duration_ms": 912
}
Sto obrazków miesięcznie za darmo, potem $9 za dwa tysiące. Ten sam wpis wyrenderowany drugi raz zwraca istniejący adres i nie zużywa limitu — więc przebudowanie strony nic nie kosztuje.