diff --git a/.commitlintrc.yml b/.commitlintrc.yml index 6df0b3034..96dcf8b06 100644 --- a/.commitlintrc.yml +++ b/.commitlintrc.yml @@ -22,6 +22,7 @@ rules: - 1 - 'always' - - core + - docker - utilities - settings - typesetter diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..2240e0de5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM archlinux + +ARG sile_tag=master + +LABEL maintainer='Caleb Maclennan ' +LABEL version="$sile_tag" + +RUN pacman --needed --noconfirm -Syuq && yes | pacman -Sccq + +COPY build-aux/build-for-docker.sh /usr/local/bin/ +RUN build-for-docker.sh + +COPY build-aux/docker-entrypoint.sh /usr/local/bin + +WORKDIR /data +ENTRYPOINT ["docker-entrypoint.sh"] diff --git a/Makefile.am b/Makefile.am index 60415a535..2678077a3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -305,6 +305,10 @@ endif CLEANFILES = $(bin_SCRIPTS) $(dist_man_MANS) $(DEPFILES) $(ACTUALS) $(TESTPDFS) +.PHONY: docker +docker: + docker build --tag siletypesetter/sile:HEAD ./ + gource.webm: mkdir -p /tmp/gravatars convert examples/images/sile-logo.jpg -negate -resize 50% /tmp/sile-logo.jpg diff --git a/build-aux/build-for-docker.sh b/build-aux/build-for-docker.sh new file mode 100755 index 000000000..ad95e853a --- /dev/null +++ b/build-aux/build-for-docker.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -e +o pipefail + +# Setup AUR helper and other build time dependencies in a way they will be removed from the final image +pacman --needed --noconfirm --asdeps -S git base-devel go poppler +useradd -m docker +echo 'docker:' | chpasswd -e +mkdir -p /etc/sudoers.d +echo 'docker ALL = NOPASSWD: ALL' > /etc/sudoers.d/99-docker +su docker -c 'cd; git clone https://aur.archlinux.org/yay.git; cd yay; makepkg -i --noconfirm --asdeps' + +# Install SILE's own prerequisites in a way they will stay in the final image +deps="fontconfig harfbuzza icu lua ttf-gentium-plus" +deps+=" lua-{luaepnf,lpeg,cassowary,linenoise,zlib,cliargs,filesystem,repl,sec,socket,penlight,stdlib,vstruct}" +su docker -c "yay --needed --noconfirm --asexplicit -S $deps" + +# Build and install SILE itself + +# Tear down build time depencies before layer gets imaged +su docker -c 'yay --noconfirm -Yccq' +yes | pacman -Sccq +userdel -r -f docker +rm -rf /etc/sudoers.d diff --git a/build-aux/docker-entrypoint.sh b/build-aux/docker-entrypoint.sh new file mode 100755 index 000000000..dce1ec40a --- /dev/null +++ b/build-aux/docker-entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +if [ "${1#-}" != "${1}" ] || [ -z "$(command -v "${1}")" ]; then + set -- sile "$@" +fi + +exec "$@"