Name: [FIX] viin_brand_common, web_responsive, viin_brand_mail, to_backend_theme: keep brand CSS out of core test bundles - Check the quality with Pylint: from test_lint to test_pylint

State: Succeed finished in 14m

PR State: open

PR Author: David Tran

PR Author Email:

PR: #673

Committer: David Tran

Committer Email: david.tran@tvtmarine.com

Commit: 966ce881811f3e7d4691ceabe29d94e2915315f6

Description:

                                [FIX] web_responsive: pin primary-variables bundle order

CPython randomizes string hashing per process (PYTHONHASHSEED), so a
Python set literal used as an assets bundle value iterates in a
different order every time the Odoo server process starts. The
"web._assets_primary_variables" bundle was declared as a set of two
SCSS paths, making its file load order nondeterministic across
deployments and restarts.

Switch the bundle from a set literal to a list literal, keeping the
exact same two files in the exact same order they were already
written in: form_variable.scss first, then primary_variable.scss.
Verified safe to keep this order: form_variable.scss defines only
$o-form-renderer-max-width and $o-form-view-sheet-max-width, while
primary_variable.scss defines only $app-menu-text-color,
$app-menu-background-color, $app-menu-item-highlight,
$app-menu-box-shadow and $app-menu-box-shadow-highlight, all with
!default. The two files' variable namespaces are fully disjoint in
both directions, so there was no dependency-driven "correct" order to
choose - this order is now a deliberate, deterministic choice rather
than an accident of hash seeding.

Protected by the repo-wide regression guard added in the immediately
preceding commit
(viin_brand/tests/test_manifest_assets_no_set_literals.py), which was
measured RED against exactly this bundle before this fix, and is now
confirmed GREEN together with this fix on a real Odoo 18.0 instance
(db odoo_18_0_standard_viindoo_18_t_cbeabf2d): odoo.tests.result: 0
failed, 0 error(s) of 6 tests.

Signed-off-by: David Tran <david.tran@tvtmarine.com>
                                

Branch: 18.0

Age:

Up-time:

Odoo 18 Test Suite Using Docker

Check the quality with Pylint: from test_lint to test_pylint

  • install_module test_lint,test_pylint
  • exec_odoo --db_port 5432 --log-level=test --max-cron-threads=0 --load=base,web,to_base --stop-after-init --test-enable --test-tags=/test_lint,/test_pylint,/test_lint,/test_pylint,-:.test_pofiles_string_formatting
Create Date Level Message
08/24/2026 04:30:45 INFO
Using Docker Image Odoo 18 Ubuntu 24.04 Python 3.12:

FROM ubuntu:noble

ENV LANG C.UTF-8
ENV ODOO_TEST_FAILURE_RETRIES=2

# Retrieve the target architecture to install the correct wkhtmltopdf package
ARG TARGETARCH

USER root

SHELL ["/bin/bash", "-c"]

