Unverified Commit a3a85cb2 authored by kirillrdy's avatar kirillrdy Committed by GitHub
Browse files

prometheus: Move assets to npmBuildPackage; 3.8.0 → 3.8.1 (#454900)

parents 488998ed 3ea8d8cb
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1969,7 +1969,7 @@ in
      after = [ "network.target" ];
      serviceConfig = {
        ExecStart =
          "${cfg.package}/bin/prometheus"
          "${lib.getExe cfg.package}"
          + optionalString (length cmdlineArgs != 0) (" \\\n  " + concatStringsSep " \\\n  " cmdlineArgs);
        ExecReload = mkIf cfg.enableReload "+${reload}/bin/reload-prometheus";
        User = "prometheus";
@@ -1980,6 +1980,7 @@ in
        StateDirectory = cfg.stateDir;
        StateDirectoryMode = "0700";
        # Hardening
        CapabilityBoundingSet = [ "" ];
        DeviceAllow = [ "/dev/null rw" ];
        DevicePolicy = "strict";
        LockPersonality = true;
+10 −0
Original line number Diff line number Diff line
--- ./build_ui.sh	2025-10-22 23:32:08.739188520 +0100
+++ ./build_ui.sh	2025-10-22 23:32:23.753242986 +0100
@@ -50,7 +50,6 @@ for i in "$@"; do
   case ${i} in
   --all)
     buildModule
-    buildReactApp
     buildMantineUI
     shift
     ;;
+79 −22
Original line number Diff line number Diff line
{
  stdenv,
  buildPackages,
  lib,
  go,
  buildGoModule,
  buildNpmPackage,
  fetchFromGitHub,
  fetchurl,
  nixosTests,
  enableAWS ? true,
  enableAzure ? true,
@@ -30,33 +29,71 @@
  enableVultr ? true,
  enableXDS ? true,
  enableZookeeper ? true,
  versionCheckHook,
}:

buildGoModule (finalAttrs: {
  pname = "prometheus";
  version = "3.8.0";
let
  source = import ./source.nix;

  outputs = [
    "out"
    "doc"
    "cli"
  ];
  inherit (source) version vendorHash;

  pname = "prometheus";

  src = fetchFromGitHub {
    owner = "prometheus";
    repo = "prometheus";
    tag = "v${finalAttrs.version}";
    hash = "sha256-hRuZxwPPDLxQvy5MPKEyfmanNabcSjLRO+XbNKugPtk=";
    tag = "v${version}";
    hash = source.hash;
  };

  depsBuildBuild = [ buildPackages.stdenv.cc ];
  assets = buildNpmPackage {
    pname = "${pname}-assets";
    inherit version;

    src = "${src}/web/ui";

    npmDepsHash = source.npmDepsHash;

    patches = [
      # Disable old React app as it depends on deprecated create-react-apps
      # script
      ./disable-react-app.diff
    ];

    env.CI = true;

    doCheck = true;
    checkPhase = ''
      runHook preCheck

      npm test

      runHook postCheck
    '';

  vendorHash = "sha256-5wDaG01vcTtGzrS/S33U5XWXoSWM+N9z3dzXZlILxD8=";
    postInstall = ''
      mkdir -p $out/static
      cp -r $out/lib/node_modules/prometheus-io/static/* $out/static
      find $out/static -type f -exec gzip -f9 {} \;

  webUiStatic = fetchurl {
    url = "https://github.com/prometheus/prometheus/releases/download/v${finalAttrs.version}/prometheus-web-ui-${finalAttrs.version}.tar.gz";
    hash = "sha256-oOEvNZFlYtTNBsn+B2pAWXi0A2oJ6IAo7V8bOLtjfCM=";
      # Remove node_modules
      rm -rf $out/lib
    '';
  };
in
buildGoModule (finalAttrs: {
  inherit
    pname
    version
    vendorHash
    src
    ;

  outputs = [
    "out"
    "doc"
    "cli"
  ];

  excludedPackages = [
    "documentation/prometheus-mixin"
@@ -65,7 +102,7 @@ buildGoModule (finalAttrs: {
  ];

  postPatch = ''
    tar -C web/ui -xzf ${finalAttrs.webUiStatic}
    cp -r ${assets}/static web/ui/static/

    patchShebangs scripts

@@ -99,9 +136,18 @@ buildGoModule (finalAttrs: {
  '';

  preBuild = ''
    if [[ -d vendor ]]; then
      GOARCH= CC="$CC_FOR_BUILD" LD="$LD_FOR_BUILD" make -o assets assets-compress plugins
    fi
    if [[ -d vendor ]]; then GOARCH= make -o assets plugins; fi

    # Recreate the `make assets-compress` target here - workaround permissions
    # errors
    cp web/ui/embed.go.tmpl web/ui/embed.go

    find web/ui/static -type f -name '*.gz' -print0 | sort -z | xargs -0 echo //go:embed >> web/ui/embed.go

    echo 'var EmbedFS embed.FS' >> web/ui/embed.go

    # EmbedFS requires relative paths
    substituteInPlace web/ui/embed.go --replace-fail "web/ui/" ""
  '';

  tags = [ "builtinassets" ];
@@ -141,15 +187,26 @@ buildGoModule (finalAttrs: {
    "-skip=TestEvaluations/testdata/aggregators.test"
  ];

  passthru.tests = { inherit (nixosTests) prometheus; };
  nativeInstallCheckInputs = [
    versionCheckHook
  ];
  versionCheckProgramArg = "--version";
  doInstallCheck = true;

  passthru = {
    tests = { inherit (nixosTests) prometheus; };
    updateScript = ./update.sh;
  };

  meta = {
    description = "Service monitoring system and time series database";
    homepage = "https://prometheus.io";
    license = lib.licenses.asl20;
    changelog = "https://github.com/prometheus/prometheus/blob/v${version}/CHANGELOG.md";
    maintainers = with lib.maintainers; [
      fpletz
      Frostman
      jpds
    ];
    mainProgram = "prometheus";
  };
+6 −0
Original line number Diff line number Diff line
{
  version = "3.8.1";
  hash = "sha256-mb1aMWpIELyZaqjYX1teYdtAK/+W9jzdPwzgbT7AVj4=";
  npmDepsHash = "sha256-wmxvlQWQO2gP2apupMJssqAPr1ntWWIazduQU3AuodU=";
  vendorHash = "sha256-35pVMl1Hu970BQE6jMzT1xaz/3FaIFWUtel0cl/uBdw=";
}
+77 −0
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p nix coreutils curl jq nix-prefetch-git prefetch-npm-deps

set -euo pipefail

OWNER=prometheus
REPO=prometheus

# Current version.
LATEST_NIXPKGS_VERSION=$(nix eval --raw .#prometheus.version 2>/dev/null)
UPDATE_NIX_OLD_VERSION=${UPDATE_NIX_OLD_VERSION:-$LATEST_NIXPKGS_VERSION}

TARGET_TAG="$(curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/$OWNER/$REPO/releases/latest" | jq -r '.tag_name')"
TARGET_VERSION="$(echo "$TARGET_TAG" | sed -e 's/^v//')"

if [[ "$UPDATE_NIX_OLD_VERSION" == "$TARGET_VERSION" ]]; then
    # prometheus is up-to-date
    if [[ -n "$UPDATE_NIX_ATTR_PATH" ]]; then
        echo "[{}]";
    fi

    exit 0
fi

extractVendorHash() {
    original="${1?original hash missing}"
    result="$(nix-build -A prometheus.goModules 2>&1 | tail -n3 | grep 'got:' | cut -d: -f2- | xargs echo || true)"
    [ -z "$result" ] && { echo "$original"; } || { echo "$result"; }
}

TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT

NIXPKGS_PROMETHEUS_PATH=$(cd $(dirname ${BASH_SOURCE[0]}); pwd -P)/
SOURCE_NIX="$NIXPKGS_PROMETHEUS_PATH/source.nix"

PREFETCH_JSON=$TMP/prefetch.json
nix-prefetch-git --rev "$TARGET_TAG" --url "https://github.com/$OWNER/$REPO" > "$PREFETCH_JSON"
PREFETCH_HASH="$(jq '.hash' -r < "$PREFETCH_JSON")"
PREFETCH_PATH="$(jq '.path' -r < "$PREFETCH_JSON")"
NPM_DEPS_HASH="$(prefetch-npm-deps "$PREFETCH_PATH/web/ui/package-lock.json")"

FAKE_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";

cat > "$SOURCE_NIX" <<-EOF
{
  version = "$TARGET_VERSION";
  hash = "$PREFETCH_HASH";
  npmDepsHash = "$NPM_DEPS_HASH";
  vendorHash = "$FAKE_HASH";
}
EOF

GO_HASH="$(nix-instantiate --eval -A prometheus.vendorHash | tr -d '"')"
VENDOR_HASH=$(extractVendorHash "$GO_HASH")

cat > "$SOURCE_NIX" <<-EOF
{
  version = "$TARGET_VERSION";
  hash = "$PREFETCH_HASH";
  npmDepsHash = "$NPM_DEPS_HASH";
  vendorHash = "$VENDOR_HASH";
}
EOF

if [[ -z "$UPDATE_NIX_ATTR_PATH" ]]; then
    exit 0
fi

cat <<-EOF
[{
  "attrPath": "$UPDATE_NIX_ATTR_PATH",
  "oldVersion": "$UPDATE_NIX_OLD_VERSION",
  "newVersion": "$TARGET_VERSION",
  "files": ["$SOURCE_NIX"]
}]
EOF