Unverified Commit 8a230e96 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #207917 from SuperSandro2000/uptime-kuma

parents 3836bf02 be34feec
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -4,16 +4,16 @@ let
in
stdenv.mkDerivation (finalAttrs: {
  pname = "uptime-kuma";
  version = "1.18.5";
  version = "1.19.2";

  src = fetchFromGitHub {
    owner = "louislam";
    repo = "uptime-kuma";
    rev = finalAttrs.version;
    sha256 = "sha256-4RLOY8OqhbcnSPa0VpAdMT3E1M0/ev/sSAmbQUQxqbw=";
    sha256 = "yWQ3O3sCW6YKpE8BKgJjrKmLD9NyccaqyzQOXlSCC8I=";
  };

  uiSha256 = "sha256-0KbxagFh4bxNrnekUHx0DGr3urfUUz33zn4EtJIZBps=";
  uiSha256 = "sha256-aaQB1S8PmWU7brncRwEHG5bWEcyxD3amaq7Z6vpP92o=";

  patches = [
    # Fixes the permissions of the database being not set correctly
+97 −9
Original line number Diff line number Diff line
@@ -165,7 +165,11 @@ let
          if(process.argv[2] == "development") {
              replaceDependencies(packageObj.devDependencies);
          }
          else {
              packageObj.devDependencies = {};
          }
          replaceDependencies(packageObj.optionalDependencies);
          replaceDependencies(packageObj.peerDependencies);

          /* Write the fixed package.json file */
          fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
@@ -270,7 +274,7 @@ let

  # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
  reconstructPackageLock = writeTextFile {
    name = "addintegrityfields.js";
    name = "reconstructpackagelock.js";
    text = ''
      var fs = require('fs');
      var path = require('path');
@@ -280,25 +284,43 @@ let
      var lockObj = {
          name: packageObj.name,
          version: packageObj.version,
          lockfileVersion: 1,
          lockfileVersion: 2,
          requires: true,
          packages: {
              "": {
                  name: packageObj.name,
                  version: packageObj.version,
                  license: packageObj.license,
                  bin: packageObj.bin,
                  dependencies: packageObj.dependencies,
                  engines: packageObj.engines,
                  optionalDependencies: packageObj.optionalDependencies
              }
          },
          dependencies: {}
      };

      function augmentPackageJSON(filePath, dependencies) {
      function augmentPackageJSON(filePath, packages, dependencies) {
          var packageJSON = path.join(filePath, "package.json");
          if(fs.existsSync(packageJSON)) {
              var packageObj = JSON.parse(fs.readFileSync(packageJSON));
              packages[filePath] = {
                  version: packageObj.version,
                  integrity: "sha1-000000000000000000000000000=",
                  dependencies: packageObj.dependencies,
                  engines: packageObj.engines,
                  optionalDependencies: packageObj.optionalDependencies
              };
              dependencies[packageObj.name] = {
                  version: packageObj.version,
                  integrity: "sha1-000000000000000000000000000=",
                  dependencies: {}
              };
              processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
              processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
          }
      }

      function processDependencies(dir, dependencies) {
      function processDependencies(dir, packages, dependencies) {
          if(fs.existsSync(dir)) {
              var files = fs.readdirSync(dir);

@@ -314,23 +336,84 @@ let
                          pkgFiles.forEach(function(entry) {
                              if(stats.isDirectory()) {
                                  var pkgFilePath = path.join(filePath, entry);
                                  augmentPackageJSON(pkgFilePath, dependencies);
                                  augmentPackageJSON(pkgFilePath, packages, dependencies);
                              }
                          });
                      } else {
                          augmentPackageJSON(filePath, dependencies);
                          augmentPackageJSON(filePath, packages, dependencies);
                      }
                  }
              });
          }
      }

      processDependencies("node_modules", lockObj.dependencies);
      processDependencies("node_modules", lockObj.packages, lockObj.dependencies);

      fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
    '';
  };

  # Script that links bins defined in package.json to the node_modules bin directory
  # NPM does not do this for top-level packages itself anymore as of v7
  linkBinsScript = writeTextFile {
    name = "linkbins.js";
    text = ''
      var fs = require('fs');
      var path = require('path');

      var packageObj = JSON.parse(fs.readFileSync("package.json"));

      var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);

      if(packageObj.bin !== undefined) {
          fs.mkdirSync(path.join(nodeModules, ".bin"))

          if(typeof packageObj.bin == "object") {
              Object.keys(packageObj.bin).forEach(function(exe) {
                  if(fs.existsSync(packageObj.bin[exe])) {
                      console.log("linking bin '" + exe + "'");
                      fs.symlinkSync(
                          path.join("..", packageObj.name, packageObj.bin[exe]),
                          path.join(nodeModules, ".bin", exe)
                      );
                  }
                  else {
                      console.log("skipping non-existent bin '" + exe + "'");
                  }
              })
          }
          else {
              if(fs.existsSync(packageObj.bin)) {
                  console.log("linking bin '" + packageObj.bin + "'");
                  fs.symlinkSync(
                      path.join("..", packageObj.name, packageObj.bin),
                      path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
                  );
              }
              else {
                  console.log("skipping non-existent bin '" + packageObj.bin + "'");
              }
          }
      }
      else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
          fs.mkdirSync(path.join(nodeModules, ".bin"))

          fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
              if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
                  console.log("linking bin '" + exe + "'");
                  fs.symlinkSync(
                      path.join("..", packageObj.name, packageObj.directories.bin, exe),
                      path.join(nodeModules, ".bin", exe)
                  );
              }
              else {
                  console.log("skipping non-existent bin '" + exe + "'");
              }
          })
      }
    '';
  };

  prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
    let
      forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
