hugo-extended + AsciiDoc + PlantUML + Docker

hugoは公式のdockerイメージは存在しない

hugoのバイナリは https://github.com/gohugoio/hugo/releases/ に存在するがhugo-extendedは無いので、自分でビルドする必要がある

asciidoctorはdockerイメージが存在するので利用する

asciidoctorはalpineイメージなのでCGO_ENABLED=0でhugoをビルドできればベストだが、ビルドの依存関係上不可能だった

そこでlibc6-compatを追加して対応した

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
FROM golang as hugo-builder

RUN CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@v0.127.0

FROM asciidoctor/docker-asciidoctor

# libc6-compat is required for Hugo
RUN apk add --no-cache \
    libc6-compat \
    curl git make jq \
    ruby-dev alpine-sdk graphviz
RUN gem install bundler json asciidoctor-html5s asciidoctor-diagram

COPY --from=hugo-builder /go/bin/hugo /usr/bin/hugo

WORKDIR /src
RUN git config --global --add safe.directory /src

CMD /usr/bin/hugo server --bind=0.0.0.0

後は下記設定をconfig.yamlに追加する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
markup:
  asciidocext:
    extensions:
      - asciidoctor-html5s
      - asciidoctor-diagram
    workingFolderCurrent: true
    trace: true
    attributes:
      my-base-url: 'https://example.com'

security:
  enableInlineShortcodes: false
  exec:
    allow:
      - '^(dart-)?sass(-embedded)?$'
      - '^go$'
      - '^npx$'
      - '^postcss$'
      - '^asciidoctor$'
    osEnv:
      - '(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE)$'
  funcs:
    getenv:
      - '^HUGO_'
      - '^CI$'
  http:
    methods:
      - '(?i)GET|POST'
    urls:
      - '.*'