Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 48 additions & 39 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ FROM ruby:3.3.7
ARG TARGETPLATFORM

## NOTE: installing beta version of mkdocs-material with blog support.
LABEL version="1.5.8" \
mode="sitebuilder-1.5.8" \
LABEL version="1.5.9" \
mode="sitebuilder-1.5.9" \
author="Samirkumar Amin" \
description="docker image to build jekyll, hugo or mkdocs supported website" \
website="https://github.com/sbamin/sitebuilder" \
Expand All @@ -22,30 +22,40 @@ LABEL version="1.5.8" \
## https://stackoverflow.com/a/56569081/1243763
ARG DEBIAN_FRONTEND=noninteractive

#### Configure locales ####
#### Configure locales, python3, git (via PPA) ####
## https://github.com/jekyll/jekyll/issues/4268
RUN apt-get update && \
apt-get install -y locales python3 python3-venv python3-distutils && \
apt-get install -y software-properties-common && \
apt-get install -y --no-install-recommends \
locales \
python3 \
python3-venv \
python3-distutils \
python3-launchpadlib \
software-properties-common && \
add-apt-repository ppa:git-core/ppa && \
apt-get update && \
apt-get install -y --no-install-recommends git && \
dpkg-reconfigure --frontend noninteractive locales && \
locale-gen C.UTF-8 && \
/usr/sbin/update-locale LANG=C.UTF-8 && \
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
locale-gen && \
apt-get clean
apt-get clean && \
rm -rf /var/lib/apt/lists/*

## Set default locale
ENV LC_ALL="C.UTF-8"
ENV LANG="en_US.UTF-8"
ENV LANGUAGE="en_US.UTF-8"
ENV myhugo="0.153.2"
ENV mygo="1.25.5"
ENV mydartsass="1.97.1"
ENV myhugo="0.155.3"
ENV mygo="1.26.0"
ENV mydartsass="1.97.3"
ENV mypagefind="v1.5.0-beta.1"

#### Python 3 venv ####
# Create and activate a Python virtual environment
RUN python3 -m venv /opt/venv && \
/opt/venv/bin/pip install --upgrade pip setuptools wheel
/opt/venv/bin/pip install --no-cache-dir --upgrade pip setuptools wheel

ENV PATH="/opt/venv/bin:$PATH"

Expand All @@ -54,57 +64,56 @@ ENV PATH="/opt/venv/bin:$PATH"
## This may differ based on gems and plugins used
COPY Gemfile /tmp/

## jekyll setup
RUN mkdir -p /scratch && \
mv /tmp/Gemfile /scratch/ && \
cd /scratch && \
bundle install && \
mkdir -p /web

#### git ####
RUN apt-get install -y python3-launchpadlib && \
add-apt-repository ppa:git-core/ppa && \
apt-get update && \
apt-get install -y python3-launchpadlib git && \
git --version

#### Hugo, MkDocs, and theme-mkdocs-material ####
#### MkDocs, mkdocs-material, and plugins ####
## https://github.com/squidfunk/mkdocs-material
## issue with Hash Sum mismatch
RUN rm -rf /var/lib/apt/lists/partial && \
apt-get update -o Acquire::CompressionTypes::Order::=gz && \
pip3 install --upgrade singledispatch nltk six && \
## force update packages if failed earlier
pip3 install --upgrade singledispatch nltk six && \
pip3 install markdown pygments fontawesome_markdown pymdown-extensions && \
pip3 install "mkdocs-material[imaging,recommended,git]" && \
pip3 install mkdocs mkdocs-material mkdocs-git-revision-date-plugin mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin mkdocs-redirects pymdown-extensions mkdocs-macros-plugin mike mkdocs-git-authors-plugin mkdocs-glightbox && \
## force update mkdocs env
pip3 install --upgrade "mkdocs-material[imaging,recommended,git]" && \
pip3 install --upgrade markdown pygments fontawesome_markdown pymdown-extensions && \
pip3 install --upgrade mkdocs mkdocs-material mkdocs-git-revision-date-plugin mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin mkdocs-redirects pymdown-extensions mkdocs-macros-plugin mike mkdocs-git-authors-plugin mkdocs-glightbox mkdocstrings mkdocstrings-python mkdocstrings-shell && \
RUN pip3 install --no-cache-dir \
singledispatch nltk six \
markdown pygments fontawesome_markdown pymdown-extensions \
"mkdocs-material[imaging,recommended,git]" \
mkdocs mkdocs-material \
mkdocs-git-revision-date-plugin \
mkdocs-git-revision-date-localized-plugin \
mkdocs-minify-plugin \
mkdocs-redirects \
mkdocs-macros-plugin \
mike \
mkdocs-git-authors-plugin \
mkdocs-glightbox \
mkdocstrings mkdocstrings-python mkdocstrings-shell \
mkquartodocs && \
git config --global --add safe.directory /web

## install latest hugo extended, including GO
## install latest hugo extended, including GO, dart-sass, and pagefind
## requires OS arch variable
RUN case "$TARGETPLATFORM" in \
"linux/amd64") ARCH="amd64"; ARCH2="x64" ;; \
"linux/arm64") ARCH="arm64"; ARCH2="arm64" ;; \
"linux/amd64") ARCH="amd64"; ARCH2="x64"; ARCH3="x86_64" ;; \
"linux/arm64") ARCH="arm64"; ARCH2="arm64"; ARCH3="aarch64" ;; \
*) echo "Unsupported architecture: $TARGETPLATFORM" && exit 1 ;; \
esac && \
echo "Building for ARCH=$ARCH" && \
wget https://github.com/gohugoio/hugo/releases/download/v${myhugo}/hugo_extended_${myhugo}_linux-${ARCH}.deb && \
wget -q https://github.com/gohugoio/hugo/releases/download/v${myhugo}/hugo_extended_${myhugo}_linux-${ARCH}.deb && \
apt install ./hugo_extended_${myhugo}_linux-${ARCH}.deb -y && \
rm -f hugo_extended_${myhugo}_linux-${ARCH}.deb && \
wget https://go.dev/dl/go${mygo}.linux-${ARCH}.tar.gz && \
tar -C /usr/local -xvzf go${mygo}.linux-${ARCH}.tar.gz && \
wget -q https://go.dev/dl/go${mygo}.linux-${ARCH}.tar.gz && \
tar -C /usr/local -xzf go${mygo}.linux-${ARCH}.tar.gz && \
mkdir -p /opt/go/bin && \
chmod 775 /opt/go && \
chmod 775 /opt/go/bin && \
wget https://github.com/sass/dart-sass/releases/download/${mydartsass}/dart-sass-${mydartsass}-linux-${ARCH2}-musl.tar.gz && \
wget -q https://github.com/sass/dart-sass/releases/download/${mydartsass}/dart-sass-${mydartsass}-linux-${ARCH2}-musl.tar.gz && \
mkdir -p /opt/dart && \
chmod 775 /opt/dart && \
tar -C /opt/dart -xvzf dart-sass-${mydartsass}-linux-${ARCH2}-musl.tar.gz && \
tar -C /opt/dart -xzf dart-sass-${mydartsass}-linux-${ARCH2}-musl.tar.gz && \
mv -f /opt/dart/dart-sass /opt/dart/bin && \
## install pagefind
curl -sL https://github.com/Pagefind/pagefind/releases/download/${mypagefind}/pagefind-${mypagefind}-${ARCH3}-unknown-linux-musl.tar.gz | tar xz -C /usr/local/bin && \
chmod 755 /usr/local/bin/pagefind && \
apt-get clean && \
rm -f go${mygo}.linux-${ARCH}.tar.gz && \
rm -f dart-sass-${mydartsass}-linux-${ARCH2}-musl.tar.gz && \
Expand Down
45 changes: 23 additions & 22 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (8.1.1)
activesupport (8.1.2)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
Expand Down Expand Up @@ -39,20 +39,20 @@ GEM
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.10.0)
faraday (2.14.0)
faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.2)
net-http (~> 0.5)
ffi (1.17.2-aarch64-linux-gnu)
ffi (1.17.2-aarch64-linux-musl)
ffi (1.17.2-arm-linux-gnu)
ffi (1.17.2-arm-linux-musl)
ffi (1.17.2-arm64-darwin)
ffi (1.17.2-x86_64-darwin)
ffi (1.17.2-x86_64-linux-gnu)
ffi (1.17.2-x86_64-linux-musl)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-aarch64-linux-musl)
ffi (1.17.3-arm-linux-gnu)
ffi (1.17.3-arm-linux-musl)
ffi (1.17.3-arm64-darwin)
ffi (1.17.3-x86_64-darwin)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.3-x86_64-linux-musl)
forwardable-extended (2.6.0)
gemoji (4.1.0)
github-pages (232)
Expand Down Expand Up @@ -224,13 +224,14 @@ GEM
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.18.0)
json (2.18.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.9.0)
listen (3.10.0)
logger
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
Expand All @@ -239,32 +240,32 @@ GEM
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (6.0.0)
minitest (6.0.1)
prism (~> 1.5)
net-http (0.9.1)
uri (>= 0.11.1)
nokogiri (1.18.10-aarch64-linux-gnu)
nokogiri (1.19.0-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.18.10-aarch64-linux-musl)
nokogiri (1.19.0-aarch64-linux-musl)
racc (~> 1.4)
nokogiri (1.18.10-arm-linux-gnu)
nokogiri (1.19.0-arm-linux-gnu)
racc (~> 1.4)
nokogiri (1.18.10-arm-linux-musl)
nokogiri (1.19.0-arm-linux-musl)
racc (~> 1.4)
nokogiri (1.18.10-arm64-darwin)
nokogiri (1.19.0-arm64-darwin)
racc (~> 1.4)
nokogiri (1.18.10-x86_64-darwin)
nokogiri (1.19.0-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.18.10-x86_64-linux-gnu)
nokogiri (1.19.0-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.18.10-x86_64-linux-musl)
nokogiri (1.19.0-x86_64-linux-musl)
racc (~> 1.4)
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
prism (1.7.0)
prism (1.9.0)
public_suffix (5.1.1)
racc (1.8.1)
rb-fsevent (0.11.2)
Expand Down
50 changes: 30 additions & 20 deletions update_sitebuilder.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Here, I am using `docker buildx build` from [Docker Desktop v4.22.0 on mac os 15
## replace --push with --load to load arch specific image locally
docker buildx build \
--platform linux/arm64/v8,linux/amd64 \
--tag sbamin/sitebuilder:1.5.8 \
--tag sbamin/sitebuilder:1.5.9 \
--tag sbamin/sitebuilder:latest \
--push \
--file Dockerfile .
Expand Down Expand Up @@ -68,10 +68,10 @@ exit

```sh
## we already pushed both, updated version and latest tag to docker
docker run --rm sbamin/sitebuilder /bin/bash -c "jekyll --version && hugo version && git version && go version && pip list | grep mkdocs"
docker run --rm sbamin/sitebuilder /bin/bash -c "jekyll --version && hugo version && git version && go version && pip list | grep -E 'mkdocs|quarto' && pagefind --version && sass --version"

## for non-os compliant OS, e.g., amd64 if using macos M2
docker run --platform linux/amd64 --rm sbamin/sitebuilder /bin/bash -c "jekyll --version && hugo version && git version && go version && pip list | grep mkdocs"
docker run --platform linux/amd64 --rm sbamin/sitebuilder /bin/bash -c "jekyll --version && hugo version && git version && go version && pip list | grep -E 'mkdocs|quarto' && pagefind --version && sass --version"
```

### Update github releases
Expand All @@ -83,55 +83,65 @@ git add Dockerfile Gemfile Gemfile.lock update_sitebuilder.md README.md
## -s requires a valid gpg key for signing a message
git commit -s -F- <<EOF
Updated sitebuilder
v1.5.8
v1.5.9

- ✨ added pagefind search
- πŸ™…β€β™‚οΈ mkquartodocs plugin is not functional
- prefer running quarto docs locally and copy generated md or html to sitebuilder

## amd64

jekyll 3.10.0
hugo v0.153.2-798533a2013eab97198b0a155a8f4afab7e79865+extended linux/amd64 BuildDate=2025-12-22T16:53:01Z VendorInfo=gohugoio
hugo v0.155.3-8a858213b73907e823e2be2b5640a0ce4c04d295+extended linux/amd64 BuildDate=2026-02-08T16:40:42Z VendorInfo=gohugoio
git version 2.39.5
go version go1.25.5 linux/amd64
go version go1.26.0 linux/amd64
mkdocs 1.6.1
mkdocs-autorefs 1.4.3
mkdocs-autorefs 1.4.4
mkdocs-get-deps 0.2.0
mkdocs-git-authors-plugin 0.10.0
mkdocs-git-committers-plugin-2 2.5.0
mkdocs-git-revision-date-localized-plugin 1.5.0
mkdocs-git-revision-date-localized-plugin 1.5.1
mkdocs-git-revision-date-plugin 0.3.2
mkdocs-glightbox 0.5.2
mkdocs-macros-plugin 1.5.0
mkdocs-material 9.7.1
mkdocs-material-extensions 1.3.1
mkdocs-minify-plugin 0.8.0
mkdocs-redirects 1.2.2
mkdocs-rss-plugin 1.17.7
mkdocstrings 1.0.0
mkdocstrings-python 2.0.1
mkdocs-rss-plugin 1.17.9
mkdocstrings 1.0.3
mkdocstrings-python 2.0.2
mkdocstrings-shell 1.0.4
mkquartodocs 0.7.0
pagefind 1.5.0-beta.1
Ruby Sass 3.7.4

## arm64

jekyll 3.10.0
hugo v0.153.2-798533a2013eab97198b0a155a8f4afab7e79865+extended linux/arm64 BuildDate=2025-12-22T16:53:01Z VendorInfo=gohugoio
hugo v0.155.3-8a858213b73907e823e2be2b5640a0ce4c04d295+extended linux/arm64 BuildDate=2026-02-08T16:40:42Z VendorInfo=gohugoio
git version 2.39.5
go version go1.25.5 linux/arm64
go version go1.26.0 linux/arm64
mkdocs 1.6.1
mkdocs-autorefs 1.4.3
mkdocs-autorefs 1.4.4
mkdocs-get-deps 0.2.0
mkdocs-git-authors-plugin 0.10.0
mkdocs-git-committers-plugin-2 2.5.0
mkdocs-git-revision-date-localized-plugin 1.5.0
mkdocs-git-revision-date-localized-plugin 1.5.1
mkdocs-git-revision-date-plugin 0.3.2
mkdocs-glightbox 0.5.2
mkdocs-macros-plugin 1.5.0
mkdocs-material 9.7.1
mkdocs-material-extensions 1.3.1
mkdocs-minify-plugin 0.8.0
mkdocs-redirects 1.2.2
mkdocs-rss-plugin 1.17.7
mkdocstrings 1.0.0
mkdocstrings-python 2.0.1
mkdocs-rss-plugin 1.17.9
mkdocstrings 1.0.3
mkdocstrings-python 2.0.2
mkdocstrings-shell 1.0.4
mkquartodocs 0.7.0
pagefind 1.5.0-beta.1
Ruby Sass 3.7.4

EOF

Expand All @@ -142,9 +152,9 @@ git push

With buildx command and `--push` argument above, we already have uploaded images to docker hub, include `latest` alias.

* Confirm using `docker images` that IMAGE ID of a built image, `sbamin/sitebuilder:1.5.x` matches with aliases created above. If all good, remove previous version of sitebuilder, `docker rmi sbamin/sitebuilder:1.5.4`
* Confirm using `docker images` that IMAGE ID of a built image, `sbamin/sitebuilder:1.5.x` matches with aliases created above. If all good, remove previous version of sitebuilder, `docker rmi sbamin/sitebuilder:1.5.*`

Besides updating Docker Hub, if you are updating image also to github packages, update respective aliases. **I have stopped updating github container repo past v[1.5.6](https://github.com/sbamin/sitebuilder/releases)**
Besides updating Docker Hub, if you are updating image also to github packages, update respective aliases.

* If using github container repo, this should work.

Expand Down