Unverified Commit bbb47458 authored by Marcin Serwin's avatar Marcin Serwin
Browse files

signal-desktop-source: add update script

parent ff8258e8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@
  fetchFromGitHub,
  python3,
  nodejs,

}:
let
  # boring-sys expects the static libraries in build/ instead of lib/
+47 −27
Original line number Diff line number Diff line
@@ -7,11 +7,9 @@
  python3,
  makeWrapper,
  callPackage,
  libpulseaudio,
  fetchFromGitHub,
  runCommand,
  fetchzip,
  autoPatchelfHook,
  jq,
  makeDesktopItem,
  copyDesktopItems,
  replaceVars,
@@ -32,26 +30,7 @@ let
  sqlcipher-signal-extension = callPackage ./sqlcipher-signal-extension.nix { };
  libsignal-node = callPackage ./libsignal-node.nix { inherit nodejs; };

  ringrtc = stdenv.mkDerivation (finalAttrs: {
    pname = "ringrtc-bin";
    version = "2.50.2";
    src = fetchzip {
      url = "https://build-artifacts.signal.org/libraries/ringrtc-desktop-build-v${finalAttrs.version}.tar.gz";
      hash = "sha256-hNlz+gSulyJ//FdbPvY/5OHbtJ4rEUdi9/SHJDX6gZE=";
    };

    installPhase = ''
      cp -r . $out
    '';

    nativeBuildInputs = [ autoPatchelfHook ];
    buildInputs = [ libpulseaudio ];
    meta = {
      homepage = "https://github.com/signalapp/ringrtc";
      license = lib.licenses.agpl3Only;
      sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
    };
  });
  ringrtc-bin = callPackage ./ringrtc-bin.nix { };

  # Noto Color Emoji PNG files for emoji replacement; see below.
  noto-fonts-color-emoji-png = noto-fonts-color-emoji.overrideAttrs (prevAttrs: {
@@ -83,7 +62,7 @@ let
    hash = "sha256-/jtuGsBOFsSgJZNpRilWZ0daI0iYVziZBaF/vLvQ7NU=";
  };

  stickerCreator = stdenv.mkDerivation (finalAttrs: {
  sticker-creator = stdenv.mkDerivation (finalAttrs: {
    pname = "signal-desktop-sticker-creator";
    inherit version;
    src = src + "/sticker-creator";
@@ -121,6 +100,7 @@ stdenv.mkDerivation (finalAttrs: {
    makeWrapper
    copyDesktopItems
    python3
    jq
  ];
  buildInputs = (lib.optional (!withAppleEmojis) noto-fonts-color-emoji-png);

@@ -151,9 +131,43 @@ stdenv.mkDerivation (finalAttrs: {
  };

  preBuild = ''
    if [ "`jq -r '.engines.node' < package.json | head -c 2`" != `head -c 2 <<< "${nodejs.version}"` ]
    then
      die "nodejs version mismatch"
    fi

    if [ "`jq -r '.devDependencies.electron' < package.json | head -c 2`" != `head -c 2 <<< "${electron.version}"` ]
    then
      die "electron version mismatch"
    fi

    if [ "`jq -r '.dependencies."@signalapp/libsignal-client"' < package.json`" != "${libsignal-node.version}" ]
    then
      die "libsignal-client version mismatch"
    fi

    if [ "`jq -r '.dependencies."@signalapp/ringrtc"' < package.json`" != "${ringrtc-bin.version}" ]
    then
      die "ringrtc version mismatch"
    fi

    sqlcipherVersion=${sqlcipher-signal-extension.passthru.sqlcipher-amalgamation.version}
    if ! grep "const SQLCIPHER_VERSION = '$sqlcipherVersion';" \
      node_modules/@signalapp/better-sqlite3/deps/download.js
    then
      die "sqlcipher version mismatch"
    fi

    extensionVersion=${sqlcipher-signal-extension.passthru.signal-sqlcipher-extension.version}
    if ! grep "const EXTENSION_VERSION = '$extensionVersion-asm2';" \
      node_modules/@signalapp/better-sqlite3/deps/download.js
    then
      die "signal-sqlcipher-extension version mismatch"
    fi

    cp ${sqlcipher-signal-extension}/share/sqlite3.gyp node_modules/@signalapp/better-sqlite3/deps/sqlite3.gyp

    cp -r ${ringrtc} node_modules/@signalapp/ringrtc/build
    cp -r ${ringrtc-bin} node_modules/@signalapp/ringrtc/build

    rm -fr node_modules/@signalapp/libsignal-client/prebuilds
    cp -r ${libsignal-node}/lib node_modules/@signalapp/libsignal-client/prebuilds
@@ -165,7 +179,7 @@ stdenv.mkDerivation (finalAttrs: {
    export npm_config_nodedir=${electron-headers}
    cp -r ${electron.dist} electron-dist
    chmod -R u+w electron-dist
    cp -r ${stickerCreator} sticker-creator/dist
    cp -r ${sticker-creator} sticker-creator/dist

    pnpm run generate
    pnpm exec electron-builder \
@@ -219,8 +233,14 @@ stdenv.mkDerivation (finalAttrs: {
  ];

  passthru = {
    inherit sqlcipher-signal-extension libsignal-node;
    inherit
      sqlcipher-signal-extension
      libsignal-node
      ringrtc-bin
      sticker-creator
      ;
    tests.application-launch = nixosTests.signal-desktop;
    updateScript.command = [ ./update.sh ];
  };

  meta = {
+27 −0
Original line number Diff line number Diff line
{
  stdenv,
  lib,
  fetchzip,
  autoPatchelfHook,
  libpulseaudio,
}:
stdenv.mkDerivation (finalAttrs: {
  pname = "ringrtc-bin";
  version = "2.50.2";
  src = fetchzip {
    url = "https://build-artifacts.signal.org/libraries/ringrtc-desktop-build-v${finalAttrs.version}.tar.gz";
    hash = "sha256-hNlz+gSulyJ//FdbPvY/5OHbtJ4rEUdi9/SHJDX6gZE=";
  };

  installPhase = ''
    cp -r . $out
  '';

  nativeBuildInputs = [ autoPatchelfHook ];
  buildInputs = [ libpulseaudio ];
  meta = {
    homepage = "https://github.com/signalapp/ringrtc";
    license = lib.licenses.agpl3Only;
    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
  };
})
+6 −2
Original line number Diff line number Diff line
@@ -34,9 +34,10 @@ let
  });

  sqlcipher-amalgamation = stdenv.mkDerivation {
    pname = "sqlcipher-with-signal-extension";
    pname = "sqlcipher-amalgamation";
    version = "${sqlcipher.version}-signal-patch2";

    inherit (sqlcipher) version src meta;
    inherit (sqlcipher) src meta;

    patches = [
      (fetchpatch {
@@ -89,6 +90,9 @@ let
in
buildEnv {
  name = "sqlcipher-signal";
  passthru = {
    inherit sqlcipher-amalgamation signal-sqlcipher-extension;
  };

  paths = [
    sqlcipher-amalgamation
+47 −0
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash nix-update common-updater-scripts curl coreutils jq

set -ex

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"

curl_github() {
  curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} "$@"
}

releaseInfo="`curl_github \
  "https://api.github.com/repos/signalapp/Signal-Desktop/releases/latest"`"

releaseTag="`jq -r ".tag_name" <<< $releaseInfo`"
releaseDate="`jq -r ".created_at" <<< $releaseInfo`"
releaseEpoch=`date -d $releaseDate +%s`

packageJson="`curl_github "https://raw.githubusercontent.com/signalapp/Signal-Desktop/refs/tags/$releaseTag/package.json"`"

latestVersion="`jq -r '.version' <<< $packageJson`"
nodeVersion="`jq -r '.engines.node' <<< $packageJson | head -c2`"
electronVersion="`jq -r '.devDependencies.electron' <<< $packageJson | head -c2`"
libsignalClientVersion=`jq -r '.dependencies."@signalapp/libsignal-client"' <<< $packageJson`
ringrtcVersion=`jq -r '.dependencies."@signalapp/ringrtc"' <<< $packageJson`

sed -E -i "s/(nodejs_)../\1$nodeVersion/" $SCRIPT_DIR/package.nix
sed -E -i "s/(electron_)../\1$electronVersion/" $SCRIPT_DIR/package.nix
sed -E -i "s/(SOURCE_DATE_EPOCH = )[0-9]+/\1$releaseEpoch/" $SCRIPT_DIR/package.nix

sed -E -i "s/(withAppleEmojis \? )false/\1true/" $SCRIPT_DIR/package.nix
nix-update signal-desktop-source --subpackage sticker-creator --version="$latestVersion"
sed -E -i "s/(withAppleEmojis \? )true/\1false/" $SCRIPT_DIR/package.nix
update-source-version signal-desktop-source \
  --ignore-same-version \
  --source-key=pnpmDeps

update-source-version signal-desktop-source.libsignal-node \
  "$libsignalClientVersion"
update-source-version signal-desktop-source.libsignal-node \
  --ignore-same-version \
  --source-key=cargoDeps.vendorStaging
update-source-version signal-desktop-source.libsignal-node \
  --ignore-same-version \
  --source-key=npmDeps

update-source-version signal-desktop-source.ringrtc-bin "$ringrtcVersion"