From b18abe34031486381206e71b27209480d23de131 Mon Sep 17 00:00:00 2001 From: Yureka Date: Thu, 11 Aug 2022 19:32:19 +0200 Subject: [PATCH] element-{web,desktop}: use stdenv.mkDerivation --- .../element/element-desktop-package.json | 141 ------------ .../element/element-desktop.nix | 43 ++-- .../element/element-web-package.json | 206 ------------------ .../element/element-web.nix | 22 +- .../instant-messengers/element/update.sh | 2 - 5 files changed, 40 insertions(+), 374 deletions(-) delete mode 100644 pkgs/applications/networking/instant-messengers/element/element-desktop-package.json delete mode 100644 pkgs/applications/networking/instant-messengers/element/element-web-package.json diff --git a/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json b/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json deleted file mode 100644 index 004db42ebab2..000000000000 --- a/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "name": "element-desktop", - "productName": "Element", - "main": "lib/electron-main.js", - "version": "1.11.0", - "description": "A feature-rich client for Matrix.org", - "author": "Element", - "repository": { - "type": "git", - "url": "https://github.com/vector-im/element-desktop" - }, - "license": "Apache-2.0", - "files": [], - "scripts": { - "i18n": "matrix-gen-i18n", - "prunei18n": "matrix-prune-i18n", - "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", - "mkdirs": "mkdirp packages deploys", - "fetch": "yarn run mkdirs && node scripts/fetch-package.js", - "asar-webapp": "asar p webapp webapp.asar", - "start": "yarn run build:ts && yarn run build:res && electron .", - "lint": "yarn lint:types && yarn lint:js", - "lint:js": "eslint --max-warnings 0 src scripts hak", - "lint:js-fix": "eslint --fix src scripts hak", - "lint:types": "tsc --noEmit && tsc -p scripts/hak/tsconfig.json --noEmit && tsc -p hak/tsconfig.json --noEmit", - "build:native": "yarn run hak", - "build:native:universal": "yarn run hak --target x86_64-apple-darwin fetchandbuild && yarn run hak --target aarch64-apple-darwin fetchandbuild && yarn run hak --target x86_64-apple-darwin --target aarch64-apple-darwin copyandlink", - "build:32": "yarn run build:ts && yarn run build:res && electron-builder --ia32", - "build:64": "yarn run build:ts && yarn run build:res && electron-builder --x64", - "build:universal": "yarn run build:ts && yarn run build:res && electron-builder --universal", - "build": "yarn run build:ts && yarn run build:res && electron-builder", - "build:ts": "tsc", - "build:res": "node scripts/copy-res.js", - "docker:setup": "docker build -t element-desktop-dockerbuild dockerbuild", - "docker:build:native": "scripts/in-docker.sh yarn run hak", - "docker:build": "scripts/in-docker.sh yarn run build", - "docker:install": "scripts/in-docker.sh yarn install", - "debrepo": "scripts/mkrepo.sh", - "clean": "rimraf webapp.asar dist packages deploys lib", - "hak": "ts-node scripts/hak/index.ts" - }, - "dependencies": { - "auto-launch": "^5.0.5", - "counterpart": "^0.18.6", - "electron-store": "^6.0.1", - "electron-window-state": "^5.0.3", - "minimist": "^1.2.6", - "png-to-ico": "^2.1.1", - "request": "^2.88.2" - }, - "devDependencies": { - "@types/auto-launch": "^5.0.1", - "@types/counterpart": "^0.18.1", - "@types/minimist": "^1.2.1", - "@types/mkdirp": "^1.0.2", - "@types/pacote": "^11.1.1", - "@types/rimraf": "^3.0.2", - "@typescript-eslint/eslint-plugin": "^5.6.0", - "@typescript-eslint/parser": "^5.6.0", - "allchange": "^1.0.6", - "app-builder-lib": "^22.14.10", - "asar": "^2.0.1", - "chokidar": "^3.5.2", - "detect-libc": "^1.0.3", - "electron": "^19", - "electron-builder": "22.11.4", - "electron-builder-squirrel-windows": "22.11.4", - "electron-devtools-installer": "^3.1.1", - "electron-notarize": "^1.0.0", - "eslint": "7.18.0", - "eslint-config-google": "^0.14.0", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-matrix-org": "^0.4.0", - "find-npm-prefix": "^1.0.2", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "matrix-web-i18n": "^1.3.0", - "mkdirp": "^1.0.3", - "needle": "^2.5.0", - "node-pre-gyp": "^0.15.0", - "pacote": "^11.3.5", - "rimraf": "^3.0.2", - "tar": "^6.1.2", - "ts-node": "^10.4.0", - "typescript": "4.5.5" - }, - "hakDependencies": { - "matrix-seshat": "^2.3.3", - "keytar": "^7.9.0" - }, - "build": { - "appId": "im.riot.app", - "asarUnpack": "**/*.node", - "files": [ - "package.json", - { - "from": ".hak/hakModules", - "to": "node_modules" - }, - "lib/**" - ], - "extraResources": [ - { - "from": "res/img", - "to": "img" - }, - "webapp.asar" - ], - "linux": { - "target": "deb", - "category": "Network;InstantMessaging;Chat", - "maintainer": "support@element.io", - "desktop": { - "StartupWMClass": "element" - } - }, - "mac": { - "category": "public.app-category.social-networking", - "darkModeSupport": true - }, - "win": { - "target": { - "target": "squirrel" - }, - "sign": "scripts/electron_winSign" - }, - "directories": { - "output": "dist" - }, - "afterPack": "scripts/electron_afterPack", - "afterSign": "scripts/electron_afterSign", - "protocols": [ - { - "name": "element", - "schemes": [ - "element" - ] - } - ] - } -} diff --git a/pkgs/applications/networking/instant-messengers/element/element-desktop.nix b/pkgs/applications/networking/instant-messengers/element/element-desktop.nix index 5b7c23f7c7ac..261e9e7986e7 100644 --- a/pkgs/applications/networking/instant-messengers/element/element-desktop.nix +++ b/pkgs/applications/networking/instant-messengers/element/element-desktop.nix @@ -3,7 +3,9 @@ , fetchFromGitHub , makeWrapper , makeDesktopItem -, mkYarnPackage +, fixup_yarn_lock +, yarn +, nodejs , fetchYarnDeps , electron , element-web @@ -22,7 +24,7 @@ let keytar = callPackage ./keytar { inherit Security AppKit; }; seshat = callPackage ./seshat { inherit CoreServices; }; in -mkYarnPackage rec { +stdenv.mkDerivation rec { pname = "element-desktop"; inherit (pinData) version; name = "${pname}-${version}"; @@ -33,27 +35,39 @@ mkYarnPackage rec { sha256 = pinData.desktopSrcHash; }; - packageJSON = ./element-desktop-package.json; offlineCache = fetchYarnDeps { yarnLock = src + "/yarn.lock"; sha256 = pinData.desktopYarnHash; }; - nativeBuildInputs = [ makeWrapper ] ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ]; + nativeBuildInputs = [ yarn fixup_yarn_lock nodejs makeWrapper ] + ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ]; inherit seshat; + configurePhase = '' + runHook preConfigure + + export HOME=$(mktemp -d) + yarn config --offline set yarn-offline-mirror $offlineCache + fixup_yarn_lock yarn.lock + yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive + patchShebangs node_modules/ + + runHook postConfigure + ''; + buildPhase = '' runHook preBuild - export HOME=$(mktemp -d) - pushd deps/element-desktop/ - yarn run build:ts - yarn run i18n - yarn run build:res - popd + + yarn --offline run build:ts + yarn --offline run i18n + yarn --offline run build:res + rm -rf node_modules/matrix-seshat node_modules/keytar ${lib.optionalString useKeytar "ln -s ${keytar} node_modules/keytar"} ln -s $seshat node_modules/matrix-seshat + runHook postBuild ''; @@ -63,9 +77,9 @@ mkYarnPackage rec { # resources mkdir -p "$out/share/element" ln -s '${element-web}' "$out/share/element/webapp" - cp -r './deps/element-desktop' "$out/share/element/electron" - cp -r './deps/element-desktop/res/img' "$out/share/element" - rm "$out/share/element/electron/node_modules" + cp -r '.' "$out/share/element/electron" + cp -r './res/img' "$out/share/element" + rm -rf "$out/share/element/electron/node_modules" cp -r './node_modules' "$out/share/element/electron" cp $out/share/element/electron/lib/i18n/strings/en_EN.json $out/share/element/electron/lib/i18n/strings/en-us.json ln -s $out/share/element/electron/lib/i18n/strings/en{-us,}.json @@ -90,9 +104,6 @@ mkYarnPackage rec { runHook postInstall ''; - # Do not attempt generating a tarball for element-desktop again. - doDist = false; - # The desktop item properties should be kept in sync with data from upstream: # https://github.com/vector-im/element-desktop/blob/develop/package.json desktopItem = makeDesktopItem { diff --git a/pkgs/applications/networking/instant-messengers/element/element-web-package.json b/pkgs/applications/networking/instant-messengers/element/element-web-package.json deleted file mode 100644 index 323fe41473dc..000000000000 --- a/pkgs/applications/networking/instant-messengers/element/element-web-package.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "name": "element-web", - "version": "1.11.0", - "description": "A feature-rich client for Matrix.org", - "author": "New Vector Ltd.", - "repository": { - "type": "git", - "url": "https://github.com/vector-im/element-web" - }, - "license": "Apache-2.0", - "files": [ - "lib", - "res", - "src", - "webpack.config.js", - "scripts", - "docs", - "release.sh", - "deploy", - "CHANGELOG.md", - "CONTRIBUTING.rst", - "LICENSE", - "README.md", - "AUTHORS.rst", - "package.json", - "contribute.json" - ], - "style": "bundle.css", - "scripts": { - "i18n": "matrix-gen-i18n", - "prunei18n": "matrix-prune-i18n", - "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", - "clean": "rimraf lib webapp", - "build": "yarn clean && yarn build:genfiles && yarn build:bundle", - "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats", - "build:jitsi": "node scripts/build-jitsi.js", - "build:res": "node scripts/copy-res.js", - "build:genfiles": "yarn build:res && yarn build:jitsi", - "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", - "build:bundle": "webpack --progress --bail --mode production", - "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", - "dist": "scripts/package.sh", - "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"", - "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"", - "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", - "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot", - "lint": "yarn lint:types && yarn lint:js && yarn lint:style", - "lint:js": "eslint --max-warnings 0 src", - "lint:js-fix": "eslint --fix src", - "lint:types": "tsc --noEmit --jsx react", - "lint:style": "stylelint \"res/css/**/*.scss\"", - "test": "jest", - "coverage": "yarn test --coverage" - }, - "dependencies": { - "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz", - "browser-request": "^0.3.3", - "gfm.css": "^1.1.2", - "jsrsasign": "^10.5.25", - "katex": "^0.12.0", - "matrix-js-sdk": "19.0.0", - "matrix-react-sdk": "3.48.0", - "matrix-widget-api": "^0.1.0-beta.18", - "prop-types": "^15.7.2", - "react": "17.0.2", - "react-dom": "17.0.2", - "sanitize-html": "^2.3.2", - "ua-parser-js": "^0.7.24" - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/eslint-parser": "^7.12.10", - "@babel/eslint-plugin": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.10", - "@babel/runtime": "^7.12.5", - "@principalstudio/html-webpack-inject-preload": "^1.2.7", - "@sentry/webpack-plugin": "^1.18.1", - "@svgr/webpack": "^5.5.0", - "@types/flux": "^3.1.9", - "@types/jest": "^27.0.2", - "@types/modernizr": "^3.5.3", - "@types/node": "^14.14.22", - "@types/react": "17.0.14", - "@types/react-dom": "17.0.9", - "@types/sanitize-html": "^2.3.1", - "@types/ua-parser-js": "^0.7.36", - "@typescript-eslint/eslint-plugin": "^5.6.0", - "@typescript-eslint/parser": "^5.6.0", - "allchange": "^1.0.6", - "autoprefixer": "^9.8.6", - "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", - "chokidar": "^3.5.1", - "concurrently": "^5.3.0", - "cpx": "^1.5.0", - "css-loader": "^3.6.0", - "dotenv": "^10.0.0", - "eslint": "8.9.0", - "eslint-config-google": "^0.14.0", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-matrix-org": "^0.4.0", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0", - "extract-text-webpack-plugin": "^4.0.0-beta.0", - "fake-indexeddb": "^3.1.2", - "file-loader": "^5.1.0", - "fs-extra": "^0.30.0", - "html-webpack-plugin": "^4.5.2", - "jest": "^26.6.3", - "jest-environment-jsdom-sixteen": "^1.0.3", - "jest-raw-loader": "^1.0.1", - "jest-sonar-reporter": "^2.0.0", - "json-loader": "^0.5.7", - "loader-utils": "^1.4.0", - "matrix-mock-request": "^2.0.0", - "matrix-react-test-utils": "^0.2.3", - "matrix-web-i18n": "^1.3.0", - "mini-css-extract-plugin": "^0.12.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "modernizr": "^3.12.0", - "node-fetch": "^2.6.7", - "optimize-css-assets-webpack-plugin": "^5.0.4", - "postcss-easings": "^2.0.0", - "postcss-hexrgba": "^2.0.1", - "postcss-import": "^12.0.1", - "postcss-loader": "^3.0.0", - "postcss-mixins": "^6.2.3", - "postcss-nested": "^4.2.3", - "postcss-preset-env": "^6.7.0", - "postcss-scss": "^2.1.1", - "postcss-simple-vars": "^5.0.2", - "postcss-strip-inline-comments": "^0.1.5", - "raw-loader": "^4.0.2", - "rimraf": "^3.0.2", - "shell-escape": "^0.2.0", - "simple-proxy-agent": "^1.1.0", - "string-replace-loader": "2", - "style-loader": "2", - "stylelint": "^13.9.0", - "stylelint-config-standard": "^20.0.0", - "stylelint-scss": "^3.18.0", - "terser-webpack-plugin": "^2.3.8", - "typescript": "^4.5.3", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.2", - "worker-loader": "^2.0.0", - "worklet-loader": "^2.0.0" - }, - "resolutions": { - "@types/react": "17.0.14" - }, - "jest": { - "testEnvironment": "jest-environment-jsdom-sixteen", - "testMatch": [ - "/test/**/*-test.[tj]s?(x)" - ], - "setupFilesAfterEnv": [ - "/node_modules/matrix-react-sdk/test/setupTests.js" - ], - "moduleNameMapper": { - "\\.(css|scss)$": "/__mocks__/cssMock.js", - "\\.(gif|png|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", - "\\.svg$": "/node_modules/matrix-react-sdk/__mocks__/svg.js", - "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", - "^browser-request$": "/node_modules/matrix-react-sdk/__mocks__/browser-request.js", - "^react$": "/node_modules/react", - "^react-dom$": "/node_modules/react-dom", - "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", - "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src", - "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "context-filter-polyfill": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "FontManager.ts": "/node_modules/matrix-react-sdk/__mocks__/FontManager.js", - "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js", - "^!!raw-loader!.*": "jest-raw-loader", - "RecorderWorklet": "/node_modules/matrix-react-sdk/__mocks__/empty.js" - }, - "transformIgnorePatterns": [ - "/node_modules/(?!matrix-js-sdk).+$", - "/node_modules/(?!matrix-react-sdk).+$" - ], - "coverageReporters": [ - "text-summary", - "lcov" - ], - "testResultsProcessor": "jest-sonar-reporter" - }, - "jestSonar": { - "reportPath": "coverage", - "sonar56x": true - } -} diff --git a/pkgs/applications/networking/instant-messengers/element/element-web.nix b/pkgs/applications/networking/instant-messengers/element/element-web.nix index 3b4394604598..7ba82ca28f60 100644 --- a/pkgs/applications/networking/instant-messengers/element/element-web.nix +++ b/pkgs/applications/networking/instant-messengers/element/element-web.nix @@ -1,5 +1,5 @@ { lib -, mkYarnPackage +, stdenv , runCommand , fetchFromGitHub , fetchYarnDeps @@ -7,6 +7,7 @@ , jq , yarn , fixup_yarn_lock +, nodejs , jitsi-meet , conf ? { } }: @@ -19,8 +20,7 @@ let }; configOverrides = writeText "element-config-overrides.json" (builtins.toJSON (noPhoningHome // conf)); -in -mkYarnPackage rec { +in stdenv.mkDerivation rec { pname = "element-web"; inherit (pinData) version; @@ -31,7 +31,6 @@ mkYarnPackage rec { sha256 = pinData.webSrcHash; }; - packageJSON = ./element-web-package.json; # Remove the matrix-analytics-events dependency from the matrix-react-sdk # dependencies list. It doesn't seem to be necessary since we already are # installing it individually, and it causes issues with the offline mode. @@ -43,11 +42,19 @@ mkYarnPackage rec { sha256 = pinData.webYarnHash; }; - nativeBuildInputs = [ jq ]; + nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ]; configurePhase = '' runHook preConfigure - ln -s $node_modules node_modules + + export HOME=$PWD/tmp + mkdir -p $HOME + + fixup_yarn_lock yarn.lock + yarn config --offline set yarn-offline-mirror $offlineCache + yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive + patchShebangs node_modules + runHook postConfigure ''; @@ -72,9 +79,6 @@ mkYarnPackage rec { runHook postInstall ''; - # Do not attempt generating a tarball for element-web again. - doDist = false; - meta = { description = "A glossy Matrix collaboration client for the web"; homepage = "https://element.io/"; diff --git a/pkgs/applications/networking/instant-messengers/element/update.sh b/pkgs/applications/networking/instant-messengers/element/update.sh index a9c55a926ce7..edeabe07afa6 100755 --- a/pkgs/applications/networking/instant-messengers/element/update.sh +++ b/pkgs/applications/networking/instant-messengers/element/update.sh @@ -21,7 +21,6 @@ version="${version#v}" # Element Web web_src="https://raw.githubusercontent.com/vector-im/element-web/v$version" web_src_hash=$(nix-prefetch-github vector-im element-web --rev v${version} | jq -r .sha256) -wget "$web_src/package.json" -O element-web-package.json web_tmpdir=$(mktemp -d) trap 'rm -rf "$web_tmpdir"' EXIT @@ -35,7 +34,6 @@ popd # Element Desktop desktop_src="https://raw.githubusercontent.com/vector-im/element-desktop/v$version" desktop_src_hash=$(nix-prefetch-github vector-im element-desktop --rev v${version} | jq -r .sha256) -wget "$desktop_src/package.json" -O element-desktop-package.json desktop_tmpdir=$(mktemp -d) trap 'rm -rf "$desktop_tmpdir"' EXIT