From b906b68826db45fa67630ea6db53692d769d449c Mon Sep 17 00:00:00 2001 From: Sirio Balmelli Date: Wed, 19 Jun 2024 13:35:18 +0000 Subject: [PATCH 1/5] odoo: fix build Pinned werkzeug override fails a test; disable it. Signed-off-by: Sirio Balmelli --- pkgs/applications/finance/odoo/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/applications/finance/odoo/default.nix b/pkgs/applications/finance/odoo/default.nix index b9829326768a..c30e96f1eed8 100644 --- a/pkgs/applications/finance/odoo/default.nix +++ b/pkgs/applications/finance/odoo/default.nix @@ -23,6 +23,9 @@ let inherit version; hash = "sha256-K4wORHtLnbzIXdl7butNy69si2w74L1lTiVVPgohV9g="; }; + disabledTests = old.disabledTests ++ [ + "test_response_body" + ]; }); }; }; From a972071a311abb6576560c32fb586f852a7aaffd Mon Sep 17 00:00:00 2001 From: Sirio Balmelli Date: Wed, 19 Jun 2024 13:35:20 +0000 Subject: [PATCH 2/5] odoo: 16.0.20231024 -> 17.0.20240507 Preserve 'odoo16' on the same pattern as existing 'odoo15' Signed-off-by: Sirio Balmelli --- .../manual/release-notes/rl-2405.section.md | 1 + nixos/tests/all-tests.nix | 1 + pkgs/applications/finance/odoo/default.nix | 39 +++--- pkgs/applications/finance/odoo/odoo16.nix | 116 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 5 files changed, 135 insertions(+), 23 deletions(-) create mode 100644 pkgs/applications/finance/odoo/odoo16.nix diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index 165e3e13a78e..8fa59863bf78 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -822,3 +822,4 @@ Module System: ### Internal {#sec-release-24.05-lib-internal} - `lib` now has [Readme for contributing](https://github.com/NixOS/nixpkgs/tree/master/lib#readme). - Some function's documentation is now written using the [accepted doc comment syntax](https://github.com/NixOS/rfcs/pull/145). +- `odoo` has been updated from `16.0.20231024` to `17.0.20240507`. diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 6b5ee429f9a2..8d5b865891e4 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -414,6 +414,7 @@ in { pyload = handleTest ./pyload.nix {}; oci-containers = handleTestOn ["aarch64-linux" "x86_64-linux"] ./oci-containers.nix {}; odoo = handleTest ./odoo.nix {}; + odoo16 = handleTest ./odoo.nix { package = pkgs.odoo16; }; odoo15 = handleTest ./odoo.nix { package = pkgs.odoo15; }; # 9pnet_virtio used to mount /nix partition doesn't support # hibernation. This test happens to work on x86_64-linux but diff --git a/pkgs/applications/finance/odoo/default.nix b/pkgs/applications/finance/odoo/default.nix index c30e96f1eed8..df61e1c02f13 100644 --- a/pkgs/applications/finance/odoo/default.nix +++ b/pkgs/applications/finance/odoo/default.nix @@ -1,5 +1,6 @@ { stdenv , lib +, fetchgit , fetchzip , python310 , rtlcss @@ -9,40 +10,31 @@ let python = python310.override { - packageOverrides = self: super: { - flask = super.flask.overridePythonAttrs (old: rec { - version = "2.3.3"; - src = old.src.override { - inherit version; - hash = "sha256-CcNHqSqn/0qOfzIGeV8w2CZlS684uHPQdEzVccpgnvw="; + packageOverrides = final: prev: { + # requirements.txt fixes docutils at 0.17; the default 0.21.1 tested throws exceptions + docutils-0_17 = prev.docutils.overridePythonAttrs (old: rec { + version = "0.17"; + src = fetchgit { + url = "git://repo.or.cz/docutils.git"; + rev = "docutils-${version}"; + hash = "sha256-O/9q/Dg1DBIxKdNBOhDV16yy5ez0QANJYMjeovDoWX8="; }; - }); - werkzeug = super.werkzeug.overridePythonAttrs (old: rec { - version = "2.3.7"; - src = old.src.override { - inherit version; - hash = "sha256-K4wORHtLnbzIXdl7butNy69si2w74L1lTiVVPgohV9g="; - }; - disabledTests = old.disabledTests ++ [ - "test_response_body" - ]; + buildInputs = with prev; [setuptools]; }); }; }; - - odoo_version = "16.0"; - odoo_release = "20231024"; + odoo_version = "17.0"; + odoo_release = "20240507"; in python.pkgs.buildPythonApplication rec { pname = "odoo"; version = "${odoo_version}.${odoo_release}"; format = "setuptools"; - # latest release is at https://github.com/odoo/docker/blob/master/16.0/Dockerfile src = fetchzip { url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; name = "${pname}-${version}"; - hash = "sha256-Ux8RfA7kWLKissBBY5wrfL+aKKw++5BxjP3Vw0JAOsk="; # odoo + hash = "sha256-WdJBs1YgJhHmD+ip6UU2pwXrcZCsbjgOGjrZTRFQBFw="; # odoo }; # needs some investigation @@ -57,7 +49,7 @@ in python.pkgs.buildPythonApplication rec { chardet cryptography decorator - docutils + docutils-0_17 # sphinx has a docutils requirement >= 18 ebaysdk freezegun gevent @@ -86,6 +78,7 @@ in python.pkgs.buildPythonApplication rec { qrcode reportlab requests + rjsmin urllib3 vobject werkzeug @@ -112,6 +105,6 @@ in python.pkgs.buildPythonApplication rec { description = "Open Source ERP and CRM"; homepage = "https://www.odoo.com/"; license = licenses.lgpl3Only; - maintainers = with maintainers; [ mkg20001 ]; + maintainers = with maintainers; [ mkg20001 siriobalmelli ]; }; } diff --git a/pkgs/applications/finance/odoo/odoo16.nix b/pkgs/applications/finance/odoo/odoo16.nix new file mode 100644 index 000000000000..6e68228d7347 --- /dev/null +++ b/pkgs/applications/finance/odoo/odoo16.nix @@ -0,0 +1,116 @@ +{ stdenv +, lib +, fetchzip +, python310 +, rtlcss +, wkhtmltopdf +, nixosTests +}: + +let + python = python310.override { + packageOverrides = self: super: { + flask = super.flask.overridePythonAttrs (old: rec { + version = "2.3.3"; + src = old.src.override { + inherit version; + hash = "sha256-CcNHqSqn/0qOfzIGeV8w2CZlS684uHPQdEzVccpgnvw="; + }; + }); + werkzeug = super.werkzeug.overridePythonAttrs (old: rec { + version = "2.3.7"; + src = old.src.override { + inherit version; + hash = "sha256-K4wORHtLnbzIXdl7butNy69si2w74L1lTiVVPgohV9g="; + }; + disabledTests = old.disabledTests ++ [ + "test_response_body" + ]; + }); + }; + }; + + odoo_version = "16.0"; + odoo_release = "20231024"; +in python.pkgs.buildPythonApplication rec { + pname = "odoo"; + version = "${odoo_version}.${odoo_release}"; + + format = "setuptools"; + + # latest release is at https://github.com/odoo/docker/blob/master/16.0/Dockerfile + src = fetchzip { + url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; + name = "${pname}-${version}"; + hash = "sha256-Ux8RfA7kWLKissBBY5wrfL+aKKw++5BxjP3Vw0JAOsk="; # odoo + }; + + # needs some investigation + doCheck = false; + + makeWrapperArgs = [ + "--prefix" "PATH" ":" "${lib.makeBinPath [ wkhtmltopdf rtlcss ]}" + ]; + + propagatedBuildInputs = with python.pkgs; [ + babel + chardet + cryptography + decorator + docutils + ebaysdk + freezegun + gevent + greenlet + idna + jinja2 + libsass + lxml + markupsafe + num2words + ofxparse + passlib + pillow + polib + psutil + psycopg2 + pydot + pyopenssl + pypdf2 + pyserial + python-dateutil + python-ldap + python-stdnum + pytz + pyusb + qrcode + reportlab + requests + urllib3 + vobject + werkzeug + xlrd + xlsxwriter + xlwt + zeep + + setuptools + mock + ]; + + # takes 5+ minutes and there are not files to strip + dontStrip = true; + + passthru = { + tests = { + inherit (nixosTests) odoo; + }; + }; + + meta = with lib; { + description = "Open Source ERP and CRM"; + homepage = "https://www.odoo.com/"; + license = licenses.lgpl3Only; + maintainers = with maintainers; [ mkg20001 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e2fac29ce727..d2e5a4aed5ba 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5969,6 +5969,7 @@ with pkgs; }; odoo = callPackage ../applications/finance/odoo { }; + odoo16 = callPackage ../applications/finance/odoo/odoo16.nix { }; odoo15 = callPackage ../applications/finance/odoo/odoo15.nix { }; odafileconverter = libsForQt5.callPackage ../applications/graphics/odafileconverter { }; From 8306ac3d7e617a40e61438e1fa8b99a321bc7952 Mon Sep 17 00:00:00 2001 From: Sirio Balmelli Date: Wed, 19 Jun 2024 13:35:21 +0000 Subject: [PATCH 3/5] odoo: migrate to pkgs/by-name Remove original 'pkgs/applications/finance/odoo' directory. Update 'pkgs/applications/finance/odoo/update.sh' to point to the nightly builds archive for odoo, ignoring Docker. Signed-off-by: Sirio Balmelli --- pkgs/applications/finance/odoo/update.sh | 27 ------------------- .../od/odoo/package.nix} | 1 + pkgs/by-name/od/odoo/update.sh | 26 ++++++++++++++++++ .../od/odoo15/package.nix} | 0 .../od/odoo16/package.nix} | 0 pkgs/top-level/all-packages.nix | 4 --- 6 files changed, 27 insertions(+), 31 deletions(-) delete mode 100755 pkgs/applications/finance/odoo/update.sh rename pkgs/{applications/finance/odoo/default.nix => by-name/od/odoo/package.nix} (96%) create mode 100755 pkgs/by-name/od/odoo/update.sh rename pkgs/{applications/finance/odoo/odoo15.nix => by-name/od/odoo15/package.nix} (100%) rename pkgs/{applications/finance/odoo/odoo16.nix => by-name/od/odoo16/package.nix} (100%) diff --git a/pkgs/applications/finance/odoo/update.sh b/pkgs/applications/finance/odoo/update.sh deleted file mode 100755 index 0f7ee144cf8a..000000000000 --- a/pkgs/applications/finance/odoo/update.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch - -set -euo pipefail - -DOCKER=$(curl -s https://raw.githubusercontent.com/odoo/docker/master/16.0/Dockerfile) - -get_var() { - echo "$DOCKER" | grep -E "^[A-Z][A-Z][A-Z] ODOO_$1" | sed -r "s|^[A-Z]{3} ODOO_$1.||g" -} - -VERSION=$(get_var VERSION) -RELEASE=$(get_var RELEASE) - -latestVersion="$VERSION.$RELEASE" -currentVersion=$(nix-instantiate --eval -E "with import ./. {}; odoo.version or (lib.getVersion odoo)" | tr -d '"') - -if [[ "$currentVersion" == "$latestVersion" ]]; then - echo "odoo is up-to-date: $currentVersion" - exit 0 -fi - -cd "$(dirname "${BASH_SOURCE[0]}")" - -sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" default.nix -sed -ri "s| odoo_version.+| odoo_version = \"$VERSION\";|" default.nix -sed -ri "s| odoo_release.+| odoo_release = \"$RELEASE\";|" default.nix diff --git a/pkgs/applications/finance/odoo/default.nix b/pkgs/by-name/od/odoo/package.nix similarity index 96% rename from pkgs/applications/finance/odoo/default.nix rename to pkgs/by-name/od/odoo/package.nix index df61e1c02f13..45b0f85b5f7f 100644 --- a/pkgs/applications/finance/odoo/default.nix +++ b/pkgs/by-name/od/odoo/package.nix @@ -32,6 +32,7 @@ in python.pkgs.buildPythonApplication rec { format = "setuptools"; src = fetchzip { + # find latest version on https://nightly.odoo.com/${odoo_version}/nightly/src url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; name = "${pname}-${version}"; hash = "sha256-WdJBs1YgJhHmD+ip6UU2pwXrcZCsbjgOGjrZTRFQBFw="; # odoo diff --git a/pkgs/by-name/od/odoo/update.sh b/pkgs/by-name/od/odoo/update.sh new file mode 100755 index 000000000000..dc64cb718b65 --- /dev/null +++ b/pkgs/by-name/od/odoo/update.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl gnused nix coreutils nix-prefetch + +set -euo pipefail + +VERSION="17.0" # must be incremented manually + +RELEASE="$( + curl "https://nightly.odoo.com/$VERSION/nightly/src/" | + sed -nE 's/.*odoo_'"$VERSION"'.(20[0-9]{6}).tar.gz.*/\1/p' | + tail -n 1 +)" + +latestVersion="$VERSION.$RELEASE" +currentVersion=$(nix-instantiate --eval -E "with import ./. {}; odoo.version or (lib.getVersion odoo)" | tr -d '"') + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "odoo is up-to-date: $currentVersion" + exit 0 +fi + +cd "$(dirname "${BASH_SOURCE[0]}")" + +sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix +sed -ri "s| odoo_version.+| odoo_version = \"$VERSION\";|" package.nix +sed -ri "s| odoo_release.+| odoo_release = \"$RELEASE\";|" package.nix diff --git a/pkgs/applications/finance/odoo/odoo15.nix b/pkgs/by-name/od/odoo15/package.nix similarity index 100% rename from pkgs/applications/finance/odoo/odoo15.nix rename to pkgs/by-name/od/odoo15/package.nix diff --git a/pkgs/applications/finance/odoo/odoo16.nix b/pkgs/by-name/od/odoo16/package.nix similarity index 100% rename from pkgs/applications/finance/odoo/odoo16.nix rename to pkgs/by-name/od/odoo16/package.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d2e5a4aed5ba..2629c3fb5d8c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5968,10 +5968,6 @@ with pkgs; inherit (darwin.apple_sdk.frameworks) AppKit Security; }; - odoo = callPackage ../applications/finance/odoo { }; - odoo16 = callPackage ../applications/finance/odoo/odoo16.nix { }; - odoo15 = callPackage ../applications/finance/odoo/odoo15.nix { }; - odafileconverter = libsForQt5.callPackage ../applications/graphics/odafileconverter { }; oil-buku = callPackage ../applications/misc/oil-buku { }; From 934bfb6c36d141e2035d2c08472dd70936f0249a Mon Sep 17 00:00:00 2001 From: Sirio Balmelli Date: Wed, 19 Jun 2024 13:35:22 +0000 Subject: [PATCH 4/5] odoo: 17.0.20240507 -> 17.0.20240616 Make it possible to override 'odoo_version' and 'odoo_release' by moving them to the input attribute set with default values. Modify 'update.sh' so it correctly updates these defaults. Signed-off-by: Sirio Balmelli --- pkgs/by-name/od/odoo/package.nix | 6 +++--- pkgs/by-name/od/odoo/update.sh | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/od/odoo/package.nix b/pkgs/by-name/od/odoo/package.nix index 45b0f85b5f7f..f2239bd5d59e 100644 --- a/pkgs/by-name/od/odoo/package.nix +++ b/pkgs/by-name/od/odoo/package.nix @@ -6,6 +6,8 @@ , rtlcss , wkhtmltopdf , nixosTests +, odoo_version ? "17.0" +, odoo_release ? "20240610" }: let @@ -23,8 +25,6 @@ let }); }; }; - odoo_version = "17.0"; - odoo_release = "20240507"; in python.pkgs.buildPythonApplication rec { pname = "odoo"; version = "${odoo_version}.${odoo_release}"; @@ -35,7 +35,7 @@ in python.pkgs.buildPythonApplication rec { # find latest version on https://nightly.odoo.com/${odoo_version}/nightly/src url = "https://nightly.odoo.com/${odoo_version}/nightly/src/odoo_${version}.zip"; name = "${pname}-${version}"; - hash = "sha256-WdJBs1YgJhHmD+ip6UU2pwXrcZCsbjgOGjrZTRFQBFw="; # odoo + hash = "sha256-blibGJyaz+MxMazOXhPbGBAJWZoGubirwSnjVYyLBJs="; # odoo }; # needs some investigation diff --git a/pkgs/by-name/od/odoo/update.sh b/pkgs/by-name/od/odoo/update.sh index dc64cb718b65..e9c50ccb5081 100755 --- a/pkgs/by-name/od/odoo/update.sh +++ b/pkgs/by-name/od/odoo/update.sh @@ -22,5 +22,5 @@ fi cd "$(dirname "${BASH_SOURCE[0]}")" sed -ri "s| hash.+ # odoo| hash = \"$(nix-prefetch -q fetchzip --url "https://nightly.odoo.com/${VERSION}/nightly/src/odoo_${latestVersion}.zip")\"; # odoo|g" package.nix -sed -ri "s| odoo_version.+| odoo_version = \"$VERSION\";|" package.nix -sed -ri "s| odoo_release.+| odoo_release = \"$RELEASE\";|" package.nix +sed -ri "s|, odoo_version \? .+|, odoo_version ? \"$VERSION\"|" package.nix +sed -ri "s|, odoo_release \? .+|, odoo_release ? \"$RELEASE\"|" package.nix From 6c10cfba34a151fceed537b4b8642ad033301d7d Mon Sep 17 00:00:00 2001 From: Sirio Balmelli Date: Wed, 19 Jun 2024 13:35:23 +0000 Subject: [PATCH 5/5] tests/odoo: fix broken test Odoo does not initialize the database by default, it must be explicitly initialized for the test as written to succeed. Signed-off-by: Sirio Balmelli --- nixos/tests/odoo.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nixos/tests/odoo.nix b/nixos/tests/odoo.nix index 00ae4a2137d1..45ec7b7d7a6b 100644 --- a/nixos/tests/odoo.nix +++ b/nixos/tests/odoo.nix @@ -14,6 +14,18 @@ import ./make-test-python.nix ({ pkgs, lib, package ? pkgs.odoo, ...} : { package = package; domain = "localhost"; }; + + # odoo does not automatically initialize its database, + # even if passing what _should_ be the equivalent of these options: + # settings = { + # options = { + # database = "odoo"; + # init = "base"; + # }; + # }; + systemd.services.odoo.preStart = '' + HOME=$STATE_DIRECTORY ${package}/bin/odoo -d odoo -i base --stop-after-init --without-demo all + ''; }; };