From 777edf6a604bd759c77d5246d8aa26c66807f56c Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 5 Oct 2022 22:48:20 +0200 Subject: [PATCH] epgstation.updateScript: Fix eval and clean up - `gnused` was not passed, use `callPackage` to prevent such issues in the future. - Do not pass redundant attributes like `pname` or `version` to the script, `update.nix` already passes them as environment variables. - Do not combine the scripts manually, we have combinators for that. - Pass the path to update as an argument so that `update.nix` can ensure it is a writeable path instead a one in the Nix store. --- .../applications/video/epgstation/default.nix | 20 +--- pkgs/applications/video/epgstation/update.nix | 97 +++++++++---------- 2 files changed, 50 insertions(+), 67 deletions(-) diff --git a/pkgs/applications/video/epgstation/default.nix b/pkgs/applications/video/epgstation/default.nix index 0d058106a7c1..5fab39fd396a 100644 --- a/pkgs/applications/video/epgstation/default.nix +++ b/pkgs/applications/video/epgstation/default.nix @@ -1,14 +1,11 @@ { lib , stdenv , fetchFromGitHub -, gitUpdater -, writers , makeWrapper , bash , nodejs , gzip -, jq -, yq +, callPackage }: let @@ -33,7 +30,8 @@ let }); server = nodejs.pkgs.epgstation.override (drv: { - inherit src; + # NOTE: updateScript relies on version matching the src. + inherit version src; # This is set to false to keep devDependencies at build time. Build time # dependencies are pruned afterwards. @@ -108,17 +106,7 @@ let # NOTE: this may take a while since it has to update all packages in # nixpkgs.nodePackages - passthru.updateScript = import ./update.nix { - inherit lib; - inherit (src.meta) homepage; - inherit - pname - version - gitUpdater - writers - jq - yq; - }; + passthru.updateScript = callPackage ./update.nix { }; # nodePackages.epgstation is a stub package to fetch npm dependencies and # its meta.platforms is made empty to prevent users from installing it diff --git a/pkgs/applications/video/epgstation/update.nix b/pkgs/applications/video/epgstation/update.nix index 405dcf53837e..41b7b9ab1e17 100644 --- a/pkgs/applications/video/epgstation/update.nix +++ b/pkgs/applications/video/epgstation/update.nix @@ -1,67 +1,62 @@ -{ pname -, version -, homepage -, lib -, gitUpdater +{ gitUpdater , writers , jq , yq , gnused +, _experimental-update-script-combinators }: let - updater = gitUpdater { - inherit pname version; - attrPath = lib.toLower pname; + updateSource = gitUpdater { rev-prefix = "v"; }; - updateScript = builtins.elemAt updater.command 0; - updateArgs = map (lib.escapeShellArg) (builtins.tail updater.command); -in writers.writeBash "update-epgstation" '' - set -euxo pipefail + updateLocks = writers.writeBash "update-epgstation" '' + set -euxo pipefail - # bump the version - ${updateScript} ${lib.concatStringsSep " " updateArgs} + cd "$1" - cd "${toString ./.}" + # Get the path to the latest source. Note that we can't just pass the value + # of epgstation.src directly because it'd be evaluated before we can run + # updateScript. + SRC="$(nix-build ../../../.. --no-out-link -A epgstation.src)" + if [[ "$UPDATE_NIX_OLD_VERSION" == "$(${jq}/bin/jq -r .version "$SRC/package.json")" ]]; then + echo "[INFO] Already using the latest version of $UPDATE_NIX_PNAME" >&2 + exit + fi - # Get the path to the latest source. Note that we can't just pass the value - # of epgstation.src directly because it'd be evaluated before we can run - # updateScript. - SRC="$(nix-build ../../../.. --no-out-link -A epgstation.src)" - if [[ "${version}" == "$(${jq}/bin/jq -r .version "$SRC/package.json")" ]]; then - echo "[INFO] Already using the latest version of ${pname}" >&2 - exit - fi + # Regenerate package.json from the latest source. + ${jq}/bin/jq '. + { + dependencies: (.dependencies + .devDependencies), + } | del(.devDependencies, .main, .scripts)' \ + "$SRC/package.json" \ + > package.json + ${jq}/bin/jq '. + { + dependencies: (.dependencies + .devDependencies), + } | del(.devDependencies, .main, .scripts)' \ + "$SRC/client/package.json" \ + > client/package.json - # Regenerate package.json from the latest source. - ${jq}/bin/jq '. + { - dependencies: (.dependencies + .devDependencies), - } | del(.devDependencies, .main, .scripts)' \ - "$SRC/package.json" \ - > package.json - ${jq}/bin/jq '. + { - dependencies: (.dependencies + .devDependencies), - } | del(.devDependencies, .main, .scripts)' \ - "$SRC/client/package.json" \ - > client/package.json + # Fix issue with old sqlite3 version pinned that depends on very old node-gyp 3.x + ${gnused}/bin/sed -i -e 's/"sqlite3":\s*"5.0.[0-9]\+"/"sqlite3": "5.0.11"/' package.json - # Fix issue with old sqlite3 version pinned that depends on very old node-gyp 3.x - ${gnused}/bin/sed -i -e 's/"sqlite3":\s*"5.0.[0-9]\+"/"sqlite3": "5.0.11"/' package.json + # Regenerate node packages to update the pre-overriden epgstation derivation. + # This must come *after* package.json has been regenerated. + pushd ../../../development/node-packages + ./generate.sh + popd - # Regenerate node packages to update the pre-overriden epgstation derivation. - # This must come *after* package.json has been regenerated. - pushd ../../../development/node-packages - ./generate.sh - popd + # Generate default streaming settings for the nixos module. + pushd ../../../../nixos/modules/services/video/epgstation + ${yq}/bin/yq -j '{ urlscheme , stream }' \ + "$SRC/config/config.yml.template" \ + > streaming.json - # Generate default streaming settings for the nixos module. - pushd ../../../../nixos/modules/services/video/epgstation - ${yq}/bin/yq -j '{ urlscheme , stream }' \ - "$SRC/config/config.yml.template" \ - > streaming.json - - # Fix generated output for EditorConfig compliance - printf '\n' >> streaming.json # rule: insert_final_newline - popd -'' + # Fix generated output for EditorConfig compliance + printf '\n' >> streaming.json # rule: insert_final_newline + popd + ''; +in +_experimental-update-script-combinators.sequence [ + updateSource + [updateLocks ./.] +]