diff --git a/.gitignore b/.gitignore index cc90009..605749a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /build.log +.idea \ No newline at end of file diff --git a/Dockerfile-full b/Dockerfile-full index 266f1fd..9346aa3 100644 --- a/Dockerfile-full +++ b/Dockerfile-full @@ -2,6 +2,8 @@ FROM foliant/foliant:pandoc RUN apt update +RUN apt install --reinstall ca-certificates + COPY ./dependency_files/ /usr/src/app/dependency_files/ # Needed for ImageMagick @@ -13,11 +15,36 @@ RUN rm -rf /etc/ImageMagick-6/policy.xml \ # Needed for Puppeteer RUN apt install -y libasound2 -RUN wget -q -O - https://deb.nodesource.com/setup_11.x | bash +RUN wget -q -O - https://deb.nodesource.com/setup_12.x | bash RUN apt install -y nodejs -RUN npm install puppeteer@2.0.0 +RUN npm install puppeteer@5.2.1 + +# Needed for BPMN preprocessor + +RUN npm install -g bpmn-to-image@0.5.1 --unsafe-perm + +# Needed for Argdown preprocessor + +RUN npm install -g @argdown/cli +RUN npm install -g @argdown/image-export --unsafe-perm + +####################### +# Databases for DBDoc # +####################### + +# MS SQL Server +RUN apt-get install -y unixodbc-dev +RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +RUN wget -O /etc/apt/sources.list.d/mssql-release.list https://packages.microsoft.com/config/ubuntu/20.04/prod.list +RUN apt-get update +RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 + +# MySQL +RUN apt-get install -y mysql-server libmysqlclient-dev + +####################### RUN npm install -g widdershins @@ -32,8 +59,8 @@ RUN npm install -g raml2html raml2html-full-markdown-theme RUN mkdir -p /usr/src/app/dependency_files/slate/ \ && cd /usr/src/app/dependency_files/slate/ \ - && wget -O ./Gemfile https://raw.githubusercontent.com/slatedocs/slate/master/Gemfile \ - && wget -O ./Gemfile.lock https://raw.githubusercontent.com/slatedocs/slate/master/Gemfile.lock \ + && wget -O ./Gemfile https://raw.githubusercontent.com/slatedocs/slate/main/Gemfile \ + && wget -O ./Gemfile.lock https://raw.githubusercontent.com/slatedocs/slate/main/Gemfile.lock \ && apt install -y zlib1g-dev ruby-full \ && gem install bundler \ && bundle install diff --git a/Dockerfile-pandoc b/Dockerfile-pandoc index 99ad3b2..e47e03c 100644 --- a/Dockerfile-pandoc +++ b/Dockerfile-pandoc @@ -2,5 +2,5 @@ FROM foliant/foliant ENV DEBIAN_FRONTEND noninteractive RUN apt update && apt install -y wget texlive-full librsvg2-bin -RUN wget https://github.com/jgm/pandoc/releases/download/2.9.2/pandoc-2.9.2-1-amd64.deb && dpkg -i pandoc-2.9.2-1-amd64.deb +RUN wget https://github.com/jgm/pandoc/releases/download/2.10/pandoc-2.10-1-amd64.deb && dpkg -i pandoc-2.10-1-amd64.deb RUN pip3 install foliantcontrib.pandoc diff --git a/Dockerfile-slim b/Dockerfile-slim index d919384..078e7f8 100644 --- a/Dockerfile-slim +++ b/Dockerfile-slim @@ -1,4 +1,4 @@ -FROM ubuntu:eoan +FROM ubuntu:focal LABEL authors="Konstantin Molchanov " diff --git a/README.md b/README.md new file mode 100644 index 0000000..abd96a4 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +# Docker +Docker is a project that helps develop, update and publish Docker images for Foliant. + +## Overview +There are four Docker images to build different versions of Foliant. +This repo contains Dockerfiles to build each Docker image. +Also, +each Dockerfile has its own build-and-publish script +to publish images to [Docker Hub](https://hub.docker.com/r/foliant/foliant/tags). + +## header + +* `foliant/foliant:slim` — minimal image of Foliant core with no extensions. + * [Dockerfile-slim](https://github.com/foliant-docs/docker/blob/master/Dockerfile-slim) + * [build_slim.sh](https://github.com/foliant-docs/docker/blob/master/build_slim.sh) + +* `foliant/foliant` — the default image with Foliant core and the foliantcontrib.init extension + * [Dockerfile](https://github.com/foliant-docs/docker/blob/master/Dockerfile) + * [build_latest.sh](https://github.com/foliant-docs/docker/blob/master/build_latest.sh) +* `foliant/foliant:pandoc` — the image with foliantcontrib.pandoc and its dependencies: +TexLive and Pandoc for building PDF and DOCX + * [Dockerfile-pandoc](https://github.com/foliant-docs/docker/blob/master/Dockerfile-pandoc) + * [build_pandoc.sh](https://github.com/foliant-docs/docker/blob/master/build_pandoc.sh) +* `foliant/foliant:full` — the full image with all official Foliant extensions and third-party tools required for them to work + * [Dockerfile-full](https://github.com/foliant-docs/docker/blob/master/Dockerfile-full) + * [build_full.sh](https://github.com/foliant-docs/docker/blob/master/build_full.sh) + +* [Makefile](https://github.com/foliant-docs/docker/blob/master/Makefile) needed to build Docker images on local computer + +## Docker images dependencies + +Docker images build with Dockerfiles based on a previous light version in the following order: +> Dockerfile-slim → Dockerfile → Dockerfile-pandoc → Dockerfile-full + +It means that if you update `foliant/foliant:slim`, you should update all its dependants after: +`foliant/foliant` then `foliant/foliant:pandoc` then `foliant/foliant:full`. If you want to update `foliant/foliant`, +you should update `foliant/foliant:pandoc` then `foliant/foliant:full` etc. + +### Which image to update? + +* When [Foliant-core](https://github.com/foliant-docs/foliant) updates: + > update `foliant/foliant:slim` → `foliant/foliant` → `foliant/foliant:pandoc` → `foliant/foliant:full` + +* When [foliantcontrib.init](https://github.com/foliant-docs/foliantcontrib.init) updates: + > update `foliant/foliant` → `foliant/foliant:pandoc` → `foliant/foliant:full` + +* When [foliantcontrib.pandoc](https://github.com/foliant-docs/foliantcontrib.pandoc) updates: + > update `foliant/foliant:pandoc` → `foliant/foliant:full` + +* When any other Foliant extension updates: + > update `foliant/foliant:full` and [requirements.txt](https://github.com/foliant-docs/docker/blob/master/dependency_files/python_packages/requirements.txt) + > from `dependency_files/python_packages/requirements.txt` + +## Update procedure +To update Docker-image on Docker Hub, you should: +1. Clone, pull or download this repo on your computer. +2. Update dependencies if needed. +3. Push changes to this repo. +4. Run a script which related to Docker-image you needed: + +```bash +# In the project directory + +./build_slim.sh # for foliant/foliant:slim +./build_latest.sh # for foliant/foliant +./build_pandoc.sh # for foliant/foliant:pandoc +./build_full.sh # for foliant/foliant:full +``` + +#### How to tag image (optional) +Scripts set tag for published image automatically. But you can tag the image manually as a script parameter: +```bash +./build_full.sh 1.0.13 +``` + +#### Docker Hub authorization +To push images to the [Foliant project on Docker Hub](https://hub.docker.com/r/foliant/foliant/), +you need an account on Docker Hub with appropriate rights. diff --git a/build_full.sh b/build_full.sh index 2fc576b..08cea7b 100755 --- a/build_full.sh +++ b/build_full.sh @@ -9,7 +9,7 @@ else fi if [ ! $1 ] ; then - FOLIANT_VERSION=`curl https://raw.githubusercontent.com/foliant-docs/foliant/develop/foliant/__init__.py | grep -${grep_option}o "\d+\.\d+\.\d+"` + FOLIANT_VERSION=`curl https://raw.githubusercontent.com/foliant-docs/foliant/master/foliant/__init__.py | grep -${grep_option}o "\d+\.\d+\.\d+"` else FOLIANT_VERSION=$1 fi diff --git a/build_latest.sh b/build_latest.sh new file mode 100755 index 0000000..cad4c67 --- /dev/null +++ b/build_latest.sh @@ -0,0 +1,10 @@ +#!/bin/bash -e + + +echo "Building and pushing the latest image" + +docker pull foliant/foliant:slim +docker login +docker build --no-cache -t foliant/foliant ./ 2>&1 | tee ./build.log +docker push foliant/foliant +docker logout diff --git a/build_pandoc.sh b/build_pandoc.sh new file mode 100755 index 0000000..6a3fce6 --- /dev/null +++ b/build_pandoc.sh @@ -0,0 +1,24 @@ +#!/bin/bash -e + +os_type=`uname` + +if [ "${os_type}" == 'Darwin' ] ; then + grep_option='E' +else + grep_option='P' +fi + +if [ ! $1 ] ; then + FOLIANT_VERSION=`curl https://raw.githubusercontent.com/foliant-docs/foliant/master/foliant/__init__.py | grep -${grep_option}o "\d+\.\d+\.\d+"` +else + FOLIANT_VERSION=$1 +fi + +echo "Building and pushing the pandoc image for Foliant ${FOLIANT_VERSION}" + +docker pull foliant/foliant +docker login +docker build --no-cache -t foliant/foliant:pandoc -t foliant/foliant:${FOLIANT_VERSION}-pandoc -f Dockerfile-pandoc ./ 2>&1 | tee ./build.log +docker push foliant/foliant:pandoc +docker push foliant/foliant:${FOLIANT_VERSION}-pandoc +docker logout diff --git a/build_slim.sh b/build_slim.sh new file mode 100755 index 0000000..f8d8885 --- /dev/null +++ b/build_slim.sh @@ -0,0 +1,24 @@ +#!/bin/bash -e + +os_type=`uname` + +if [ "${os_type}" == 'Darwin' ] ; then + grep_option='E' +else + grep_option='P' +fi + +if [ ! $1 ] ; then + FOLIANT_VERSION=`curl https://raw.githubusercontent.com/foliant-docs/foliant/master/foliant/__init__.py | grep -${grep_option}o "\d+\.\d+\.\d+"` +else + FOLIANT_VERSION=$1 +fi + +echo "Building and pushing the slim image for Foliant ${FOLIANT_VERSION}" + +docker pull ubuntu:focal +docker login +docker build --no-cache --build-arg VERSION=${FOLIANT_VERSION} -t foliant/foliant:slim -t foliant/foliant:${FOLIANT_VERSION}-slim -f Dockerfile-slim ./ 2>&1 | tee ./build.log +docker push foliant/foliant:slim +docker push foliant/foliant:${FOLIANT_VERSION}-slim +docker logout diff --git a/dependency_files/python_packages/requirements.txt b/dependency_files/python_packages/requirements.txt index 8963864..e194283 100644 --- a/dependency_files/python_packages/requirements.txt +++ b/dependency_files/python_packages/requirements.txt @@ -1,71 +1,76 @@ -foliantcontrib.admonitions >= 1.0.0 +foliantcontrib.admonitions >= 1.0.1 foliantcontrib.aglio >= 1.0.0 -foliantcontrib.alt_structure >= 0.2.0 -foliantcontrib.anchors >= 1.0.4 -foliantcontrib.apilinks >= 1.1.3 -foliantcontrib.archeme >= 1.0.2 -foliantcontrib.badges >= 1.0.2 +foliantcontrib.alt_structure >= 0.2.1 +foliantcontrib.anchors >= 1.0.7 +foliantcontrib.apilinks >= 1.2.6 +foliantcontrib.apireferences >= 1.0.5 +foliantcontrib.archeme >= 1.0.3 +foliantcontrib.argdown >= 0.1.1 +foliantcontrib.badges >= 1.0.3 foliantcontrib.bindfigma >= 1.0.3 foliantcontrib.bindsympli >= 1.0.13 foliantcontrib.blockdiag >= 1.0.5 +foliantcontrib.bpmn >= 1.0.1 foliantcontrib.bump >= 1.0.2 -foliantcontrib.csvtables >= 1.0.1 -foliantcontrib.customids >= 1.0.6 -foliantcontrib.confluence >= 0.6.10 -foliantcontrib.dbmldoc >= 0.2.4 -foliantcontrib.dbdoc >= 0.1.2 +foliantcontrib.checksources >= 1.0.0 +foliantcontrib.confluence >= 0.6.20 +foliantcontrib.csvtables >= 1.0.2 +foliantcontrib.customids >= 1.0.7 +foliantcontrib.dbdoc >= 0.1.8 +foliantcontrib.dbmldoc >= 0.3.1 +foliantcontrib.downloadfile >= 1.0.1 foliantcontrib.elasticsearch >= 1.0.4 foliantcontrib.epsconvert >= 1.0.7 -foliantcontrib.escapecode >= 1.0.2 +foliantcontrib.escapecode >= 1.0.4 foliantcontrib.flags >= 1.0.2 foliantcontrib.flatten >= 1.0.7 foliantcontrib.glossary >= 1.0.0 -foliantcontrib.graphviz >= 1.1.3 +foliantcontrib.graphviz >= 1.1.5 foliantcontrib.gupload >= 1.1.5 foliantcontrib.history >= 1.0.8 foliantcontrib.imagemagick >= 1.0.2 -foliantcontrib.imgcaptions >= 1.0.2 +foliantcontrib.imgcaptions >= 1.0.3 foliantcontrib.imgconvert >= 1.0.0 -foliantcontrib.includes >= 1.1.9 -foliantcontrib.init >= 1.0.7 +foliantcontrib.includes >= 1.1.13 +foliantcontrib.init >= 1.0.9 foliantcontrib.macros >= 1.0.4 foliantcontrib.mdtopdf >= 1.0.0 -foliantcontrib.mermaid >= 1.0.1 -foliantcontrib.meta >= 1.3.2 -foliantcontrib.metagraph >= 0.1.2 -foliantcontrib.mkdocs >= 1.0.11 -foliantcontrib.multilinetables >= 1.2.2 -foliantcontrib.multiproject >= 1.0.13 +foliantcontrib.mermaid >= 1.0.2 +foliantcontrib.meta >= 1.3.3 +foliantcontrib.metagraph >= 0.1.3 +foliantcontrib.mkdocs >= 1.0.13 +foliantcontrib.multilinetables >= 1.2.3 +foliantcontrib.multiproject >= 1.0.15 foliantcontrib.notifier >= 1.0.0 -foliantcontrib.pandoc >= 1.0.10 -foliantcontrib.pgsqldoc >= 1.1.6 -foliantcontrib.plantuml >= 1.0.6 -foliantcontrib.project_graph >= 1.0.1 -foliantcontrib.ramldoc >= 1.0.1 +foliantcontrib.pandoc >= 1.1.1 +foliantcontrib.pgsqldoc >= 1.1.7 +foliantcontrib.plantuml >= 1.0.10 +foliantcontrib.ramldoc >= 1.0.2 +foliantcontrib.reindexer >= 1.0.1 foliantcontrib.removeexcess >= 1.0.0 -foliantcontrib.replace >= 1.0.4 +foliantcontrib.replace >= 2.0.0 foliantcontrib.runcommands >= 1.0.1 -foliantcontrib.showcommits >= 1.0.2 +foliantcontrib.showcommits >= 1.0.3 foliantcontrib.slate >= 1.0.8 foliantcontrib.slugs >= 1.0.1 foliantcontrib.subset >= 1.0.9 -foliantcontrib.superlinks >= 1.0.4 -foliantcontrib.swaggerdoc >= 1.2.2 -foliantcontrib.templateparser >= 1.0.4 +foliantcontrib.superlinks >= 1.0.12 +foliantcontrib.swaggerdoc >= 1.2.4 +foliantcontrib.templateparser >= 1.0.6 foliantcontrib.testcoverage >= 0.1.1 -foliantcontrib.testrail >= 1.2.1 -foliantcontrib.utils.chapters >= 1.0.2 -foliantcontrib.utils.combined_options >= 1.0.9 -foliantcontrib.utils.header_anchors >= 1.0.1 -foliantcontrib.utils.preprocessor_ext >= 1.0.3 +foliantcontrib.testrail >= 1.3.1 +foliantcontrib.utils >= 1.0.3 +foliantcontrib.yaml_include >= 1.0.1 archeme >= 1.0.2 - -mkdocs-material == 4.6.3 -pygments -pymdown-extensions - -lxml -Jinja2 -schema -PyYAML +Jinja2 == 3.1.2 +lxml == 4.9.1 +MarkupSafe == 2.0.1 +mkdocs == 1.3.0 +mkdocs-material == 8.2.14 +mkdocs-material-extensions == 1.0.3 +pydbml == 0.4.2 +pygments == 2.12.0 +pymdown-extensions == 9.4 +PyYAML == 5.4 +schema == 0.7.4