Unverified Commit dde36142 authored by Thiago Kenji Okada's avatar Thiago Kenji Okada Committed by GitHub
Browse files

Merge pull request #279608 from thiagokokada/bump-rar

rar: 6.21 -> 6.24
parents 1dd463e1 ce262e42
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
{ lib, stdenv, fetchurl, autoPatchelfHook, installShellFiles }:
{ lib
, stdenv
, fetchurl
, autoPatchelfHook
, installShellFiles
}:

let
  version = "6.21";
  version = "6.24";
  downloadVersion = lib.replaceStrings [ "." ] [ "" ] version;
  # Use `nix store prefetch-file <url>` to generate the hashes for the other systems
  # TODO: create update script
  srcUrl = {
  # Use `./update.sh` to generate the entries below
  srcs = {
    i686-linux = {
      url = "https://www.rarlab.com/rar/rarlinux-x32-${downloadVersion}.tar.gz";
      hash = "sha256-mDeRmLTjF0ZLv4JoLrgI8YBFFulBSKfOPb6hrxDZIkU=";
      hash = "sha256-aacgJH0iJLRNEaZuVyzl/FxZgSnW3dIZFUfaqt0l88M=";
    };
    x86_64-linux = {
      url = "https://www.rarlab.com/rar/rarlinux-x64-${downloadVersion}.tar.gz";
      hash = "sha256-3fr5aVkh/r6OfBEcZULJSZp5ydakJOLRPlgzMdlwGTM=";
      hash = "sha256-iOIqjoQSXJR2N7vyjHRuM4oKYyedgPn51zc2A4ddses=";
    };
    aarch64-darwin = {
      url = "https://www.rarlab.com/rar/rarmacos-arm-${downloadVersion}.tar.gz";
      hash = "sha256-OR9HBlRteTzuyQ06tyXTSrFTBHFwmZ41kUfvgflogT4=";
      hash = "sha256-2r4zWDT7Xw/CNvA7oNEsGfrXJDzFa5gNthIB/5TYR5U=";
    };
    x86_64-darwin = {
      url = "https://www.rarlab.com/rar/rarmacos-x64-${downloadVersion}.tar.gz";
      hash = "sha256-UN3gmEuIpCXwmw3/l+KdarAYLy1DxGoPAOB2bfJTGbw=";
      hash = "sha256-4vENPNfMpQstsm9+8+glHPK9fAlDmnHWbCHW+HUwSX4=";
    };
  };
  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
  manSrc = fetchurl {
    url = "https://aur.archlinux.org/cgit/aur.git/plain/rar.1?h=rar&id=8e39a12e88d8a3b168c496c44c18d443c876dd10";
    name = "rar.1";
    hash = "sha256-93cSr9oAsi+xHUtMsUvICyHJe66vAImS2tLie7nt8Uw=";
  };
in
stdenv.mkDerivation rec {
stdenv.mkDerivation {
  pname = "rar";
  inherit version;

  src = fetchurl srcUrl;
  src = fetchurl (srcs.${stdenv.hostPlatform.system});

  dontBuild = true;

@@ -57,12 +61,15 @@ stdenv.mkDerivation rec {
    installManPage ${manSrc}
  '';

  passthru.updateScript = ./update.sh;

  meta = with lib; {
    description = "Utility for RAR archives";
    homepage = "https://www.rarlab.com/";
    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
    license = licenses.unfree;
    mainProgram = "rar";
    maintainers = with maintainers; [ thiagokokada ];
    platforms = with platforms; linux ++ darwin;
    platforms = lib.attrNames srcs;
    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
  };
}
+78 −0
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gawk gnused pup jq

set -euo pipefail

DIRNAME=$(dirname "$0")
readonly DIRNAME
readonly NIXPKGS_ROOT="../../../.."
readonly NIX_FLAGS=(--extra-experimental-features 'nix-command flakes')

# awk is used for parsing the RARLAB website to get the newest version
readonly AWK_FIELD_SEPARATOR='[-.]'
# shellcheck disable=SC2016
readonly AWK_COMMAND='
# We will get the following output from pup:
# /rar/rarlinux-x64-700b3.tar.gz
# /rar/rarmacos-x64-700b3.tar.gz
# /rar/rarlinux-x64-624.tar.gz
# /rar/rarbsd-x64-624.tar.gz
# /rar/rarmacos-x64-624.tar.gz

# Ignore anything that is flagged as beta (e.g.: `/rar/rarlinux-x64-700b3.tar.gz`)
!/[0-9]+b[0-9]*.tar.gz$/ {
    # /rar/rarlinux-x64-624.tar.gz -> 624
    val = $3
    # Only get the value if it is bigger than the current one
    if (val > max) max = val
}
END {
    # 624 -> 6.24
    printf "%.2f\n", max/100
}
'

updateHash() {
    local -r version="${1//./}"
    local -r arch="$2"
    local -r os="$3"
    local -r nix_arch="$4"

    url="https://www.rarlab.com/rar/rar$os-$arch-$version.tar.gz"
    hash=$(nix store prefetch-file --json "$url" | jq -r .hash)
    currentHash=$(cd "$DIRNAME" && nix "${NIX_FLAGS[@]}" eval --raw "$NIXPKGS_ROOT#legacyPackages.$nix_arch.rar.src.outputHash")

    sed -i "s|$currentHash|$hash|g" "$DIRNAME/default.nix"
}

updateVersion() {
    local -r version="$1"
    sed -i "s|version = \"[0-9.]*\";|version = \"$version\";|g" "$DIRNAME/default.nix"
}

latestVersion="${1:-}"
if [[ -z "$latestVersion" ]]; then
    latestVersion=$(
        curl --silent --location --fail https://www.rarlab.com/download.htm | \
            pup 'a[href*=".tar.gz"] attr{href}' | \
            awk -F"$AWK_FIELD_SEPARATOR" "$AWK_COMMAND"
    )
fi
readonly latestVersion
echo "Latest version: $latestVersion"

currentVersion=$(cd "$DIRNAME" && nix "${NIX_FLAGS[@]}" eval --raw "$NIXPKGS_ROOT#legacyPackages.x86_64-linux.rar.version")
readonly currentVersion
echo "Current version: $currentVersion"

if [[ "$currentVersion" == "$latestVersion" ]]; then
    echo "rar is up-to-date"
    exit 0
fi

updateHash "$latestVersion" x32 linux i686-linux
updateHash "$latestVersion" x64 linux x86_64-linux
updateHash "$latestVersion" arm macos aarch64-darwin
updateHash "$latestVersion" x64 macos x86_64-darwin

updateVersion "$latestVersion"