Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: podman in podman docker file with wdio deps #573

Merged
merged 11 commits into from
May 24, 2024
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules/
.vite/
out/
4 changes: 1 addition & 3 deletions .github/workflows/e2e-test-linux-distros.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
name: e2e-tests-linux-distros
# Currently does not work as running podman within a container is not straighforward

on:
pull_request:
branches:
- main
workflow_dispatch:

jobs:
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/e2e-test-specs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: e2e-tests-specs

on:
pull_request:
branches:
- main
workflow_dispatch:

jobs:
e2e-build-n-test:
environment: staging
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]

steps:
- uses: actions/checkout@v4
- name: 🧱 Install Dependencies
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y podman

- name: 📦 Bundle Application
env:
DEBUG: "*electron*"
SENTRY_DSN: fake-token
MP_PROJECT_TOKEN: fake-token
MP_PROJECT_ENV: dev
NICENODE_ENV: test
NO_CODE_SIGNING: true
run: |
ls -al
podman build -t podman-fedora-wdio -f ./test/podman-fedora-wdio.dockerfile .

- name: 🧪 Run Tests
run: |
ls -al
chmod -R 777 .
ls -al
podman run --rm -v ./:/home/podman/nice-node -u podman podman-fedora-wdio

6 changes: 3 additions & 3 deletions .github/workflows/e2e-test-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
os: [ubuntu-24.04]
node-version: [20.x]

steps:
Expand All @@ -25,7 +25,7 @@ jobs:
- name: 🧱 Install Dependencies
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y rpm libarchive-tools
sudo apt-get install --no-install-recommends -y podman
npm ci

- name: 📦 Bundle Application
Expand All @@ -37,7 +37,7 @@ jobs:
NICENODE_ENV: ${{ vars.NICENODE_ENV }}
NO_CODE_SIGNING: true
run: |
npm run make
npm run package -- --arch=x64

- name: 🧪 Run Tests
uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a
Expand Down
2 changes: 1 addition & 1 deletion src/main/ports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import type { ConfigValue } from '../common/nodeConfig';
import { NOTIFICATIONS } from './consts/notifications';
import { httpGet } from './httpReq';
import { getNodePackageByServiceNodeId } from './state/nodePackages';
import { getNodePackages } from './state/nodePackages';
import { getNode, getNodes, getSetPortHasChanged } from './state/nodes';
import { addNotification } from './state/notifications';
import { getNodePackages } from './state/nodePackages';

export const getPodmanPortsForNode = (
node: Node,
Expand Down
12 changes: 12 additions & 0 deletions test/containers.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[containers]
netns="host"
userns="host"
ipcns="host"
utsns="host"
cgroupns="host"
cgroups="disabled"
log_driver = "k8s-file"
[engine]
cgroup_manager = "cgroupfs"
events_logger="file"
runtime="crun"
19 changes: 19 additions & 0 deletions test/debian12.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM debian:12

RUN apt-get update -qq

RUN apt-get install --no-install-recommends -y nodejs npm git zip dpkg fakeroot rpm libarchive-tools
RUN apt-get install -y \
xvfb \
zip \
wget \
ca-certificates \
libnss3-dev \
libasound2t64 \
libxss1 \
libappindicator3-1 \
libindicator7 \
xdg-utils \
fonts-liberation \
libgbm1

46 changes: 46 additions & 0 deletions test/fedora40.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
FROM fedora:40

RUN dnf update -y

RUN dnf install podman -y

# RUN apt-get install --no-install-recommends -y nodejs npm git zip dpkg fakeroot rpm libarchive-tools
# RUN apt-get install -y \
# xvfb \
# zip \
# wget \
# ca-certificates \
# libnss3-dev \
# libasound2t64 \
# libxss1 \
# libappindicator3-1 \
# libindicator7 \
# xdg-utils \
# fonts-liberation \
# libgbm1

# Create a new user and set its password
# RUN useradd -ms /bin/bash -g root -u 1000 myuser \
# && echo "myuser:password" | chpasswd

# Create a new group for Podman
RUN groupadd --system podman

# Create a new user and group for running Podman within the container
ARG USERNAME=podman-user
ARG USER_UID=1000
ARG GROUP_GID=1000
RUN groupadd -g ${GROUP_GID} ${USERNAME} && \
useradd -u ${USER_UID} -g ${GROUP_GID} -m ${USERNAME}

# Add the user to the 'podman' group
RUN usermod -aG podman ${USERNAME}

# Switch to the new user
USER ${USERNAME}

# Set the working directory to the user's home directory
WORKDIR /home/${USERNAME}

# Example command to run when the container starts
CMD ["/bin/bash"]
5 changes: 5 additions & 0 deletions test/podman-containers.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[containers]
volumes = [
"/proc:/proc",
]
default_sysctls = []
126 changes: 126 additions & 0 deletions test/podman-fedora-wdio.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# podman/Containerfile
#
# Build a Podman container image from the latest
# stable version of Podman on the Fedoras Updates System.
# https://bodhi.fedoraproject.org/updates/?search=podman
# This image can be used to create a secured container
# that runs safely with privileges within the container.
#
# FLAVOR defaults to stable if unset
#
# FLAVOR=stable acquires a stable version of Podman
# from the Fedoras Updates System.
# FLAVOR=testing acquires a testing version of Podman
# from the Fedoras Updates System.
# FLAVOR=upstream acquires a testing version of Podman
# from the Fedora Copr Buildsystem.
# https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/
#
# https://bodhi.fedoraproject.org/updates/?search=podman

FROM registry.fedoraproject.org/fedora:latest
ARG FLAVOR=stable

# When building for multiple-architectures in parallel using emulation
# it's really easy for one/more dnf processes to timeout or mis-count
# the minimum download rates. Bump both to be extremely forgiving of
# an overworked host.
RUN echo -e "\n\n# Added during image build" >> /etc/dnf/dnf.conf && \
echo -e "minrate=100\ntimeout=60\n" >> /etc/dnf/dnf.conf

# Don't include container-selinux and remove
# directories used by dnf that are just taking
# up space.
# TODO: rpm --setcaps... needed due to Fedora (base) image builds
# being (maybe still?) affected by
# https://bugzilla.redhat.com/show_bug.cgi?id=1995337#c3
RUN dnf -y makecache && \
dnf -y update && \
rpm --setcaps shadow-utils 2>/dev/null && \
case "${FLAVOR}" in \
stable) \
dnf -y install podman fuse-overlayfs openssh-clients --exclude container-selinux \
;; \
testing) \
dnf -y install podman fuse-overlayfs openssh-clients --exclude container-selinux \
--enablerepo updates-testing \
;; \
upstream) \
dnf -y install 'dnf-command(copr)' --enablerepo=updates-testing && \
dnf -y copr enable rhcontainerbot/podman-next && \
dnf -y install podman fuse-overlayfs openssh-clients \
--exclude container-selinux \
--enablerepo=updates-testing \
;; \
*) \
printf "\\nFLAVOR argument must be set and valid, currently: '${FLAVOR}'\\n\\n" 1>&2 && \
exit 1 \
;; \
esac && \
dnf clean all && \
rm -rf /var/cache /var/log/dnf* /var/log/yum.*

