diff --git a/pkgs/by-name/ma/mattermost-desktop/package.nix b/pkgs/by-name/ma/mattermost-desktop/package.nix index b6f4085a688f..d907d627dda2 100644 --- a/pkgs/by-name/ma/mattermost-desktop/package.nix +++ b/pkgs/by-name/ma/mattermost-desktop/package.nix @@ -1,57 +1,72 @@ { lib, - stdenv, - fetchurl, + fetchFromGitHub, + buildNpmPackage, electron, makeWrapper, + testers, + mattermost-desktop, + nix-update-script, }: -let - +buildNpmPackage rec { pname = "mattermost-desktop"; - version = "5.9.0"; + version = "5.10.2"; - srcs = { - "x86_64-linux" = { - url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-x64.tar.gz"; - hash = "sha256-zLKdfu5p7TyJOw8vJX7i/uu4j0PrUf2/BDmb1kdqqMc="; - }; - - "aarch64-linux" = { - url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-arm64.tar.gz"; - hash = "sha256-JljK7d4KLAn1+NwF+VcedL/7hEsp/9LzLdzROa1fgJA="; - }; + src = fetchFromGitHub { + owner = "mattermost"; + repo = "desktop"; + tag = "v${version}"; + hash = "sha256-LHjVmrsOdk8vfsqvNEWkzpusm6jbz3SOb3bEaIb7rb4="; }; - inherit (stdenv.hostPlatform) system; - -in - -stdenv.mkDerivation { - inherit pname version; - - src = fetchurl (srcs."${system}" or (throw "Unsupported system ${system}")); + npmDepsHash = "sha256-LAbqsMdMmmHGgvg2ilz6neQxMOK3jtCKt8K0M8BWifs="; + npmBuildScript = "build-prod"; + makeCacheWritable = true; nativeBuildInputs = [ makeWrapper ]; + env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; + + postPatch = '' + substituteInPlace webpack.config.base.js \ + --replace-fail \ + "const VERSION = childProcess.execSync('git rev-parse --short HEAD', {cwd: __dirname}).toString();" \ + "const VERSION = process.env.version;" + ''; + + postBuild = '' + # electronDist needs to be writable + cp -r ${electron.dist} electron-dist + chmod -R u+w electron-dist + + npm exec electron-builder -- \ + --config electron-builder.json \ + --dir \ + -c.electronDist=electron-dist \ + -c.electronVersion=${electron.version} + ''; + installPhase = '' runHook preInstall - # Mattermost tarball comes with executable bit set for everything. - # We’ll apply it only to files that need it. - find . -type f -print0 | xargs -0 chmod -x - find . -type f \( -name '*.so.*' -o -name '*.s[oh]' \) -print0 | xargs -0 chmod +x - chmod +x mattermost-desktop chrome-sandbox + mkdir --parents \ + $out/bin \ + $out/share/applications \ + $out/share/icons/hicolor/512x512/apps - mkdir -p $out/bin $out/share/applications $out/share/${pname}/ - cp -r app_icon.png create_desktop_file.sh locales/ resources/* $out/share/${pname}/ + readonly dist=release/linux-unpacked - patchShebangs $out/share/${pname}/create_desktop_file.sh - $out/share/${pname}/create_desktop_file.sh - rm $out/share/${pname}/create_desktop_file.sh - mv Mattermost.desktop $out/share/applications/Mattermost.desktop + cp -a $dist/resources $out/share/${pname} + + patchShebangs $dist/create_desktop_file.sh + $dist/create_desktop_file.sh + mv Mattermost.desktop $out/share/applications/ substituteInPlace $out/share/applications/Mattermost.desktop \ - --replace /share/mattermost-desktop/mattermost-desktop /bin/mattermost-desktop + --replace-fail /build/source/$dist/app_icon.png ${pname} \ + --replace-fail /build/source/$dist/ $out/bin/ + + cp src/assets/linux/app_icon.png $out/share/icons/hicolor/512x512/apps/${pname}.png makeWrapper '${lib.getExe electron}' $out/bin/${pname} \ --set-default ELECTRON_IS_DEV 0 \ @@ -61,16 +76,25 @@ stdenv.mkDerivation { runHook postInstall ''; - meta = with lib; { + passthru = { + tests.version = testers.testVersion { + package = mattermost-desktop; + # Invoking with `--version` insists on being able to write to a log file. + command = "env HOME=/tmp ${meta.mainProgram} --version"; + }; + updateScript = nix-update-script { }; + }; + + meta = { description = "Mattermost Desktop client"; mainProgram = "mattermost-desktop"; homepage = "https://about.mattermost.com/"; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; - license = licenses.asl20; - platforms = [ - "x86_64-linux" - "aarch64-linux" + changelog = "https://github.com/mattermost/desktop/releases/tag/${src.tag}"; + license = lib.licenses.asl20; + platforms = electron.meta.platforms; + maintainers = with lib.maintainers; [ + joko + liff ]; - maintainers = [ maintainers.joko ]; }; }