# Install debian packages
RUN set -x ; \
apt-get update \
&& 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 software-properties-common git \
&& rm -rf /var/lib/apt/lists/*

# Install Python3 packages
RUN set -x ; \
apt-get update \
&& 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/*

# Install wkhtml
RUN curl -o xfonts-base.deb http://archive.ubuntu.com/ubuntu/pool/main/x/xfonts-base/xfonts-base_1.0.5+nmu1_all.deb && dpkg -i xfonts-base.deb
RUN curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb \
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb xfonts-base.deb

# Install Odoo:Depends
ADD https://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.pl /usr/local/bin/flamegraph.pl
RUN chmod +rx /usr/local/bin/flamegraph.pl
# Github bị 429, ADD https://raw.githubusercontent.com/Viindoo/odoo/18.0/debian/control /tmp/control.txt
ADD https://github.com/royle-vietnam/odoo/releases/download/odoo/control2 /tmp/control.txt
RUN apt-get update \
&& sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \
| awk '/^ [a-z]/ { gsub(/,/,"") ; print $1 }' | sort -u \
| egrep -v 'postgresql-client' \
| sed 's/python-imaging/python-pil/'| sed 's/python-pypdf/python-pypdf2/' | sed 's/python3-lxml-html-clean/python3-lxml/' \
| DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --break-system-packages --no-cache-dir setuptools wheel && \
python3 -m pip install --break-system-packages coverage==7.4.4 flamegraph

# install latest postgresql-client
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
&& GNUPGHOME="$(mktemp -d)" \
&& export GNUPGHOME \
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
&& gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
&& gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
&& gpgconf --kill all \
&& rm -rf "$GNUPGHOME" \
&& apt-get update \
&& apt-get install --no-install-recommends -y postgresql-client \
&& rm -f /etc/apt/sources.list.d/pgdg.list \
&& rm -rf /var/lib/apt/lists/*

# Install Google Chrome
ARG CHROME_VERSION=150.0.7871.114

RUN set -eux; \
echo 'repo_add_once="false"' > /etc/default/google-chrome; \
curl -sSLf "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" \
-o /tmp/chrome.deb; \
apt-get update; \
apt-get -y install --no-install-recommends /tmp/chrome.deb; \
apt-mark hold google-chrome-stable; \
rm -f /tmp/chrome.deb /etc/apt/sources.list.d/google-chrome.list; \
rm -rf /var/lib/apt/lists/*; \
google-chrome --version | grep -F "${CHROME_VERSION}"

# Install phantomjs
RUN curl -sSL https://nightly.odoo.com/resources/phantomjs.tar.bz2 -o /tmp/phantomjs.tar.bz2 \
&& tar xvfO /tmp/phantomjs.tar.bz2 phantomjs-2.1.1-linux-x86_64/bin/phantomjs > /usr/local/bin/phantomjs \
&& chmod +x /usr/local/bin/phantomjs \
&& rm -f /tmp/phantomjs.tar.bz2

ENV PIP_BREAK_SYSTEM_PACKAGES=1

# Github bị 429, ADD https://raw.githubusercontent.com/Viindoo/odoo/18.0/requirements.txt /root/requirements.txt
ADD https://github.com/royle-vietnam/odoo/releases/download/odoo/requirements.txt /root/requirements.txt
RUN python3 -m pip install --break-system-packages --no-cache-dir setuptools wheel && \
python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir -r /root/requirements.txt && \
python3 -m pip install --no-cache-dir ebaysdk==2.1.5 pdf417gen==0.7.1

RUN python3 -m pip install --break-system-packages --no-cache-dir requests pyOpenSSL

# Install debian packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssl iputils-ping openssh-client chromium-browser \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --no-cache-dir --upgrade websocket-client==1.2.3 flake8==6.1.0
#RUN python3 -m pip uninstall pylint pylint-odoo isort Pygments -y
RUN python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir --upgrade pylint-odoo==9.0.5
RUN python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir --upgrade Pygments==2.15.0 --no-deps

# Install nodejs
RUN curl -fsSLO --compressed "https://nodejs.org/dist/v18.20.0/node-v18.20.0-linux-x64.tar.xz" \
&& tar -xJf "node-v18.20.0-linux-x64.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v18.20.0-linux-x64.tar.xz" \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs

RUN npm install -g rtlcss@3.4.0 es-check@6.0.0 eslint@8.57.1 prettier@2.7.1 eslint-config-prettier@8.5.0 eslint-plugin-prettier@4.2.1
# Tránh warning do bug của ubuntu
RUN rm -rf /usr/lib/python3.12/dist-packages/charset_normalizer-3.3.2.dist-info

# Install cloc package
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cloc pv \
&& rm -rf /var/lib/apt/lists/*
08/24/2026 04:30:45 INFO
Check the quality with Pylint: from test_lint to test_pylint:
Command: install_module args: test_lint,test_pylint
08/24/2026 04:30:45 INFO
Check the quality with Pylint: from test_lint to test_pylint:
Command: exec_odoo args: --db_port 5432 --log-level=test --max-cron-threads=0 --load=base,web,to_base --stop-after-init --test-enable --test-tags=/test_lint,/test_pylint,/test_lint,/test_pylint,-:.test_pofiles_string_formatting
08/24/2026 04:30:45 INFO
Docker command:
cd /data/build; python3 -m pip install --user --no-cache-dir --progress-bar off -r Viindoo-tvtmaaddons-18.0/requirements.txt && python3 -m pip install --user --no-cache-dir --progress-bar off -r Viindoo-erponline-enterprise-18.0/requirements.txt && python3 Viindoo-odoo-18.0/odoo-bin --addons-path Viindoo-odoo-18.0/odoo/addons,Viindoo-odoo-18.0/addons,Viindoo-tvtmaaddons-18.0,Viindoo-erponline-enterprise-18.0,rb-966ce88-224197 -d rb-966ce88-224197-407369 --data-dir /data/build/datadir -i test_lint,test_pylint --db_port 5432 --log-level=test --max-cron-threads=0 --load=base,web,to_base --stop-after-init --test-enable --test-tags=/test_lint,/test_pylint,/test_lint,/test_pylint,-:.test_pofiles_string_formatting ;
08/24/2026 04:30:45 INFO
Container rb-966ce88-224197-407369 started !
08/24/2026 04:45:45 INFO
Container rb-966ce88-224197-407369 stopped !
08/24/2026 04:45:45 INFO
Cleaning all resource
08/24/2026 04:45:45 INFO
Cleanup finished