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: 46 additions & 41 deletions selenium/Containerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,46 +5,39 @@ COPY init.go .

COPY settings.json /home/selenium/.local/share/code-server/User/settings.json

# Firefox releases
# https://download-installer.cdn.mozilla.net/pub/firefox/releases/
ARG FIREFOX_URL="https://download-installer.cdn.mozilla.net/pub/firefox/releases/140.7.0esr/linux-x86_64/en-US/firefox-140.7.0esr.tar.xz"
# Gecko driver releases
# https://github.com/mozilla/geckodriver/releases
ARG GECKODRIVER_VERSION="v0.36.0"
# Chrome versions
# https://www.ubuntuupdates.org/package/google_chrome/stable/main/base/google-chrome-stable
ARG CHROME_VERSION="144.0.7559.59-1"

ARG SELENIUM_MAJOR_VERSION=4

ARG SELENIUM_MINOR_VERSION=39

ARG SELENIUM_PATCH_VERSION=0
ARG \
GECKODRIVER_VERSION="v0.36.0" \
CHROME_VERSION="144.0.7559.59-1" \
SELENIUM_MAJOR_VERSION=4 \
SELENIUM_MINOR_VERSION=39 \
SELENIUM_PATCH_VERSION=0 \
SELENIUM_HTTP_JDK_CLIENT_VERSION="4.13.0"

ENV SELENIUM_HOME=/home/selenium

ENV SELENIUM_PORT=4444 \
SELENIUM_SESSION_TIMEOUT=1800 \
VNC_PORT=5999 \
API_PORT=8000 \
DISPLAY=:99 \
DBUS_SESSION_BUS_ADDRESS=/dev/null \
HOME=${SELENIUM_HOME} \
VNC_GEOMETRY="1600x900" \
SELENIUM_VERSION=${SELENIUM_MAJOR_VERSION}.${SELENIUM_MINOR_VERSION}.${SELENIUM_PATCH_VERSION} \
SELENIUM_PATH=${SELENIUM_HOME}/selenium-server/selenium-server-standalone.jar \
SELENIUM_HTTP_JDK_CLIENT_PATH=${SELENIUM_HOME}/selenium-server/selenium-http-jdk-client.jar \
PATH=${SELENIUM_HOME}/firefox:/opt/google/chrome:${PATH}

EXPOSE ${SELENIUM_PORT}

EXPOSE ${VNC_PORT}

EXPOSE ${API_PORT}
ENV \
SELENIUM_PORT=4444 \
SELENIUM_SESSION_TIMEOUT=1800 \
VNC_PORT=5999 \
API_PORT=8000 \
DISPLAY=:99 \
DBUS_SESSION_BUS_ADDRESS=/dev/null \
HOME=${SELENIUM_HOME} \
VNC_GEOMETRY="1600x900" \
SELENIUM_VERSION=${SELENIUM_MAJOR_VERSION}.${SELENIUM_MINOR_VERSION}.${SELENIUM_PATCH_VERSION} \
SELENIUM_PATH=${SELENIUM_HOME}/selenium-server/selenium-server-standalone.jar \
SELENIUM_HTTP_JDK_CLIENT_PATH=${SELENIUM_HOME}/selenium-server/selenium-http-jdk-client.jar \
PATH=${SELENIUM_HOME}/firefox:/opt/google/chrome:${PATH}

EXPOSE ${SELENIUM_PORT} ${VNC_PORT} ${API_PORT}

WORKDIR ${SELENIUM_HOME}

RUN PACKAGES="\
RUN --mount=type=cache,dst=/var/cache/dnf PACKAGES="\
alsa-lib \
at-spi2-atk \
at-spi2-core \
Expand Down Expand Up @@ -136,26 +129,38 @@ xkeyboard-config" && \
microdnf -q -y install ${PACKAGES} >/dev/null
# ^ https://github.com/rpm-software-management/dnf5/issues/570

