{ pkgs, inputs, self, }: let localPackages = import ../pkgs {inherit pkgs inputs;}; mkPkgs = overlays: import inputs.nixpkgs { system = pkgs.stdenv.hostPlatform.system; config.allowUnfree = true; inherit overlays; }; upstreamPkgs = mkPkgs []; modifiedPkgs = mkPkgs [self.overlays.modifications]; defaultPkgs = mkPkgs [self.overlays.default]; expectedVersion = "2.28.6"; expectedSrcHash = "sha256-xll2dZon+WyJUXaCoel0htwgOGUqzpZvef/tDLTomZQ="; expectedPnpmHash = "sha256-SjmKXjxIuRY1uFbFLTMlXd0WW+3cVfu4TU+NoZtEYSo="; expectedChangelog = "https://github.com/n8n-io/n8n/releases/tag/n8n@${expectedVersion}"; expectedXlsxIntegrity = "sha512-+nKZ39+nvK7Qq6i0PvWWRA4j/EkfWOtkP/YhMtupm+lJIiHxUrgTr1CcKv1nBk1rHtkRRQ3O2+Ih/q/sA+FXZA=="; checkN8nOverride = overlayName: package: if package.version != expectedVersion then throw "${overlayName} n8n version is ${package.version}, expected ${expectedVersion}" else if package.src.outputHash != expectedSrcHash then throw "${overlayName} n8n src hash is ${package.src.outputHash}, expected ${expectedSrcHash}" else if package.pnpmDeps.outputHash != expectedPnpmHash then throw "${overlayName} n8n pnpmDeps hash is ${package.pnpmDeps.outputHash}, expected ${expectedPnpmHash}" else if package.meta.changelog != expectedChangelog then throw "${overlayName} n8n changelog is ${package.meta.changelog}, expected ${expectedChangelog}" else "ok"; checkPhasesInherited = overlayName: package: if (package.preBuild or null) != (upstreamPkgs.n8n.preBuild or null) then throw "${overlayName} n8n preBuild should be inherited from upstream nixpkgs" else if package.buildPhase != upstreamPkgs.n8n.buildPhase then throw "${overlayName} n8n buildPhase should be inherited from upstream nixpkgs" else "ok"; checkXlsxIntegrity = overlayName: package: pkgs.runCommand "${overlayName}-n8n-xlsx-integrity-test" { inherit expectedXlsxIntegrity; } '' grep -F "xlsx@https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz:" ${package.src}/pnpm-lock.yaml grep -F "resolution: {integrity: $expectedXlsxIntegrity, tarball: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz}" ${package.src}/pnpm-lock.yaml touch $out ''; in pkgs.runCommand "n8n-overlay-test" { n8nOverlayFile = if builtins.pathExists ../overlays/mods/n8n.nix then "ok" else throw "n8n overlay override must live in overlays/mods/n8n.nix"; localN8nAbsent = if localPackages ? n8n then throw "pkgs/default.nix must not export a local n8n package" else "ok"; modificationsOverlayN8n = checkN8nOverride "overlays.modifications" modifiedPkgs.n8n; defaultOverlayN8n = checkN8nOverride "overlays.default" defaultPkgs.n8n; modificationsOverlayPhases = checkPhasesInherited "overlays.modifications" modifiedPkgs.n8n; defaultOverlayPhases = checkPhasesInherited "overlays.default" defaultPkgs.n8n; modificationsOverlayXlsxIntegrity = checkXlsxIntegrity "overlays.modifications" modifiedPkgs.n8n; defaultOverlayXlsxIntegrity = checkXlsxIntegrity "overlays.default" defaultPkgs.n8n; } '' touch $out ''