mattermost-desktop: build from source
This commit is contained in:
parent
ae2526c5c4
commit
a95cc2b35b
@ -1,59 +1,72 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
fetchFromGitHub,
|
||||
buildNpmPackage,
|
||||
electron,
|
||||
makeWrapper,
|
||||
testers,
|
||||
mattermost-desktop,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
buildNpmPackage rec {
|
||||
pname = "mattermost-desktop";
|
||||
version = "5.10.2";
|
||||
|
||||
srcs = {
|
||||
"x86_64-linux" = {
|
||||
url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-x64.tar.gz";
|
||||
hash = "sha256-MSV5ias643eYKmJlJInCuNA2hnaDRv+3c7x4xxZI7Z4=";
|
||||
};
|
||||
|
||||
"aarch64-linux" = {
|
||||
url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-arm64.tar.gz";
|
||||
hash = "sha256-vuUn7LWs970o1S1CmW3uMiE0Y8XpP0eVtoC2NP13R8w=";
|
||||
};
|
||||
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 \
|
||||
@ -67,21 +80,18 @@ stdenv.mkDerivation {
|
||||
tests.version = testers.testVersion {
|
||||
package = mattermost-desktop;
|
||||
# Invoking with `--version` insists on being able to write to a log file.
|
||||
command = "env HOME=/tmp ${mattermost-desktop.meta.mainProgram} --version";
|
||||
command = "env HOME=/tmp ${meta.mainProgram} --version";
|
||||
};
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Mattermost Desktop client";
|
||||
mainProgram = "mattermost-desktop";
|
||||
homepage = "https://about.mattermost.com/";
|
||||
changelog = "https://github.com/mattermost/desktop/releases/tag/${src.tag}";
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
license = licenses.asl20;
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
license = lib.licenses.asl20;
|
||||
platforms = electron.meta.platforms;
|
||||
maintainers = with lib.maintainers; [
|
||||
joko
|
||||
liff
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user