RUN mkdir -p .cache/dconf .mozilla/plugins .vnc/ .fluxbox/ && \
echo "session.screen0.toolbar.autoHide: true" > .fluxbox/init && \
touch .Xauthority .vnc/config && \
RUN --mount=type=cache,target=/.cache --mount=type=cache,target=/home/selenium/.cache/code-server \
GECKODRIVER_ARCH=$([ "$(arch)" = "aarch64" ] && echo linux-aarch64 || echo linux64) && \
mkdir -p ${SELENIUM_HOME}/selenium-server && \
curl -L https://github.com/SeleniumHQ/selenium/releases/download/selenium-${SELENIUM_MAJOR_VERSION}.${SELENIUM_MINOR_VERSION}.0/selenium-server-${SELENIUM_VERSION}.jar \
cd /.cache && \
curl -sSfL -C - https://github.com/SeleniumHQ/selenium/releases/download/selenium-${SELENIUM_MAJOR_VERSION}.${SELENIUM_MINOR_VERSION}.0/selenium-server-${SELENIUM_VERSION}.jar \
-o ${SELENIUM_PATH} && \
curl -L https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-http-jdk-client/${SELENIUM_VERSION}/selenium-http-jdk-client-${SELENIUM_VERSION}.jar \
curl -sSfL -C - https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-http-jdk-client/${SELENIUM_HTTP_JDK_CLIENT_VERSION}/selenium-http-jdk-client-${SELENIUM_HTTP_JDK_CLIENT_VERSION}.jar \
-o ${SELENIUM_HTTP_JDK_CLIENT_PATH} && \
curl -L https://download-installer.cdn.mozilla.net/pub/firefox/releases/140.7.0esr/linux-x86_64/en-US/firefox-140.7.0esr.tar.xz|tar --xz -x && \
curl -LO https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz && \
tar -C /usr/bin/ -xvf geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz && \
rm -f geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz && \
curl -fsSL https://code-server.dev/install.sh | sh && \
curl -sSfL https://download-installer.cdn.mozilla.net/pub/firefox/releases/140.7.0esr/linux-$(arch)/en-US/firefox-140.7.0esr.tar.xz -o firefox.tar.xz && tar --xz -x -f firefox.tar.xz && rm firefox.tar.xz && \
curl -sSfL -C - -O https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz && \
tar -C /usr/bin/ -xvf geckodriver-${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz && \
cd ${SELENIUM_HOME} && \
mkdir -p .cache/dconf .mozilla/plugins .vnc/ .fluxbox/ && \
echo "session.screen0.toolbar.autoHide: true" > .fluxbox/init && \
touch .Xauthority .vnc/config && \
curl -fsSL https://code-server.dev/install.sh | sh

RUN \
code-server --install-extension ms-python.vscode-python-envs --install-extension redhat.vscode-yaml --install-extension redhat.vscode-redhat-account && \
mkdir -p workspace && touch workspace/playbook.yaml && \
modutil -fips true -dbdir /etc/pki/nssdb -force && \
chown -R 0:0 /etc/pki/nssdb && \
chmod 644 /etc/pki/nssdb/* && \
chown -R 1001:0 ${SELENIUM_HOME} && \
chmod -R g=u ${SELENIUM_HOME}
chmod -R g=u ${SELENIUM_HOME} && \
geckodriver --version && \
code-server --version && \
Xvnc -version && \
fluxbox --version && \
java -version && \
if [ "$(arch)" = "aarch64" ]; then export JAVA_TOOL_OPTIONS=-XX:UseSVE=0; fi && \
java -Dwebdriver.http.factory=jdk-http-client -jar ${SELENIUM_PATH} -ext ${SELENIUM_HTTP_JDK_CLIENT_PATH} info

USER 1001

Expand Down
16 changes: 16 additions & 0 deletions selenium/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,21 @@ func startSelenium() *exec.Cmd {
return selenium
}

func installVsixExtension() {
vsixPath := "/data/ansible-latest.vsix"
if _, err := os.Stat(vsixPath); os.IsNotExist(err) {
fmt.Println("No VSIX found at", vsixPath, "- skipping extension install")
return
}
fmt.Println("Installing ansible extension from", vsixPath)
cmd := exec.Command("code-server", "--install-extension", vsixPath)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
fmt.Println("Warning: failed to install extension:", err)
}
}

func startCodeServer() *exec.Cmd {
vscode := exec.Command(
"code-server",
Expand All @@ -104,6 +119,7 @@ func startProcesses() (*exec.Cmd, *exec.Cmd, *exec.Cmd, *exec.Cmd) {
xvnc := startXvnc()
waitForPort()
fluxbox := startFluxbox()
installVsixExtension()
selenium := startSelenium()
vscode := startCodeServer()
return xvnc, fluxbox, selenium, vscode
Expand Down
Loading