[IMP] runbot: adapt for noble

The migration to the new dockerfile also includes a change to the noble
docker image

This is done in a separate commit to ease the comparaison.

Notes:

The postgresql-client was initially pinned to version 16 and removed
from debian control, but this version proposes add the repositories and
let apt chose the latest version. This is experimental but was tested
on ubuntu:jammy, with 16 version installed as expected.

The requirements are installed as user instead of root to avoid the need
to use the ignore_installed flag (and solve a bunch of issues related
to this flag)
This commit is contained in:
Xavier-Do 2024-08-08 12:36:29 +02:00
parent 0d8f69e086
commit 7343d8a4cb

View File

@ -20,64 +20,56 @@ class TestDockerfile(RunbotCase, HttpCase):
def test_docker_default(self): def test_docker_default(self):
self.maxDiff = None self.maxDiff = None
with (
patch('odoo.addons.runbot.models.docker.USERNAME', 'TestUser'),
patch('odoo.addons.runbot.models.docker.USERUID', '4242'),
patch('odoo.addons.runbot.models.docker.USERGID', '1337'),
):
docker_render = self.env.ref('runbot.docker_default').dockerfile.replace('\n\n', '\n')
docker_render = '\n'.join(line for line in docker_render.split('\n') if line and line[0] != '#')
self.assertEqual( self.assertEqual(
self.env.ref('runbot.docker_default').dockerfile.replace('\n\n', '\n'), r"""FROM ubuntu:noble
r"""FROM ubuntu:jammy
ENV LANG C.UTF-8 ENV LANG C.UTF-8
USER root USER root
# Install debian packages
RUN set -x ; \ RUN set -x ; \
apt-get update \ apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends apt-transport-https build-essential ca-certificates curl ffmpeg file flake8 fonts-freefont-ttf fonts-noto-cjk gawk gnupg gsfonts libldap2-dev libjpeg9-dev libsasl2-dev libxslt1-dev lsb-release ocrmypdf sed sudo unzip xfonts-75dpi zip zlib1g-dev \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends apt-transport-https build-essential ca-certificates curl file fonts-freefont-ttf fonts-noto-cjk gawk gnupg gsfonts libldap2-dev libjpeg9-dev libsasl2-dev libxslt1-dev lsb-release npm ocrmypdf sed sudo unzip xfonts-75dpi zip zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Install debian packages
RUN set -x ; \ RUN set -x ; \
apt-get update \ apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends python3 python3-dbfread python3-dev python3-gevent python3-pip python3-setuptools python3-wheel python3-markdown python3-mock python3-phonenumbers python3-websocket python3-google-auth libpq-dev python3-asn1crypto python3-jwt publicsuffix python3-xmlsec python3-aiosmtpd pylint \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends publicsuffix python3 flake8 python3-dbfread python3-dev python3-gevent python3-pip python3-setuptools python3-wheel python3-markdown python3-mock python3-phonenumbers python3-websocket python3-google-auth libpq-dev pylint python3-jwt python3-asn1crypto python3-html2text python3-suds python3-xmlsec \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Install wkhtmltopdf RUN curl -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb -o /tmp/wkhtml.deb \
RUN curl -sSL https://nightly.odoo.com/deb/jammy/wkhtmltox_0.12.5-2.jammy_amd64.deb -o /tmp/wkhtml.deb \
&& apt-get update \ && apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --fix-missing -qq /tmp/wkhtml.deb \ && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --fix-missing -qq /tmp/wkhtml.deb \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
&& rm /tmp/wkhtml.deb && rm /tmp/wkhtml.deb
# Install nodejs with values {"node_version": "20"} ENV NODE_PATH=/usr/lib/node_modules/
RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | tee /usr/share/keyrings/nodesource.gpg > /dev/null \ ENV npm_config_prefix=/usr
&& echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x `lsb_release -c -s` main" > /etc/apt/sources.list.d/nodesource.list \ RUN npm install --force -g rtlcss@3.4.0 es-check@6.0.0 eslint@8.1.0 prettier@2.7.1 eslint-config-prettier@8.5.0 eslint-plugin-prettier@4.2.1
&& apt-get update \
&& apt-get install -y nodejs
RUN npm install -g rtlcss@3.4.0 es-check@6.0.0 eslint@8.1.0 prettier@2.7.1 eslint-config-prettier@8.5.0 eslint-plugin-prettier@4.2.1
# Install branch debian/control with values {"odoo_branch": "master"}
ADD https://raw.githubusercontent.com/odoo/odoo/master/debian/control /tmp/control.txt ADD https://raw.githubusercontent.com/odoo/odoo/master/debian/control /tmp/control.txt
RUN apt-get update \ RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/trusted.gpg.d/psql_client.asc \
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -s -c`-pgdg main" > /etc/apt/sources.list.d/pgclient.list \
&& apt-get update \
&& sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \ && sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \
| awk '/^ [a-z]/ { gsub(/,/,"") ; gsub(" ", "") ; print $NF }' | sort -u \ | awk '/^ [a-z]/ { gsub(/,/,"") ; gsub(" ", "") ; print $NF }' | sort -u \
| egrep -v 'postgresql-client' \
| DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq --no-install-recommends \ | DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq --no-install-recommends \
&& apt-get clean \ && apt-get clean \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Install pip packages with values {"$packages": "astroid==2.4.2 pylint==2.5.0"}
RUN python3 -m pip install --no-cache-dir astroid==2.4.2 pylint==2.5.0
# Install pip packages with values {"$packages": "ebaysdk==2.1.5 pdf417gen==0.7.1"}
RUN python3 -m pip install --no-cache-dir ebaysdk==2.1.5 pdf417gen==0.7.1
RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -s -c`-pgdg main" > /etc/apt/sources.list.d/pgclient.list \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql-client-14 \
&& rm -rf /var/lib/apt/lists/*
# Install chrome with values {"chrome_version": "123.0.6312.58-1"}
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_123.0.6312.58-1_amd64.deb -o /tmp/chrome.deb \ RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_123.0.6312.58-1_amd64.deb -o /tmp/chrome.deb \
&& apt-get update \ && apt-get update \
&& apt-get -y install --no-install-recommends /tmp/chrome.deb \ && apt-get -y install --no-install-recommends /tmp/chrome.deb \
&& rm /tmp/chrome.deb && rm /tmp/chrome.deb
# Install branch requirements with values {"odoo_branch": "master"} RUN deluser ubuntu
ADD https://raw.githubusercontent.com/odoo/odoo/master/requirements.txt /tmp/requirements.txt RUN groupadd -g 1337 TestUser && useradd --create-home -u 4242 -g TestUser -G audio,video TestUser
RUN python3 -m pip install --no-cache-dir -r /tmp/requirements.txt""" f""" USER TestUser
# Create user template with values {{"USERUID": {USERUID}, "USERGID": {USERGID}, "USERNAME": "{USERNAME}"}} ENV PIP_BREAK_SYSTEM_PACKAGES=1
RUN groupadd -g {USERGID} {USERNAME} && useradd --create-home -u {USERUID} -g {USERNAME} -G audio,video {USERNAME} RUN python3 -m pip install --no-cache-dir ebaysdk==2.1.5 pdf417gen==0.7.1 ruff==0.4.7
# Switch user with values {{"USERNAME": "{USERNAME}"}} ADD --chown=TestUser https://raw.githubusercontent.com/odoo/odoo/master/requirements.txt /tmp/requirements.txt
USER {USERNAME} RUN python3 -m pip install --no-cache-dir -r /tmp/requirements.txt
""") USER TestUser""", docker_render)
def test_dockerfile_base_fields(self): def test_dockerfile_base_fields(self):
dockerfile = self.env['runbot.dockerfile'].create({ dockerfile = self.env['runbot.dockerfile'].create({