RUN useradd podman; \
echo -e "podman:1:999\npodman:1001:64535" > /etc/subuid; \
echo -e "podman:1:999\npodman:1001:64535" > /etc/subgid;

ADD /test/containers.conf /etc/containers/containers.conf
ADD /test/podman-containers.conf /home/podman/.config/containers/containers.conf

RUN mkdir -p /home/podman/.local/share/containers && \
chown podman:podman -R /home/podman && \
chmod 644 /etc/containers/containers.conf

# Copy & modify the defaults to provide reference if runtime changes needed.
# Changes here are required for running with fuse-overlay storage inside container.
RUN sed -e 's|^#mount_program|mount_program|g' \
-e '/additionalimage.*/a "/var/lib/shared",' \
-e 's|^mountopt[[:space:]]*=.*$|mountopt = "nodev,fsync=0"|g' \
/usr/share/containers/storage.conf \
> /etc/containers/storage.conf

# Setup internal Podman to pass subscriptions down from host to internal container
RUN printf '/run/secrets/etc-pki-entitlement:/run/secrets/etc-pki-entitlement\n/run/secrets/rhsm:/run/secrets/rhsm\n' > /etc/containers/mounts.conf

# Note VOLUME options must always happen after the chown call above
# RUN commands can not modify existing volumes
VOLUME /var/lib/containers
VOLUME /home/podman/.local/share/containers

RUN mkdir -p /var/lib/shared/overlay-images \
/var/lib/shared/overlay-layers \
/var/lib/shared/vfs-images \
/var/lib/shared/vfs-layers && \
touch /var/lib/shared/overlay-images/images.lock && \
touch /var/lib/shared/overlay-layers/layers.lock && \
touch /var/lib/shared/vfs-images/images.lock && \
touch /var/lib/shared/vfs-layers/layers.lock

ENV _CONTAINERS_USERNS_CONFIGURED="" \
BUILDAH_ISOLATION=chroot


# My additions to the podman official podman-in-podman image
# can be built and run with:
# podman build -t podman-fedora-wdio -f ./test/podman-fedora-wdio.dockerfile .
# podman run --rm -v ./:/home/podman/nice-node -u podman podman-fedora-wdio

RUN dnf install -y nodejs npm git zip dpkg fakeroot rpmdevtools sudo
RUN dnf install -y nss nss-tools libxcb xorg-x11-server-Xvfb dbus-devel atk-devel at-spi2-atk cups-libs gtk3-devel

RUN mkdir /home/podman/nice-node
WORKDIR /home/podman/nice-node


# Allow 'podman' user to run sudo without password (useful for manually installing packages)
RUN echo "podman ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/podman
RUN echo "podman:password" | chpasswd

CMD ["bash", "-c", "npm install --loglevel=info && npm run package -- --arch=x64 && xvfb-run npm run wdio"]

# # Start the Xvfb server Is currently not needed
# export DISPLAY=':99.0'
# xvfb-run :99 -screen 0 1024x768x24 > /dev/null 2>&1 &



Loading