lol

jellyseerr: 1.9.2 -> 2.1.0 (#360844)

* jellyseerr: migrate to by-name

* jellyseerr: 1.9.2 -> 2.1.0

* nixos/jellyseerr: add configDir option

* jellyseerr: pin nodejs_20

authored by

Weijia Wang and committed by
GitHub
6decfbae 0c596693

+97 -364
+10 -3
nixos/modules/services/misc/jellyseerr.nix
··· 20 20 default = 5055; 21 21 description = ''The port which the Jellyseerr web UI should listen to.''; 22 22 }; 23 + 24 + configDir = lib.mkOption { 25 + type = lib.types.path; 26 + default = "/var/lib/jellyseerr/config"; 27 + description = "Config data directory"; 28 + }; 23 29 }; 24 30 25 31 config = lib.mkIf cfg.enable { ··· 27 33 description = "Jellyseerr, a requests manager for Jellyfin"; 28 34 after = [ "network.target" ]; 29 35 wantedBy = [ "multi-user.target" ]; 30 - environment.PORT = toString cfg.port; 36 + environment = { 37 + PORT = toString cfg.port; 38 + CONFIG_DIRECTORY = cfg.configDir; 39 + }; 31 40 serviceConfig = { 32 41 Type = "exec"; 33 42 StateDirectory = "jellyseerr"; 34 - WorkingDirectory = "${cfg.package}/libexec/jellyseerr/deps/jellyseerr"; 35 43 DynamicUser = true; 36 44 ExecStart = lib.getExe cfg.package; 37 - BindPaths = [ "/var/lib/jellyseerr/:${cfg.package}/libexec/jellyseerr/deps/jellyseerr/config/" ]; 38 45 Restart = "on-failure"; 39 46 ProtectHome = true; 40 47 ProtectSystem = "strict";
+87
pkgs/by-name/je/jellyseerr/package.nix
··· 1 + { 2 + lib, 3 + pnpm_9, 4 + fetchFromGitHub, 5 + stdenv, 6 + makeWrapper, 7 + nodejs_20, 8 + python3, 9 + sqlite, 10 + nix-update-script, 11 + }: 12 + 13 + let 14 + nodejs = nodejs_20; 15 + pnpm = pnpm_9.override { inherit nodejs; }; 16 + in 17 + stdenv.mkDerivation rec { 18 + pname = "jellyseerr"; 19 + version = "2.1.0"; 20 + 21 + src = fetchFromGitHub { 22 + owner = "Fallenbagel"; 23 + repo = "jellyseerr"; 24 + rev = "v${version}"; 25 + hash = "sha256-5kaeqhjUy9Lgx4/uFcGRlAo+ROEOdTWc2m49rq8R8Hs="; 26 + }; 27 + 28 + pnpmDeps = pnpm.fetchDeps { 29 + inherit pname version src; 30 + hash = "sha256-xu6DeaBArQmnqEnIgjc1DTZujQebSkjuai9tMHeQWCk="; 31 + }; 32 + 33 + buildInputs = [ sqlite ]; 34 + 35 + nativeBuildInputs = [ 36 + python3 37 + nodejs 38 + makeWrapper 39 + pnpm.configHook 40 + ]; 41 + 42 + preBuild = '' 43 + export npm_config_nodedir=${nodejs} 44 + pushd node_modules 45 + pnpm rebuild bcrypt sqlite3 46 + popd 47 + ''; 48 + 49 + buildPhase = '' 50 + runHook preBuild 51 + pnpm build 52 + pnpm prune --prod --ignore-scripts 53 + rm -rf .next/cache 54 + runHook postBuild 55 + ''; 56 + 57 + installPhase = '' 58 + runHook preInstall 59 + mkdir -p $out/share 60 + cp -r -t $out/share .next node_modules dist public package.json overseerr-api.yml 61 + runHook postInstall 62 + ''; 63 + 64 + postInstall = '' 65 + mkdir -p $out/bin 66 + makeWrapper '${nodejs}/bin/node' "$out/bin/jellyseerr" \ 67 + --add-flags "$out/share/dist/index.js" \ 68 + --chdir "$out/share" \ 69 + --set NODE_ENV production 70 + ''; 71 + 72 + passthru.updateScript = nix-update-script { }; 73 + 74 + meta = with lib; { 75 + description = "Fork of overseerr for jellyfin support"; 76 + homepage = "https://github.com/Fallenbagel/jellyseerr"; 77 + longDescription = '' 78 + Jellyseerr is a free and open source software application for managing 79 + requests for your media library. It is a a fork of Overseerr built to 80 + bring support for Jellyfin & Emby media servers! 81 + ''; 82 + license = licenses.mit; 83 + maintainers = with maintainers; [ camillemndn ]; 84 + platforms = platforms.linux; 85 + mainProgram = "jellyseerr"; 86 + }; 87 + }
-96
pkgs/servers/jellyseerr/default.nix
··· 1 - { 2 - lib, 3 - mkYarnPackage, 4 - fetchFromGitHub, 5 - fetchYarnDeps, 6 - makeWrapper, 7 - node-pre-gyp, 8 - nodejs, 9 - python3, 10 - sqlite, 11 - }: 12 - 13 - mkYarnPackage rec { 14 - pname = "jellyseerr"; 15 - version = "1.9.2"; 16 - 17 - src = fetchFromGitHub { 18 - owner = "Fallenbagel"; 19 - repo = "jellyseerr"; 20 - rev = "v${version}"; 21 - hash = "sha256-TXe/k/pb7idu7G1wGu6TZksnoFQ5/PN0voVlve3k1UI="; 22 - }; 23 - 24 - packageJSON = ./package.json; 25 - 26 - offlineCache = fetchYarnDeps { 27 - yarnLock = "${src}/yarn.lock"; 28 - hash = "sha256-2iRxguxEI+YKm8ddhRgZMvfZuUgQmCK5ER4jMCFJQMQ="; 29 - }; 30 - 31 - nativeBuildInputs = [ 32 - nodejs 33 - makeWrapper 34 - ]; 35 - 36 - # Fixes "SQLite package has not been found installed" at launch 37 - pkgConfig.sqlite3 = { 38 - nativeBuildInputs = [ 39 - node-pre-gyp 40 - python3 41 - sqlite 42 - ]; 43 - postInstall = '' 44 - export CPPFLAGS="-I${nodejs}/include/node" 45 - node-pre-gyp install --prefer-offline --build-from-source --nodedir=${nodejs}/include/node --sqlite=${sqlite.dev} 46 - rm -r build-tmp-napi-v6 47 - ''; 48 - }; 49 - 50 - pkgConfig.bcrypt = { 51 - nativeBuildInputs = [ 52 - node-pre-gyp 53 - python3 54 - ]; 55 - postInstall = '' 56 - export CPPFLAGS="-I${nodejs}/include/node" 57 - node-pre-gyp install --prefer-offline --build-from-source --nodedir=${nodejs}/include/node 58 - ''; 59 - }; 60 - 61 - buildPhase = '' 62 - runHook preBuild 63 - ( 64 - shopt -s dotglob 65 - cd deps/jellyseerr 66 - rm -r config/* 67 - yarn build 68 - rm -r .next/cache 69 - ) 70 - runHook postBuild 71 - ''; 72 - 73 - postInstall = '' 74 - makeWrapper '${nodejs}/bin/node' "$out/bin/jellyseerr" \ 75 - --add-flags "$out/libexec/jellyseerr/deps/jellyseerr/dist/index.js" \ 76 - --set NODE_ENV production 77 - ''; 78 - 79 - doDist = false; 80 - 81 - passthru.updateScript = ./update.sh; 82 - 83 - meta = with lib; { 84 - description = "Fork of overseerr for jellyfin support"; 85 - homepage = "https://github.com/Fallenbagel/jellyseerr"; 86 - longDescription = '' 87 - Jellyseerr is a free and open source software application for managing 88 - requests for your media library. It is a a fork of Overseerr built to 89 - bring support for Jellyfin & Emby media servers! 90 - ''; 91 - license = licenses.mit; 92 - maintainers = with maintainers; [ camillemndn ]; 93 - platforms = platforms.linux; 94 - mainProgram = "jellyseerr"; 95 - }; 96 - }
-247
pkgs/servers/jellyseerr/package.json
··· 1 - { 2 - "name": "jellyseerr", 3 - "version": "1.9.2", 4 - "private": true, 5 - "scripts": { 6 - "dev": "nodemon -e ts --watch server --watch overseerr-api.yml -e .json,.ts,.yml -x ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/index.ts", 7 - "build:server": "tsc --project server/tsconfig.json && copyfiles -u 2 server/templates/**/*.{html,pug} dist/templates && tsc-alias -p server/tsconfig.json", 8 - "build:next": "next build", 9 - "build": "yarn build:next && yarn build:server", 10 - "lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --cache", 11 - "lintfix": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --fix", 12 - "start": "NODE_ENV=production node dist/index.js", 13 - "i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault true \"./src/**/!(*.test).{ts,tsx}\"", 14 - "migration:generate": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:generate -d server/datasource.ts", 15 - "migration:create": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:create -d server/datasource.ts", 16 - "migration:run": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:run -d server/datasource.ts", 17 - "format": "prettier --loglevel warn --write --cache .", 18 - "format:check": "prettier --check --cache .", 19 - "typecheck": "yarn typecheck:server && yarn typecheck:client", 20 - "typecheck:server": "tsc --project server/tsconfig.json --noEmit", 21 - "typecheck:client": "tsc --noEmit", 22 - "prepare": "husky install", 23 - "cypress:open": "cypress open", 24 - "cypress:prepare": "ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/scripts/prepareTestDb.ts", 25 - "cypress:build": "yarn build && yarn cypress:prepare" 26 - }, 27 - "repository": { 28 - "type": "git", 29 - "url": "https://github.com/fallenbagel/jellyseerr.git" 30 - }, 31 - "license": "MIT", 32 - "dependencies": { 33 - "@formatjs/intl-displaynames": "6.2.6", 34 - "@formatjs/intl-locale": "3.1.1", 35 - "@formatjs/intl-pluralrules": "5.1.10", 36 - "@formatjs/intl-utils": "3.8.4", 37 - "@headlessui/react": "1.7.12", 38 - "@heroicons/react": "2.0.16", 39 - "@supercharge/request-ip": "1.2.0", 40 - "@svgr/webpack": "6.5.1", 41 - "@tanem/react-nprogress": "5.0.30", 42 - "ace-builds": "1.15.2", 43 - "axios": "1.3.4", 44 - "axios-rate-limit": "1.3.0", 45 - "bcrypt": "5.1.0", 46 - "bowser": "2.11.0", 47 - "cacheable-lookup": "^7.0.0", 48 - "connect-typeorm": "1.1.4", 49 - "cookie-parser": "1.4.6", 50 - "copy-to-clipboard": "3.3.3", 51 - "country-flag-icons": "1.5.5", 52 - "cronstrue": "2.23.0", 53 - "csurf": "1.11.0", 54 - "date-fns": "2.29.3", 55 - "dayjs": "1.11.7", 56 - "email-templates": "9.0.0", 57 - "email-validator": "2.0.4", 58 - "express": "4.18.2", 59 - "express-openapi-validator": "4.13.8", 60 - "express-rate-limit": "6.7.0", 61 - "express-session": "1.17.3", 62 - "formik": "2.2.9", 63 - "gravatar-url": "3.1.0", 64 - "intl": "1.2.5", 65 - "lodash": "4.17.21", 66 - "next": "12.3.4", 67 - "node-cache": "5.1.2", 68 - "node-gyp": "9.3.1", 69 - "node-schedule": "2.1.1", 70 - "nodemailer": "6.9.1", 71 - "openpgp": "5.7.0", 72 - "plex-api": "5.3.2", 73 - "pug": "3.0.2", 74 - "react": "18.2.0", 75 - "react-ace": "10.1.0", 76 - "react-animate-height": "2.1.2", 77 - "react-aria": "3.23.0", 78 - "react-dom": "18.2.0", 79 - "react-intersection-observer": "9.4.3", 80 - "react-intl": "6.2.10", 81 - "react-markdown": "8.0.5", 82 - "react-popper-tooltip": "4.4.2", 83 - "react-select": "5.7.0", 84 - "react-spring": "9.7.1", 85 - "react-tailwindcss-datepicker-sct": "1.3.4", 86 - "react-toast-notifications": "2.5.1", 87 - "react-truncate-markup": "5.1.2", 88 - "react-use-clipboard": "1.0.9", 89 - "reflect-metadata": "0.1.13", 90 - "secure-random-password": "0.2.3", 91 - "semver": "7.3.8", 92 - "sqlite3": "5.1.4", 93 - "swagger-ui-express": "4.6.2", 94 - "swr": "2.0.4", 95 - "typeorm": "0.3.12", 96 - "web-push": "3.5.0", 97 - "winston": "3.8.2", 98 - "winston-daily-rotate-file": "4.7.1", 99 - "xml2js": "0.4.23", 100 - "yamljs": "0.3.0", 101 - "yup": "0.32.11", 102 - "zod": "3.20.6" 103 - }, 104 - "devDependencies": { 105 - "@babel/cli": "7.21.0", 106 - "@commitlint/cli": "17.4.4", 107 - "@commitlint/config-conventional": "17.4.4", 108 - "@semantic-release/changelog": "6.0.2", 109 - "@semantic-release/commit-analyzer": "9.0.2", 110 - "@semantic-release/exec": "6.0.3", 111 - "@semantic-release/git": "10.0.1", 112 - "@tailwindcss/aspect-ratio": "0.4.2", 113 - "@tailwindcss/forms": "0.5.3", 114 - "@tailwindcss/typography": "0.5.9", 115 - "@types/bcrypt": "5.0.0", 116 - "@types/cookie-parser": "1.4.3", 117 - "@types/country-flag-icons": "1.2.0", 118 - "@types/csurf": "1.11.2", 119 - "@types/email-templates": "8.0.4", 120 - "@types/express": "4.17.17", 121 - "@types/express-session": "1.17.6", 122 - "@types/lodash": "4.14.191", 123 - "@types/node": "17.0.36", 124 - "@types/node-schedule": "2.1.0", 125 - "@types/nodemailer": "6.4.7", 126 - "@types/react": "18.0.28", 127 - "@types/react-dom": "18.0.11", 128 - "@types/react-transition-group": "4.4.5", 129 - "@types/secure-random-password": "0.2.1", 130 - "@types/semver": "7.3.13", 131 - "@types/swagger-ui-express": "4.1.3", 132 - "@types/web-push": "3.3.2", 133 - "@types/xml2js": "0.4.11", 134 - "@types/yamljs": "0.2.31", 135 - "@types/yup": "0.29.14", 136 - "@typescript-eslint/eslint-plugin": "5.54.0", 137 - "@typescript-eslint/parser": "5.54.0", 138 - "autoprefixer": "10.4.13", 139 - "babel-plugin-react-intl": "8.2.25", 140 - "babel-plugin-react-intl-auto": "3.3.0", 141 - "commitizen": "4.3.0", 142 - "copyfiles": "2.4.1", 143 - "cy-mobile-commands": "0.3.0", 144 - "cypress": "12.7.0", 145 - "cz-conventional-changelog": "3.3.0", 146 - "eslint": "8.35.0", 147 - "eslint-config-next": "12.3.4", 148 - "eslint-config-prettier": "8.6.0", 149 - "eslint-plugin-formatjs": "4.9.0", 150 - "eslint-plugin-jsx-a11y": "6.7.1", 151 - "eslint-plugin-no-relative-import-paths": "1.5.2", 152 - "eslint-plugin-prettier": "4.2.1", 153 - "eslint-plugin-react": "7.32.2", 154 - "eslint-plugin-react-hooks": "4.6.0", 155 - "extract-react-intl-messages": "4.1.1", 156 - "husky": "8.0.3", 157 - "lint-staged": "13.1.2", 158 - "nodemon": "2.0.20", 159 - "postcss": "8.4.21", 160 - "prettier": "2.8.4", 161 - "prettier-plugin-organize-imports": "3.2.2", 162 - "prettier-plugin-tailwindcss": "0.2.3", 163 - "semantic-release": "19.0.5", 164 - "semantic-release-docker-buildx": "1.0.1", 165 - "tailwindcss": "3.2.7", 166 - "ts-node": "10.9.1", 167 - "tsc-alias": "1.8.2", 168 - "tsconfig-paths": "4.1.2", 169 - "typescript": "4.9.5" 170 - }, 171 - "resolutions": { 172 - "sqlite3/node-gyp": "8.4.1", 173 - "@types/react": "18.0.28", 174 - "@types/react-dom": "18.0.11", 175 - "@types/express-session": "1.17.6" 176 - }, 177 - "config": { 178 - "commitizen": { 179 - "path": "./node_modules/cz-conventional-changelog" 180 - } 181 - }, 182 - "lint-staged": { 183 - "**/*.{ts,tsx,js}": [ 184 - "prettier --write", 185 - "eslint" 186 - ], 187 - "**/*.{json,md,css}": [ 188 - "prettier --write" 189 - ] 190 - }, 191 - "commitlint": { 192 - "extends": [ 193 - "@commitlint/config-conventional" 194 - ] 195 - }, 196 - "release": { 197 - "plugins": [ 198 - "@semantic-release/commit-analyzer", 199 - "@semantic-release/release-notes-generator", 200 - [ 201 - "@semantic-release/changelog", 202 - { 203 - "changelogFile": "CHANGELOG.md" 204 - } 205 - ], 206 - "@semantic-release/npm", 207 - [ 208 - "@semantic-release/git", 209 - { 210 - "assets": [ 211 - "package.json", 212 - "CHANGELOG.md" 213 - ], 214 - "message": "chore(release): ${nextRelease.version}" 215 - } 216 - ], 217 - "semantic-release-docker-buildx", 218 - [ 219 - "@semantic-release/github", 220 - { 221 - "addReleases": "bottom" 222 - } 223 - ] 224 - ], 225 - "branches": [ 226 - "main" 227 - ], 228 - "npmPublish": false, 229 - "publish": [ 230 - { 231 - "path": "semantic-release-docker-buildx", 232 - "buildArgs": { 233 - "COMMIT_TAG": "$GIT_SHA" 234 - }, 235 - "imageNames": [ 236 - "fallenbagel/jellyseerr" 237 - ], 238 - "platforms": [ 239 - "linux/amd64", 240 - "linux/arm64", 241 - "linux/arm/v7" 242 - ] 243 - }, 244 - "@semantic-release/github" 245 - ] 246 - } 247 - }
-16
pkgs/servers/jellyseerr/update.sh
··· 1 - #!/usr/bin/env nix-shell 2 - #!nix-shell -i bash -p curl jq common-updater-scripts nix prefetch-yarn-deps 3 - 4 - set -eu -o pipefail 5 - 6 - version=${1:-$(curl -s https://api.github.com/repos/Fallenbagel/jellyseerr/releases/latest | jq --raw-output '.tag_name[1:]')} 7 - update-source-version jellyseerr $version 8 - 9 - nix_file=$(nix-instantiate --eval --strict -A "jellyseerr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/') 10 - nix_dir=$(dirname $nix_file) 11 - cp $(nix-instantiate --eval --expr 'with import ./default.nix { }; "${jellyseerr.src}/package.json"' | sed 's/"//g') $nix_dir 12 - 13 - old_yarn_hash=$(nix-instantiate --eval --strict -A "jellyseerr.offlineCache.outputHash" | tr -d '"' | sed -re 's|[+]|\\&|g') 14 - lock_file=$(nix-instantiate --eval --expr 'with import ./default.nix { }; "${jellyseerr.src}/yarn.lock"' | sed 's/"//g') 15 - new_yarn_hash=$(nix hash to-sri --type sha256 $(prefetch-yarn-deps $lock_file)) 16 - sed -i "$nix_file" -re "s|\"$old_yarn_hash\"|\"$new_yarn_hash\"|"
-2
pkgs/top-level/all-packages.nix
··· 2404 2404 2405 2405 jellyfin-mpv-shim = python3Packages.callPackage ../applications/video/jellyfin-mpv-shim { }; 2406 2406 2407 - jellyseerr = callPackage ../servers/jellyseerr { }; 2408 - 2409 2407 juce = callPackage ../development/misc/juce { 2410 2408 stdenv = if stdenv.hostPlatform.isDarwin then overrideSDK stdenv "11.0" else stdenv; 2411 2409 };