diff --git a/pkgs/servers/web-apps/lemmy/package.json b/pkgs/servers/web-apps/lemmy/package.json deleted file mode 100644 index 97600d6801a2..000000000000 --- a/pkgs/servers/web-apps/lemmy/package.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "name": "lemmy-ui", - "description": "An isomorphic UI for lemmy", - "version": "0.19.3", - "author": "Dessalines ", - "license": "AGPL-3.0-only", - "scripts": { - "analyze": "webpack --mode=none", - "build:dev": "webpack --env COMMIT_HASH=$(git rev-parse --short HEAD) --mode=development", - "build:prod": "webpack --env COMMIT_HASH=$(git rev-parse --short HEAD) --mode=production", - "clean": "yarn run rimraf dist", - "dev": "yarn build:dev --watch", - "lint": "yarn translations:generate && tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx \"src/**\" && prettier --check \"src/**/*.{ts,tsx,js,css,scss}\"", - "postinstall": "husky install", - "prebuild:dev": "yarn clean && node generate_translations.js", - "prebuild:prod": "yarn clean && node generate_translations.js", - "prepare": "husky install", - "themes:build": "sass src/assets/css/themes/:src/assets/css/themes", - "themes:watch": "sass --watch src/assets/css/themes/:src/assets/css/themes", - "translations:generate": "node generate_translations.js", - "translations:init": "git submodule init && yarn translations:update", - "translations:update": "git submodule update --remote --recursive" - }, - "repository": "https://github.com/LemmyNet/lemmy-ui", - "engines": { - "node": ">=8.9.0" - }, - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-decorators": "^7.23.7", - "@babel/plugin-transform-runtime": "^7.23.7", - "@babel/plugin-transform-typescript": "^7.23.6", - "@babel/preset-env": "^7.23.8", - "@babel/preset-typescript": "^7.21.5", - "@babel/runtime": "^7.23.8", - "@emoji-mart/data": "^1.1.0", - "@shortcm/qr-image": "^9.0.2", - "autosize": "^6.0.1", - "babel-loader": "^9.1.3", - "babel-plugin-inferno": "^6.7.1", - "bootstrap": "^5.3.1", - "check-password-strength": "^2.0.7", - "classnames": "^2.5.1", - "clean-webpack-plugin": "^4.0.0", - "cookie": "^0.6.0", - "copy-webpack-plugin": "^12.0.2", - "css-loader": "^6.9.1", - "date-fns": "^3.2.0", - "emoji-mart": "^5.4.0", - "emoji-short-name": "^2.0.0", - "express": "~4.18.2", - "history": "^5.3.0", - "html-to-text": "^9.0.5", - "husky": "^8.0.3", - "i18next": "^23.7.16", - "inferno": "^8.2.3", - "inferno-create-element": "^8.2.3", - "inferno-helmet": "^5.2.1", - "inferno-hydrate": "^8.2.3", - "inferno-i18next-dess": "0.0.2", - "inferno-router": "^8.2.3", - "inferno-server": "^8.2.3", - "jwt-decode": "^4.0.0", - "lemmy-js-client": "0.19.2-alpha.1", - "lodash.isequal": "^4.5.0", - "markdown-it": "^14.0.0", - "markdown-it-bidi": "^0.1.0", - "markdown-it-container": "^4.0.0", - "markdown-it-emoji": "^3.0.0", - "markdown-it-footnote": "^4.0.0", - "markdown-it-highlightjs": "^4.0.1", - "markdown-it-html5-embed": "^1.0.0", - "markdown-it-ruby": "^0.1.1", - "markdown-it-sub": "^2.0.0", - "markdown-it-sup": "^2.0.0", - "mini-css-extract-plugin": "^2.7.7", - "register-service-worker": "^1.7.2", - "run-node-webpack-plugin": "^1.3.0", - "rxjs": "^7.8.1", - "sanitize-html": "^2.11.0", - "sass": "^1.70.0", - "sass-loader": "^14.0.0", - "serialize-javascript": "^6.0.2", - "service-worker-webpack": "^1.0.0", - "sharp": "0.32.6", - "tippy.js": "^6.3.7", - "toastify-js": "^1.12.0", - "tributejs": "^5.1.3", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4", - "webpack-node-externals": "^3.0.0" - }, - "devDependencies": { - "@babel/core": "^7.23.7", - "@types/autosize": "^4.0.0", - "@types/bootstrap": "^5.2.6", - "@types/cookie": "^0.6.0", - "@types/express": "^4.17.17", - "@types/html-to-text": "^9.0.0", - "@types/lodash.isequal": "^4.5.6", - "@types/markdown-it": "^13.0.7", - "@types/markdown-it-container": "^2.0.6", - "@types/node": "^20.11.5", - "@types/path-browserify": "^1.0.0", - "@types/sanitize-html": "^2.9.0", - "@types/serialize-javascript": "^5.0.1", - "@types/toastify-js": "^1.12.0", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "eslint": "^8.56.0", - "eslint-plugin-inferno": "^7.33.3", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-prettier": "^5.1.3", - "import-sort-style-module": "^6.0.0", - "lint-staged": "^15.2.0", - "prettier": "^3.2.4", - "prettier-plugin-import-sort": "^0.0.7", - "prettier-plugin-organize-imports": "^3.2.3", - "prettier-plugin-packagejson": "^2.4.9", - "rimraf": "^5.0.0", - "sortpack": "^2.4.0", - "style-loader": "^3.3.4", - "terser": "^5.27.0", - "typescript": "^5.3.3", - "typescript-language-server": "^4.3.1", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-dev-server": "4.15.1" - }, - "lint-staged": { - "*.{css, scss}": [ - "prettier --write" - ], - "*.{ts,tsx,js}": [ - "prettier --write", - "eslint --fix" - ], - "package.json": [ - "sortpack" - ] - }, - "packageManager": "yarn@1.22.19", - "engineStrict": true, - "importSort": { - ".js, .jsx, .ts, .tsx": { - "style": "module", - "parser": "typescript" - } - } -} diff --git a/pkgs/servers/web-apps/lemmy/pin.json b/pkgs/servers/web-apps/lemmy/pin.json index fdab1c9d63d6..36c61ba3d92b 100644 --- a/pkgs/servers/web-apps/lemmy/pin.json +++ b/pkgs/servers/web-apps/lemmy/pin.json @@ -1,8 +1,8 @@ { - "serverVersion": "0.19.3", - "uiVersion": "0.19.3", - "serverHash": "sha256-iO7bY2oChx0cZbwgXMrrV4e1kffop9s4xmepNywnApU=", - "serverCargoHash": "sha256-XXfg0o/LQ/imnsHsREoBXMDP1hU5Stxv0s6AP+o+USc=", - "uiHash": "sha256-6GGiKCNL0PALdz0W0d1OOPyMIA5kaoL3148j9GWzrMM=", - "uiYarnDepsHash": "sha256-UQ+B2vF34L+HuisyO7wdW2zCfEEGa8YdnoaB4jHi+DY=" + "serverVersion": "0.19.5", + "uiVersion": "0.19.5", + "serverHash": "sha256-ellHimZdbB5EQSHVsppBNYyZOODpUADvUn7u6JOu1ns=", + "serverCargoHash": "sha256-UdFw8RPKYLqY98So8z9kiaVCl3b8KaqIoUMK/EV2uNM=", + "uiHash": "sha256-bhbZQ8tDnJ6TWYj+ki/JQW8cbVjRfLzxaXRDX9JAIm4=", + "uiPNPMDepsHash": "sha256-aJPa46a2W8xHlDzFt0QMFQtEoUSkFQtN9VhaQOvoVio=" } diff --git a/pkgs/servers/web-apps/lemmy/server.nix b/pkgs/servers/web-apps/lemmy/server.nix index d4d44c473f5c..8cb65bfef2bf 100644 --- a/pkgs/servers/web-apps/lemmy/server.nix +++ b/pkgs/servers/web-apps/lemmy/server.nix @@ -50,6 +50,10 @@ rustPlatform.buildRustPackage rec { checkFlags = [ # test requires database access "--skip=session_middleware::tests::test_session_auth" + + # tests require network access + "--skip=scheduled_tasks::tests::test_nodeinfo_mastodon_social" + "--skip=scheduled_tasks::tests::test_nodeinfo_voyager_lemmy_ml" ]; passthru.updateScript = ./update.py; @@ -59,7 +63,7 @@ rustPlatform.buildRustPackage rec { description = "🐀 Building a federated alternative to reddit in rust"; homepage = "https://join-lemmy.org/"; license = licenses.agpl3Only; - maintainers = with maintainers; [ happysalada billewanick ]; + maintainers = with maintainers; [ happysalada billewanick georgyo ]; mainProgram = "lemmy_server"; }; } diff --git a/pkgs/servers/web-apps/lemmy/ui.nix b/pkgs/servers/web-apps/lemmy/ui.nix index 2bb1ccaeb842..b3b267d2f722 100644 --- a/pkgs/servers/web-apps/lemmy/ui.nix +++ b/pkgs/servers/web-apps/lemmy/ui.nix @@ -1,11 +1,11 @@ { lib -, mkYarnPackage +, stdenvNoCC , libsass , nodejs , python3 , pkg-config +, pnpm_9 , fetchFromGitHub -, fetchYarnDeps , nixosTests , vips , nodePackages @@ -14,85 +14,70 @@ let pinData = lib.importJSON ./pin.json; - pkgConfig = { - node-sass = { - nativeBuildInputs = [ pkg-config ]; - buildInputs = [ libsass python3 ]; - postInstall = '' - LIBSASS_EXT=auto yarn --offline run build - rm build/config.gypi - ''; - }; - sharp = { - nativeBuildInputs = [ pkg-config nodePackages.node-gyp nodePackages.semver ]; - buildInputs = [ vips ]; - postInstall = '' - yarn --offline run install - ''; - }; - }; - name = "lemmy-ui"; +in + +stdenvNoCC.mkDerivation (finalAttrs: { + + pname = "lemmy-ui"; version = pinData.uiVersion; - src = fetchFromGitHub { + src = with finalAttrs; fetchFromGitHub { owner = "LemmyNet"; - repo = name; + repo = pname; rev = version; fetchSubmodules = true; hash = pinData.uiHash; }; -in -mkYarnPackage { - inherit src pkgConfig name version; + nativeBuildInputs = [ + nodejs + pnpm_9.configHook + ]; + + buildInputs = [libsass vips ]; extraBuildInputs = [ libsass ]; - - packageJSON = ./package.json; - offlineCache = fetchYarnDeps { - yarnLock = src + "/yarn.lock"; - hash = pinData.uiYarnDepsHash; + pnpmDeps = pnpm_9.fetchDeps { + inherit (finalAttrs) pname version src; + hash = pinData.uiPNPMDepsHash; }; - patchPhase = '' - substituteInPlace ./package.json \ - --replace '$(git rev-parse --short HEAD)' "${src.rev}" \ - --replace 'yarn clean' 'yarn --offline clean' \ - --replace 'yarn run rimraf dist' 'yarn --offline run rimraf dist' - ''; - - yarnPreBuild = '' - export npm_config_nodedir=${nodejs} - ''; - buildPhase = '' - # Yarn writes cache directories etc to $HOME. - export HOME=$PWD/yarn_home + runHook preBuild - ln -sf $PWD/node_modules $PWD/deps/lemmy-ui/ - echo 'export const VERSION = "${version}";' > $PWD/deps/lemmy-ui/src/shared/version.ts + pnpm build:prod - yarn --offline build:prod + runHook postBuild ''; - preInstall = '' + # installPhase = '' + # runHook preInstall + + # mkdir -p $out/{bin,lib/${finalAttrs.pname}} + # mv {dist,node_modules} $out/lib/${finalAttrs.pname} + + # runHook postInstall + + # ''; + preInstall = '' mkdir $out - cp -R ./deps/lemmy-ui/dist $out + cp -R ./dist $out cp -R ./node_modules $out ''; + distPhase = "true"; passthru.updateScript = ./update.py; passthru.tests.lemmy-ui = nixosTests.lemmy; - passthru.commit_sha = src.rev; + passthru.commit_sha = finalAttrs.src.rev; meta = with lib; { description = "Building a federated alternative to reddit in rust"; homepage = "https://join-lemmy.org/"; license = licenses.agpl3Only; - maintainers = with maintainers; [ happysalada billewanick ]; + maintainers = with maintainers; [ happysalada billewanick georgyo ]; inherit (nodejs.meta) platforms; }; -} +}) diff --git a/pkgs/servers/web-apps/lemmy/update.py b/pkgs/servers/web-apps/lemmy/update.py index 4e867553b790..c9ce4e6e8823 100755 --- a/pkgs/servers/web-apps/lemmy/update.py +++ b/pkgs/servers/web-apps/lemmy/update.py @@ -30,7 +30,7 @@ class Pin: serverHash: str = "" serverCargoHash: str = "" uiHash: str = "" - uiYarnDepsHash: str = "" + uiPNPMDepsHash: str = "" filename: Optional[str] = None @@ -136,18 +136,10 @@ def make_server_pin(pin: Pin, attr: str) -> None: pin.write() -def make_ui_pin(pin: Pin, package_json: str, attr: str) -> None: - # Save a copy of package.json - print("Getting package.json") - with urlopen( - f"https://raw.githubusercontent.com/{OWNER}/{UI_REPO}/{pin.uiVersion}/package.json" - ) as resp: - with open(os.path.join(SCRIPT_DIR, package_json), "wb") as fd: - fd.write(resp.read()) - +def make_ui_pin(pin: Pin, attr: str) -> None: pin.uiHash = prefetch_github(OWNER, UI_REPO, pin.uiVersion) pin.write() - pin.uiYarnDepsHash = get_fod_hash(attr) + pin.uiPNPMDepsHash = get_fod_hash(attr) pin.write() @@ -160,4 +152,4 @@ if __name__ == "__main__": pin = Pin(server_version, ui_version, filename=os.path.join(SCRIPT_DIR, "pin.json")) make_server_pin(pin, "lemmy-server") - make_ui_pin(pin, "package.json", "lemmy-ui") + make_ui_pin(pin, "lemmy-ui")