diff --git a/README.md b/README.md index e22b628..72cab98 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,18 @@ Additionally, the linux-6*-latex tag include a full TeXlive installation includi --- +## Building docker files + +It's recommended to use the `build.sh` bash script to build the Docker image. They use the `config.toml` in each directory to provide the data for each build, +including the specific PySide versions to use for each. + +Usage: +`bash build.sh [--pyside2] [--pyside6] [--latest] [--no-push] [--repo=ad5001/ubuntu-pyside-xvfb]` + +- --pyside2: Build PySide2 images. +- --pyside6: Build PySide6 images. +- --latest: (Optional) Tag these as latest. +- --no-push: (Optional) Do not push the tags to the Docker registry. +- --repo: (Optional) Repository on the Docker registry which to push the images to. + NOTE: In Docker, use xvfb-run to run a program within a Xvfb server. diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..ecc4cab --- /dev/null +++ b/build.sh @@ -0,0 +1,150 @@ +#!/bin/bash +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# shellcheck disable=SC2046 + +# Resets all ansi codes. +RESET="\e[0m" +# Sets the forground color to light green. +L_GREEN_FG="\e[32m" +# Sets the forground color to red. +RED_FG="\e[38;5;204m" + +# Display text in a box +# Signature: () -> string +box() { + len=${#1} + echo "┌─$(yes ─ | head -$len | tr -d "\n")─┐" + echo "│ $1 │" + echo "└─$(yes ─ | head -$len | tr -d "\n")─┘" +} + +box_red() { + echo -n "$RED_FG" + box "$@" + echo -n "$RESET" +} + +box_green() { + echo -n "$L_GREEN_FG" + box "$@" + echo -n "$RESET" +} + +# Converts arguments from an INI/singular dict TOML file into a list of build args for docker. +# Signature: () -> string +config_to_docker_args() { + grep '="' "$1" | sed 's@^@--build-arg @g' | paste -s -d " " +} + +# Queries a value from an INI/singular dict TOML file into for a given key +# Signature: (, ) -> string +query_from_config() { + grep "$2=" "$1" | cut -d'"' -f 2 +} + +pyside6=false +pyside2=false +latest=false +push=true +repo="ad5001/ubuntu-pyside-xvfb" + +# Query arguments + +while [ $# -gt 0 ]; do + case "$1" in + --pyside6) + pyside6=true + ;; + --pyside2) + pyside2=true + ;; + --latest) + latest=true + ;; + --no-push) + push=false + ;; + --repo=*) + repo="${1#*=}" + ;; + *) + box "Error: Invalid argument." + exit 1 + esac + shift +done + +if [ "$pyside6" = "false" ] && [ "$pyside2" = "false" ]; then + box "Must at least either use --pyside2 or --pyside6" +fi + +# Build PySide6 +if [ "$pyside6" != "false" ]; then + config="pyside6/config.toml" + version=$(query_from_config "$config" "PYSIDE6_VERSION") + tag_linux="${repo}:linux-${version}" + tag_wine="${repo}:wine-${version}" + tag_linux_latex="${repo}:linux-${version}-latex" + # Building + box "Building PySide6 Linux Image..." + docker build -t "${tag_linux}" $(config_to_docker_args "$config") pyside6/linux + box "Building PySide6 Wine Image..." + docker build -t "${tag_wine}" $(config_to_docker_args "$config") pyside6/wine + box "Building PySide6 Linux-Latex Image..." + docker build -t "${tag_linux_latex}" $(config_to_docker_args "$config") --build-arg BASE_IMAGE="${tag_linux}" pyside6/linux-latex + # Tagging + if [ "$latest" != "false" ]; then + docker tag "${tag_linux}" "${repo}:linux-6-latest" + docker tag "${tag_wine}" "${repo}:wine-6-latest" + docker tag "${tag_linux_latex}" "${repo}:linux-6-latest-latex" + fi + # Pushing + if [ "$push" != "true" ]; then + docker push "${tag_linux}" + docker push "${tag_wine}" + docker push "${tag_linux_latex}" + if [ "$latest" != "false" ]; then + docker push "${repo}:linux-6-latest" + docker push "${repo}:wine-6-latest" + docker push "${repo}:linux-6-latest-latex" + fi + fi +fi + +# Build PySide2 +if [ "$pyside2" != "false" ]; then + config="pyside2/config.toml" + version=$(query_from_config "$config" "PYSIDE2_VERSION") + tag_linux="${repo}:linux-${version}" + tag_wine="${repo}:wine-${version}" + # Building + box "Building PySide2 Linux Image..." + docker build -t "${tag_linux}" $(config_to_docker_args "$config") pyside2/linux + box "Building PySide2 Wine Image..." + docker build -t "${tag_wine}" $(config_to_docker_args "$config") pyside2/wine + # Tagging + if [ "$latest" != "false" ]; then + docker tag "${tag_linux}" "${repo}:linux-5-latest" + docker tag "${tag_wine}" "${repo}:wine-5-latest" + fi + # Pushing + if [ "$push" != "true" ]; then + docker push "${tag_linux}" + docker push "${tag_wine}" + if [ "$latest" != "false" ]; then + docker push "${repo}:linux-5-latest" + docker push "${repo}:wine-5-latest" + fi + fi +fi diff --git a/pyside2/config.toml b/pyside2/config.toml new file mode 100644 index 0000000..4f54971 --- /dev/null +++ b/pyside2/config.toml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +PYSIDE2_VERSION="5.12.2.1" + +# Arguments for wine builds +PYTHON_VERSION="3.10.11" +PYINSTALLER_VERSION="6.10.0" + diff --git a/pyside2-linux/Dockerfile b/pyside2/linux/Dockerfile similarity index 57% rename from pyside2-linux/Dockerfile rename to pyside2/linux/Dockerfile index 047ff09..a182252 100644 --- a/pyside2-linux/Dockerfile +++ b/pyside2/linux/Dockerfile @@ -1,3 +1,15 @@ +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + FROM ubuntu:jammy # Jammy uses python3.10 and not 3.12, which is not compatible with PySide2. @@ -8,7 +20,7 @@ ENV TZ=Europe/Paris RUN apt-get update RUN apt-get upgrade -y RUN apt-get -y install make git rpm dh-python \ - xvfb xdotool wmctrl \ + xvfb xdotool wmctrl libxcb-cursor0 \ python3 python3-pip python3-stdeb python3-requests python3-packaging python3-pip python3-pytest python3-pytest-cov python3-pytestqt \ qml-module-qtquick-controls2 qml-module-qtmultimedia qml-module-qtgraphicaleffects qml-module-qtquick2 qml-module-qtqml-models2 qml-module-qtquick-controls RUN python3 -m pip install -U pip py certifi setuptools wheel # Upgrading packages that need fixes. diff --git a/pyside2-wine/Dockerfile b/pyside2/wine/Dockerfile similarity index 86% rename from pyside2-wine/Dockerfile rename to pyside2/wine/Dockerfile index 30da488..b673b33 100644 --- a/pyside2-wine/Dockerfile +++ b/pyside2/wine/Dockerfile @@ -1,3 +1,15 @@ +# +# Copyright (c) 2021-2024 Ad5001, 2016 Chris R +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + FROM ubuntu:noble ARG PYSIDE2_VERSION=5.15.2.1 @@ -9,7 +21,7 @@ ENV DEBIAN_FRONTEND noninteractive ARG WINE_VERSION=winehq-staging ARG PYTHON_VERSION=3.10.11 # Python3.10 are the last supported version of Python for PySide2. -ARG PYINSTALLER_VERSION=5.0.1 +ARG PYINSTALLER_VERSION=6.10.0 # we need wine for this all to work, so we'll use the PPA RUN set -x \ diff --git a/pyside6-linux-latex/Dockerfile b/pyside6-linux-latex/Dockerfile deleted file mode 100644 index ba7554e..0000000 --- a/pyside6-linux-latex/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM ad5001/ubuntu-pyside-xvfb:linux-6.7.2 - -ENV TZ=Europe/Paris -RUN apt-get update -RUN apt-get -y install texlive-base dvipng texlive-latex-extra -RUN apt clean diff --git a/pyside6/config.toml b/pyside6/config.toml new file mode 100644 index 0000000..89f2b8d --- /dev/null +++ b/pyside6/config.toml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +PYSIDE6_VERSION="6.7.2" + +# Arguments for wine builds +PYTHON_VERSION="3.12.6" +PYINSTALLER_VERSION="6.10.0" + diff --git a/pyside6/linux-latex/Dockerfile b/pyside6/linux-latex/Dockerfile new file mode 100644 index 0000000..9ef7349 --- /dev/null +++ b/pyside6/linux-latex/Dockerfile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +ARG BASE_IMAGE=ad5001/ubuntu-pyside-xvfb:linux-6-latest + +FROM ${BASE_IMAGE} + +ENV TZ=Europe/Paris +RUN apt-get update +RUN apt-get -y install texlive-base dvipng texlive-latex-extra +RUN apt clean diff --git a/pyside6-linux/Dockerfile b/pyside6/linux/Dockerfile similarity index 51% rename from pyside6-linux/Dockerfile rename to pyside6/linux/Dockerfile index e0feb05..0577b43 100644 --- a/pyside6-linux/Dockerfile +++ b/pyside6/linux/Dockerfile @@ -1,3 +1,14 @@ +# +# Copyright (c) 2021-2024 Ad5001 +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# FROM ubuntu:noble ARG DEBIAN_FRONTEND=noninteractive @@ -7,7 +18,7 @@ ENV TZ=Europe/Paris RUN apt-get update RUN apt-get upgrade -y RUN apt-get -y install make git rpm dh-python \ - xvfb xdotool wmctrl \ + xvfb xdotool wmctrl libxcb-cursor0 \ python3 python3-pip python3-stdeb python3-requests python3-packaging python3-pip python3-pytest python3-pytest-cov python3-pytestqt RUN rm /usr/lib/python3.*/EXTERNALLY-MANAGED # Disable managed environment. We don't care about breaking system packages here. RUN python3 -m pip install -U setuptools # Upgrading packages that need fixes. diff --git a/pyside6-wine/Dockerfile b/pyside6/wine/Dockerfile similarity index 84% rename from pyside6-wine/Dockerfile rename to pyside6/wine/Dockerfile index 1639523..1bb223c 100644 --- a/pyside6-wine/Dockerfile +++ b/pyside6/wine/Dockerfile @@ -1,6 +1,18 @@ +# +# Copyright (c) 2021-2024 Ad5001, 2016 Chris R +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + FROM ubuntu:noble -ARG PYSIDE2_VERSION=6.7.2 +ARG PYSIDE6_VERSION=6.7.2 # Adapted from https://github.com/cdrx/docker-pyinstaller/blob/master/Dockerfile-py3-win64 # Upstream hasn't been updated for a while. @@ -78,4 +90,4 @@ RUN set -x \ RUN apt install -y wget curl p7zip-full git unzip nsis xvfb xdotool wmctrl RUN apt clean # Installing pyside6 & pyinstaller -RUN pip install wheel PySide6==$PYSIDE2_VERSION pyinstaller==$PYINSTALLER_VERSION requests pytest pytest-cov pytest-qt packaging +RUN pip install wheel PySide6==$PYSIDE6_VERSION pyinstaller==$PYINSTALLER_VERSION requests pytest pytest-cov pytest-qt packaging