diff --git a/README.md b/README.md index 8854388..a68fdff 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Available Tags: | `latest-base` | libffi-dev, libicu-dev, build-essential, libssl-dev, ca-certificates, jq, sed, grep, git, curl, wget, zip | Base runner with nothing fancy installed
[Dockerfile](images/base/Dockerfile) | | `latest-kaniko-sidecar` | kaniko | Sidecar used by other runner images to build containers without root privileges | | `latest-ansible-k8s` | base-image + ansible, helm, kubectl, skopeo | Runner specialized for automated k8s deployments via ansible
For more Details see [Dockerfile](images/ansible-k8s/Dockerfile) | -| `latest-fullstacked` | base-image + ansible, helm, maven, openjdk-11, nodejs, go, yarn, angular/cli | Runner with a bunch of tools to build your hole application
For more Details see [Dockerfile](images/fullstacked/Dockerfile) | +| `latest-fullstacked` | base-image + ansible, helm, maven, temurin-11, nodejs, go, yarn, angular/cli, chromium | Runner with a bunch of tools to build your hole application
For more Details see [Dockerfile](images/fullstacked/Dockerfile) | > Hint: `latest` can be replaced with an specific release version for more stability in your environment. diff --git a/images/fullstacked/Dockerfile b/images/fullstacked/Dockerfile index 46e2db3..2fdc31e 100644 --- a/images/fullstacked/Dockerfile +++ b/images/fullstacked/Dockerfile @@ -1,16 +1,26 @@ -FROM ghcr.io/fullstack-devops/github-actions-runner:base-latest +FROM ghcr.io/fullstack-devops/github-actions-runner:latest-base USER root # install packages along with jq so we can parse JSON # add additional packages as necessary -ARG PACKAGES="temurin-11-jdk maven nodejs ansible" +ARG PACKAGES="temurin-11-jdk maven nodejs ansible chromium python3-selenium xvfb" ARG PACKAGES_PYTHON="kubernetes" +## ansible keys RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | apt-key add - RUN echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list +## helper for karma and chromium +ENV CHROME_BIN="/usr/bin/chromium" +ADD xvfb-chromium /usr/bin/xvfb-chromium +ADD xvfb-chromium-webgl /usr/bin/xvfb-chromium-webgl +ADD display-chromium /usr/bin/display-chromium + +RUN chmod +x /usr/bin/display-chromium /usr/bin/xvfb-chromium-webgl /usr/bin/xvfb-chromium + RUN apt-get update \ && add-apt-repository -y --update ppa:ansible/ansible \ + && add-apt-repository -y --update ppa:xtradeb/apps \ && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \ && apt-get install -y --no-install-recommends ${PACKAGES} \ && rm -rf /var/lib/apt/lists/* \ @@ -37,20 +47,24 @@ RUN export ARCH=$(/helper-scripts/translate-aarch.sh a-short) \ ENV TMP_DIR=/home/${USERNAME}/tmp +RUN mkdir /run/user/$USERID RUN mkdir /home/${USERNAME}/.ansible RUN mkdir ${TMP_DIR} COPY requirements.yml ${TMP_DIR}/requirements.yml RUN mkdir -p /home/${USERNAME}/.m2/ \ - && chown -R ${USERNAME} /home/${USERNAME} + && chown -R $USERNAME /home/$USERNAME \ + && chown -R $USERNAME /run/user/$USERID # install npm tools: yarn -RUN npm install --global yarn @angular/cli@13 +ENV NPM_CONFIG_LOGLEVEL=warn NG_CLI_ANALYTICS=false +RUN npm install --location=global yarn pnpm @angular/cli@14 \ + && npm cache clean --force -USER ${USERNAME} +USER $USERNAME -RUN pip3 install ${PACKAGES_PYTHON} --user +RUN pip3 install $PACKAGES_PYTHON --user # RUN ansible-galaxy install -c -r ${TMP_DIR}/requirements.yml RUN ansible-galaxy collection install -c -r ${TMP_DIR}/requirements.yml diff --git a/images/fullstacked/display-chromium b/images/fullstacked/display-chromium new file mode 100755 index 0000000..706212f --- /dev/null +++ b/images/fullstacked/display-chromium @@ -0,0 +1,3 @@ +#!/bin/bash + +$CHROME_BIN --disable-dev-shm-usage --no-sandbox --no-first-run $@ diff --git a/images/fullstacked/xvfb-chromium b/images/fullstacked/xvfb-chromium new file mode 100755 index 0000000..953633f --- /dev/null +++ b/images/fullstacked/xvfb-chromium @@ -0,0 +1,23 @@ +#!/bin/bash + +find_free_servernum() { + i=0 + while [ -f /tmp/.X$i-lock ]; do + i=$(($i + 1)) + done + echo $i +} + +export DISPLAY=":$(find_free_servernum)" +Xvfb "$DISPLAY" -ac -screen 0 "${XVFB_WHD:-1280x720x16}" -nolisten tcp +render & +xvfb_pid=$! + +echo "(wrapper:) launching with: $@" + +function cleanup { + kill -TERM $xvfb_pid > /dev/null 2>&1 +} + +trap cleanup EXIT + +$CHROME_BIN --disable-dev-shm-usage --no-sandbox --disable-gpu --no-first-run $@ \ No newline at end of file diff --git a/images/fullstacked/xvfb-chromium-webgl b/images/fullstacked/xvfb-chromium-webgl new file mode 100755 index 0000000..f581a7f --- /dev/null +++ b/images/fullstacked/xvfb-chromium-webgl @@ -0,0 +1,21 @@ +#!/bin/bash + +find_free_servernum() { + i=0 + while [ -f /tmp/.X$i-lock ]; do + i=$(($i + 1)) + done + echo $i +} + +export DISPLAY=":$(find_free_servernum)" +Xvfb "$DISPLAY" -ac -screen 0 "${XVFB_WHD:-1280x800x16}" -nolisten tcp +render & +xvfb_pid=$! + +function cleanup { + kill -TERM $xvfb_pid > /dev/null 2>&1 +} + +trap cleanup EXIT + +$CHROME_BIN --no-sandbox --no-first-run --use-gl=osmesa --enable-webgl --ignore-gpu-blacklist --window-size=1024,768 $@ \ No newline at end of file