@@ -377,13 +460,18 @@ let

        npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild

        runHook postRebuild

        if [ "''${dontNpmInstall-}" != "1" ]
        then
            # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
            rm -f npm-shrinkwrap.json

            npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
            npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
        fi

        # Link executables defined in package.json
        node ${linkBinsScript}
    '';

  # Builds and composes an NPM package including all its dependencies
+643 −328

File changed.

Preview size limit exceeded, changes collapsed.

+0 −29127

File deleted.

Preview size limit exceeded, changes collapsed.

+13 −8
Original line number Diff line number Diff line
{
    "name": "uptime-kuma",
    "version": "1.18.5",
    "version": "1.19.2",
    "license": "MIT",
    "repository": {
        "type": "git",
@@ -38,7 +38,7 @@
        "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
        "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push",
        "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
        "setup": "git checkout 1.18.5 && npm ci --production && npm run download-dist",
        "setup": "git checkout 1.19.2 && npm ci --production && npm run download-dist",
        "download-dist": "node extra/download-dist.js",
        "mark-as-nightly": "node extra/mark-as-nightly.js",
        "reset-password": "node extra/reset-password.js",
@@ -60,13 +60,15 @@
        "start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
        "cy:test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --e2e",
        "cy:run": "npx cypress run --browser chrome --headless --config-file ./config/cypress.config.js",
        "cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\""
        "cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\"",
        "build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go"
    },
    "dependencies": {
        "@louislam/sqlite3": "~15.0.6",
        "@grpc/grpc-js": "~1.7.3",
        "@louislam/sqlite3": "15.1.2",
        "args-parser": "~1.3.0",
        "axios": "~0.27.0",
        "axios-ntlm": "~1.3.0",
        "axios-ntlm": "1.3.0",
        "badge-maker": "~3.3.1",
        "bcryptjs": "~2.4.3",
        "bree": "~7.1.5",
@@ -93,6 +95,7 @@
        "limiter": "~2.1.0",
        "mqtt": "~4.3.7",
        "mssql": "~8.1.4",
        "mysql2": "~2.3.3",
        "node-cloudflared-tunnel": "~1.0.9",
        "node-radius-client": "~1.0.0",
        "nodemailer": "~6.6.5",
@@ -102,9 +105,10 @@
        "pg-connection-string": "~2.5.0",
        "prom-client": "~13.2.0",
        "prometheus-api-metrics": "~3.2.1",
        "protobufjs": "~7.1.1",
        "redbean-node": "0.1.4",
        "socket.io": "~4.4.1",
        "socket.io-client": "~4.4.1",
        "socket.io": "~4.5.3",
        "socket.io-client": "~4.5.3",
        "socks-proxy-agent": "6.1.1",
        "tar": "~6.1.11",
        "tcp-ping": "~0.1.1",
@@ -123,13 +127,14 @@
        "@vitejs/plugin-legacy": "~2.1.0",
        "@vitejs/plugin-vue": "~3.1.0",
        "@vue/compiler-sfc": "~3.2.36",
        "@vuepic/vue-datepicker": "~3.4.8",
        "aedes": "^0.46.3",
        "babel-plugin-rewire": "~1.2.0",
        "bootstrap": "5.1.3",
        "chart.js": "~3.6.2",
        "chartjs-adapter-dayjs": "~1.0.0",
        "concurrently": "^7.1.0",
        "core-js": "~3.18.3",
        "core-js": "~3.26.1",
        "cross-env": "~7.0.3",
        "cypress": "^10.1.0",
        "delay": "^5.0.0",
Loading