about summary refs log tree commit diff
path: root/pkgs/servers
diff options
context:
space:
mode:
authorJanne Heß <janne@hess.ooo>2023-07-24 13:11:11 +0200
committerSandro Jäckel <sandro.jaeckel@gmail.com>2023-07-25 14:43:07 +0200
commitd6cb7c46b2f9f10183b68f9abb48daa23b783302 (patch)
treee66ef78c12c7a52d4c857e4abbcea62300325a8c /pkgs/servers
parent672d4bac9cd3a6dc754f181c2863538a15c4ae00 (diff)
hedgedoc: 1.9.7 -> 1.9.8 and redo package
- Yarnify
- Do a full source build
- Clean up the wrapper things
Diffstat (limited to 'pkgs/servers')
-rw-r--r--pkgs/servers/web-apps/hedgedoc/default.nix107
-rw-r--r--pkgs/servers/web-apps/hedgedoc/package.json213
-rwxr-xr-xpkgs/servers/web-apps/hedgedoc/update.sh31
3 files changed, 66 insertions, 285 deletions
diff --git a/pkgs/servers/web-apps/hedgedoc/default.nix b/pkgs/servers/web-apps/hedgedoc/default.nix
index d2b57a96e702d..a65243cee5345 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 {
-  pname = "hedgedoc";
-  version = "1.9.7";
-
-  # 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=";
+let
+  version = "1.9.8";
+
+  src = fetchFromGitHub {
+    owner = "hedgedoc";
+    repo = "hedgedoc";
+    rev = version;
+    hash = "sha256-gp1TeYHwH7ffaSMifdURb2p+U8u6Xs4JU4b4qACEIDw=";
   };
 
-  nativeBuildInputs = [ which makeWrapper ];
-  extraBuildInputs = [ python3 ];
+  # 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=";
+  };
 
-  packageJSON = ./package.json;
-  yarnFlags = [ "--production" ];
+in stdenv.mkDerivation {
+  pname = "hedgedoc";
+  inherit version src;
 
-  offlineCache = fetchYarnDeps {
-    yarnLock = src + "/yarn.lock";
-    sha256 = "0qkc26ks33vy00jgpv4445wzgxx1mzi70pkm1l8y9amgd9wf9aig";
-  };
+  nativeBuildInputs = [
+    makeBinaryWrapper
+    yarn
+    python3 # needed for sqlite node-gyp
+  ];
 
-  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 <<EOF
-      #!${stdenv.shell}/bin/sh
-      ${nodejs}/bin/node $out/app.js
-    EOF
-    chmod +x $out/bin/hedgedoc
-    wrapProgram $out/bin/hedgedoc \
+    makeWrapper ${nodejs}/bin/node $out/bin/hedgedoc \
+      --add-flags $out/app.js \
+      --set NODE_ENV production \
       --set NODE_PATH "$out/lib/node_modules"
 
-    runHook postDist
+    runHook postInstall
   '';
 
   passthru = {
+    inherit offlineCache;
     tests = { inherit (nixosTests) hedgedoc; };
   };
 
diff --git a/pkgs/servers/web-apps/hedgedoc/package.json b/pkgs/servers/web-apps/hedgedoc/package.json
deleted file mode 100644
index 68c35025eded7..0000000000000
--- a/pkgs/servers/web-apps/hedgedoc/package.json
+++ /dev/null
@@ -1,213 +0,0 @@
-{
-  "name": "HedgeDoc",
-  "version": "1.9.7",
-  "description": "The best platform to write and share markdown.",
-  "main": "app.js",
-  "license": "AGPL-3.0",
-  "scripts": {
-    "test": "npm run-script eslint && npm run-script jsonlint && npm run-script mocha-suite",
-    "eslint": "node_modules/.bin/eslint --max-warnings 0 lib public test app.js",
-    "jsonlint": "find . -not -path './node_modules/*' -type f -name '*.json' -o -type f -name '*.json.example' | while read json; do echo $json ; jq . $json; done",
-    "markdownlint": "remark .",
-    "mocha-suite": "NODE_ENV=test CMD_DB_URL=\"sqlite::memory:\" mocha --exit",
-    "standard": "echo 'standard is no longer being used, use `npm run eslint` instead!' && exit 1",
-    "dev": "webpack --config webpack.dev.js --progress --watch",
-    "heroku-prebuild": "bin/heroku",
-    "build": "webpack --config webpack.prod.js --progress",
-    "start": "node app.js"
-  },
-  "dependencies": {
-    "@passport-next/passport-openid": "^1.0.0",
-    "Idle.Js": "git+https://github.com/shawnmclean/Idle.js",
-    "archiver": "^5.0.2",
-    "async": "^3.0.0",
-    "aws-sdk": "^2.1243.0",
-    "azure-storage": "^2.7.0",
-    "base64url": "^3.0.0",
-    "body-parser": "^1.15.2",
-    "chance": "^1.0.4",
-    "cheerio": "^0.22.0",
-    "clean-webpack-plugin": "^4.0.0",
-    "compression": "^1.6.2",
-    "connect-flash": "^0.1.1",
-    "connect-session-sequelize": "^7.1.2",
-    "cookie": "^0.5.0",
-    "cookie-parser": "^1.4.3",
-    "deep-freeze": "^0.0.1",
-    "diff-match-patch": "git+https://github.com/hackmdio/diff-match-patch.git",
-    "ejs": "^3.0.0",
-    "express": ">=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 5fe1c39d0d696..0000000000000
--- 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