diff --git a/pkgs/servers/web-apps/hedgedoc/default.nix b/pkgs/servers/web-apps/hedgedoc/default.nix index d2b57a96e702..a65243cee534 100644 --- a/pkgs/servers/web-apps/hedgedoc/default.nix +++ b/pkgs/servers/web-apps/hedgedoc/default.nix @@ -1,76 +1,101 @@ { lib , stdenv -, fetchzip -, makeWrapper -, which +, fetchFromGitHub +, gitMinimal +, cacert +, yarn +, makeBinaryWrapper , nodejs -, mkYarnPackage -, fetchYarnDeps , python3 , nixosTests }: -mkYarnPackage rec { +let + version = "1.9.8"; + + src = fetchFromGitHub { + owner = "hedgedoc"; + repo = "hedgedoc"; + rev = version; + hash = "sha256-gp1TeYHwH7ffaSMifdURb2p+U8u6Xs4JU4b4qACEIDw="; + }; + + # we cannot use fetchYarnDeps because that doesn't support yarn 2/berry lockfiles + offlineCache = stdenv.mkDerivation { + name = "hedgedoc-${version}-offline-cache"; + inherit src; + + nativeBuildInputs = [ + cacert # needed for git + gitMinimal # needed to download git dependencies + nodejs # needed for npm to download git dependencies + yarn + ]; + + buildPhase = '' + export HOME=$(mktemp -d) + yarn config set enableTelemetry 0 + yarn config set cacheFolder $out + yarn config set --json supportedArchitectures.os '[ "linux" ]' + yarn config set --json supportedArchitectures.cpu '["arm", "arm64", "ia32", "x64"]' + yarn + ''; + + outputHashMode = "recursive"; + outputHash = "sha256-/jsBFGH/rYSovidmvIf7xpuHpxdW8QFYC08PNi38LH8="; + }; + +in stdenv.mkDerivation { pname = "hedgedoc"; - version = "1.9.7"; + inherit version src; - # we use the upstream compiled js files because yarn2nix cannot handle different versions of dependencies - # in development and production and the web assets muts be compiled with js-yaml 3 while development - # uses js-yaml 4 which breaks the text editor - src = fetchzip { - url = "https://github.com/hedgedoc/hedgedoc/releases/download/${version}/hedgedoc-${version}.tar.gz"; - hash = "sha256-tPkhnnKDS5TICsW66YCOy7xWFj5usLyDMbYMYQ3Euoc="; - }; + nativeBuildInputs = [ + makeBinaryWrapper + yarn + python3 # needed for sqlite node-gyp + ]; - nativeBuildInputs = [ which makeWrapper ]; - extraBuildInputs = [ python3 ]; - - packageJSON = ./package.json; - yarnFlags = [ "--production" ]; - - offlineCache = fetchYarnDeps { - yarnLock = src + "/yarn.lock"; - sha256 = "0qkc26ks33vy00jgpv4445wzgxx1mzi70pkm1l8y9amgd9wf9aig"; - }; - - configurePhase = '' - cp -r "$node_modules" node_modules - chmod -R u+w node_modules - ''; + dontConfigure = true; buildPhase = '' runHook preBuild - pushd node_modules/sqlite3 + export HOME=$(mktemp -d) + yarn config set enableTelemetry 0 + yarn config set cacheFolder ${offlineCache} + + # This will fail but create the sqlite3 files we can patch + yarn --immutable-cache || : + + # Ensure we don't download any node things + sed -i 's:--fallback-to-build:--build-from-source --nodedir=${nodejs}/include/node:g' node_modules/sqlite3/package.json export CPPFLAGS="-I${nodejs}/include/node" - npm run install --build-from-source --nodedir=${nodejs}/include/node - popd + + # Perform the actual install + yarn --immutable-cache + yarn run build patchShebangs bin/* runHook postBuild ''; - dontInstall = true; - - distPhase = '' - runHook preDist + installPhase = '' + runHook preInstall mkdir -p $out cp -R {app.js,bin,lib,locales,node_modules,package.json,public} $out - cat > $out/bin/hedgedoc <=4.14", - "express-session": "^1.14.2", - "file-type": "^18.0.0", - "formidable": "^2.0.0", - "graceful-fs": "^4.1.11", - "helmet": "^4.5.0", - "i18n": "^0.15.0", - "is-svg": "^4.3.1", - "jsdom-nogyp": "^0.8.3", - "lodash": "^4.17.20", - "lutim": "^1.0.2", - "lz-string": "git+https://github.com/hackmdio/lz-string.git", - "mariadb": "^3.0.2", - "markdown-it": "^13.0.0", - "markdown-it-abbr": "^1.0.4", - "markdown-it-container": "^3.0.0", - "markdown-it-deflist": "^2.0.1", - "markdown-it-emoji": "^2.0.0", - "markdown-it-footnote": "^3.0.1", - "markdown-it-imsize": "^2.0.1", - "markdown-it-ins": "^3.0.0", - "markdown-it-mark": "^3.0.0", - "markdown-it-mathjax": "^2.0.0", - "markdown-it-regexp": "^0.4.0", - "markdown-it-sub": "^1.0.0", - "markdown-it-sup": "^1.0.0", - "mattermost": "^3.4.0", - "meta-marked": "git+https://github.com/hedgedoc/meta-marked", - "method-override": "^3.0.0", - "minimist": "^1.2.0", - "minio": "7.0.32", - "moment": "^2.17.1", - "morgan": "^1.7.0", - "mysql2": "^3.0.0", - "node-fetch": "^2.6.1", - "passport": "^0.6.0", - "passport-dropbox-oauth2": "^1.1.0", - "passport-facebook": "^3.0.0", - "passport-github": "^1.1.0", - "passport-gitlab2": "^5.0.0", - "passport-google-oauth20": "^2.0.0", - "passport-ldapauth": "^3.0.0", - "passport-local": "^1.0.0", - "passport-oauth2": "^1.4.0", - "passport-saml": "^3.1.2", - "passport-twitter": "^1.0.4", - "passport.socketio": "^3.7.0", - "pdfobject": "^2.0.201604172", - "pg": "^8.2.1", - "pg-hstore": "^2.3.3", - "prom-client": "^14.0.0", - "prometheus-api-metrics": "^3.2.0", - "randomcolor": "^0.6.0", - "readline-sync": "^1.4.7", - "rimraf": "^4.0.0", - "sanitize-filename": "^1.6.3", - "scrypt-kdf": "^2.0.1", - "sequelize": "^5.21.1", - "shortid": "2.2.16", - "socket.io": "^2.1.1", - "sqlite3": "^5.0.8", - "store": "^2.0.12", - "string": "^3.3.3", - "toobusy-js": "^0.5.1", - "umzug": "^2.3.0", - "uuid": "^9.0.0", - "validator": "^13.0.0", - "winston": "^3.1.0", - "xss": "^1.0.3" - }, - "engines": { - "node": "^14.13.1 || 16.x" - }, - "bugs": "https://github.com/hedgedoc/hedgedoc/issues", - "keywords": [ - "Collaborative", - "Markdown", - "Notes" - ], - "homepage": "https://hedgedoc.org", - "maintainers": [ - { - "name": "Claudius Coenen", - "url": "https://www.claudiuscoenen.de/" - }, - { - "name": "Christoph (Sheogorath) Kern", - "email": "codimd@sheogorath.shivering-isles.com", - "url": "https://shivering-isles.com" - }, - { - "name": "David Mehren", - "email": "hedgedoc@herrmehren.de" - } - ], - "repository": { - "type": "git", - "url": "https://github.com/hedgedoc/hedgedoc.git" - }, - "devDependencies": { - "abcjs": "6.1.9", - "babel-cli": "6.26.0", - "babel-core": "6.26.3", - "babel-loader": "7.1.5", - "babel-plugin-transform-runtime": "6.23.0", - "babel-polyfill": "6.26.0", - "babel-preset-env": "1.7.0", - "babel-runtime": "6.26.0", - "bootstrap": "3.4.1", - "bootstrap-validator": "0.11.9", - "codemirror": "git+https://github.com/hedgedoc/CodeMirror.git#hedgedoc/1.9.7", - "copy-webpack-plugin": "6.4.1", - "css-loader": "5.2.7", - "emojify.js": "1.1.0", - "esbuild-loader": "3.0.1", - "escape-html": "1.0.3", - "eslint": "8.34.0", - "eslint-config-standard": "17.0.0", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-n": "15.6.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "6.1.1", - "eslint-plugin-standard": "4.1.0", - "exports-loader": "1.1.1", - "expose-loader": "1.0.3", - "file-loader": "6.2.0", - "file-saver": "2.0.5", - "flowchart.js": "1.17.1", - "fork-awesome": "1.2.0", - "gist-embed": "2.6.0", - "highlight.js": "10.7.3", - "html-webpack-plugin": "4.5.2", - "imports-loader": "1.2.0", - "ionicons": "2.0.1", - "jquery": "3.6.3", - "jquery-mousewheel": "3.1.13", - "jquery-ui": "1.13.2", - "js-cookie": "3.0.1", - "js-sequence-diagrams": "git+https://github.com/hedgedoc/js-sequence-diagrams.git", - "js-yaml": "3.14.1", - "jsonlint": "1.6.3", - "keymaster": "1.6.2", - "less": "4.1.3", - "less-loader": "7.3.0", - "list.js": "2.3.1", - "mathjax": "2.7.9", - "mermaid": "9.1.7", - "mini-css-extract-plugin": "1.6.2", - "mocha": "10.2.0", - "mock-require": "3.0.3", - "optimize-css-assets-webpack-plugin": "6.0.1", - "prismjs": "1.29.0", - "raphael": "2.3.0", - "remark-cli": "11.0.0", - "remark-preset-lint-markdown-style-guide": "5.1.2", - "reveal.js": "3.9.2", - "select2": "3.5.2-browserify", - "socket.io-client": "2.5.0", - "spin.js": "4.1.1", - "string-loader": "0.0.1", - "turndown": "7.1.1", - "url-loader": "4.1.1", - "velocity-animate": "1.5.2", - "visibilityjs": "2.0.2", - "viz.js": "1.8.2", - "webpack": "4.46.0", - "webpack-cli": "4.10.0", - "webpack-merge": "5.8.0", - "wurl": "2.5.4" - }, - "optionalDependencies": { - "bufferutil": "^4.0.0", - "utf-8-validate": "^6.0.0" - } -} diff --git a/pkgs/servers/web-apps/hedgedoc/update.sh b/pkgs/servers/web-apps/hedgedoc/update.sh deleted file mode 100755 index 5fe1c39d0d69..000000000000 --- a/pkgs/servers/web-apps/hedgedoc/update.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -I nixpkgs=../../../../ -i bash -p nix wget prefetch-yarn-deps jq -set -euo pipefail -cd "$(dirname "$0")" - -if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then - echo "Regenerates packaging data for the hedgedoc packages." - echo "Usage: $0 [git release tag]" - exit 1 -fi - -version="$1" - -if [ -z "$version" ]; then - version="$(wget -O- "https://api.github.com/repos/hedgedoc/hedgedoc/releases?per_page=1" | jq -r '.[0].tag_name')" -fi - -src="https://raw.githubusercontent.com/hedgedoc/hedgedoc/$version" - -wget "$src/package.json" -O package.json -wget "$src/yarn.lock" -O yarn.lock - -src_old_hash=$(nix-prefetch-url --unpack "https://github.com/hedgedoc/hedgedoc/releases/download/$version/hedgedoc-$version.tar.gz") -src_hash=$(nix hash to-sri --type sha256 $src_old_hash) -yarn_hash=$(prefetch-yarn-deps yarn.lock) - -sed -i "s|version = \".*\"|version = \"$version\"|" default.nix -sed -i "s|hash = \".*\"|hash = \"$src_hash\"|" default.nix -sed -i "s|sha256 = \".*\"|sha256 = \"$yarn_hash\"|" default.nix - -rm yarn.lock