From 6225d6f7f0a0ab436b3bbcb623c0373aa3927f79 Mon Sep 17 00:00:00 2001 From: Alois Date: Thu, 28 May 2026 15:41:52 +0200 Subject: [PATCH] (feat): now using the .deb instead of the .AppImage for nixos (qol): update hash --- .forgejo/workflows/deploy-prod.yml | 34 ++++++++-- flake.nix | 103 +++++++++++++++++++++++------ package.json | 4 +- 3 files changed, 113 insertions(+), 28 deletions(-) diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 20af9c7..ef210bd 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -238,10 +238,10 @@ jobs: run: | set -eu - APPIMAGE="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-x86_64.AppImage' -print -quit)" - test -n "$APPIMAGE" + DEB="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-amd64.deb' -print -quit)" + test -n "$DEB" - HASH="$(node -e 'const fs = require("fs"); const crypto = require("crypto"); const file = process.argv[1]; console.log("sha256-" + crypto.createHash("sha256").update(fs.readFileSync(file)).digest("base64"));' "$APPIMAGE")" + HASH="$(node -e 'const fs = require("fs"); const crypto = require("crypto"); const file = process.argv[1]; console.log("sha256-" + crypto.createHash("sha256").update(fs.readFileSync(file)).digest("base64"));' "$DEB")" export HASH node -e ' @@ -250,15 +250,37 @@ jobs: const hash = process.env.HASH; let content = fs.readFileSync("flake.nix", "utf8"); content = content.replace(/version = "[^"]+";/, `version = "${version}";`); - content = content.replace(/hash = "sha256-[^"]+";/, `hash = "${hash}";`); + content = content.replace(/x86_64DebHash = "sha256-[^"]+";/, `x86_64DebHash = "${hash}";`); fs.writeFileSync("flake.nix", content); ' if git diff --quiet -- flake.nix; then - echo "flake.nix already has the current release hash." + echo "flake.nix already has the current release hash on main." + else + git add flake.nix + git -c user.name="forgejo-actions" -c user.email="forgejo-actions@localhost" commit -m "(qol): update release flake hash" + git push + fi + + git fetch origin dev + git worktree add ../dev-flake-update origin/dev + cd ../dev-flake-update + + node -e ' + const fs = require("fs"); + const version = process.env.TAG; + const hash = process.env.HASH; + let content = fs.readFileSync("flake.nix", "utf8"); + content = content.replace(/version = "[^"]+";/, `version = "${version}";`); + content = content.replace(/x86_64DebHash = "sha256-[^"]+";/, `x86_64DebHash = "${hash}";`); + fs.writeFileSync("flake.nix", content); + ' + + if git diff --quiet -- flake.nix; then + echo "flake.nix already has the current release hash on dev." exit 0 fi git add flake.nix git -c user.name="forgejo-actions" -c user.email="forgejo-actions@localhost" commit -m "(qol): update release flake hash" - git push + git push origin HEAD:dev diff --git a/flake.nix b/flake.nix index af4cf03..f847bd6 100644 --- a/flake.nix +++ b/flake.nix @@ -4,37 +4,100 @@ inputs.nixpkgs.url = "nixpkgs/nixos-unstable"; outputs = {nixpkgs, ...}: let - systems = ["x86_64-linux" "aarch64-linux"]; + systems = ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs systems; version = "0.0.5"; + x86_64DebHash = "sha256-flC62rhhKyE/yRoNZRwXVHn/vwxE/Klxzj8uWhItDkY="; forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}"; in { packages = forAllSystems (system: let pkgs = import nixpkgs {inherit system;}; - artifact = if system == "aarch64-linux" then "Tensamin-${version}-linux-arm64.AppImage" else "Tensamin-${version}-linux-x86_64.AppImage"; - appImagePath = /. + builtins.getEnv "TENSAMIN_APPIMAGE"; - desktopItem = pkgs.makeDesktopItem { - name = "tensamin"; - desktopName = "Tensamin"; - exec = "tensamin %U"; - icon = "tensamin"; - categories = ["Network"]; - }; - wrapAppImage = src: - pkgs.appimageTools.wrapType2 { + debArtifact = "Tensamin-${version}-linux-amd64.deb"; + localDebPath = builtins.getEnv "TENSAMIN_DEB"; + debPath = /. + localDebPath; + electronRuntimeLibs = with pkgs; [ + alsa-lib + at-spi2-atk + at-spi2-core + cairo + cups + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + libdrm + libgbm + libnotify + libpulseaudio + libuuid + libxkbcommon + mesa + nspr + nss + pango + systemd + wayland + libX11 + libXScrnSaver + libXcomposite + libXcursor + libXdamage + libXext + libXfixes + libXi + libXrandr + libXtst + libxcb + ]; + packageDeb = src: + pkgs.stdenv.mkDerivation { pname = "tensamin"; - inherit version src; - extraInstallCommands = '' - install -Dm444 ${desktopItem}/share/applications/tensamin.desktop $out/share/applications/tensamin.desktop + inherit version; + + inherit src; + nativeBuildInputs = with pkgs; [ + autoPatchelfHook + dpkg + makeWrapper + ]; + buildInputs = electronRuntimeLibs; + + dontConfigure = true; + dontBuild = true; + + unpackPhase = '' + runHook preUnpack + dpkg-deb -x $src . + runHook postUnpack + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out + cp -r opt $out/ + cp -r usr/* $out/ + + mkdir -p $out/bin + makeWrapper $out/opt/Tensamin/tensamin $out/bin/tensamin + + substituteInPlace $out/share/applications/tensamin.desktop \ + --replace-fail "Exec=/opt/Tensamin/tensamin" "Exec=tensamin" + + runHook postInstall ''; }; - in { - default = wrapAppImage (pkgs.fetchurl { - url = "${forgejoBaseUrl}/${artifact}"; - hash = "sha256-WnDuEnwaZiHKh+1iOD0hU6TuYhGNQH82WxvW7sGdoAo="; + defaultPackage = packageDeb (pkgs.fetchurl { + url = "${forgejoBaseUrl}/${debArtifact}"; + hash = x86_64DebHash; }); + in { + default = defaultPackage; - localPathForDev = wrapAppImage appImagePath; + localPathForDev = if localDebPath == "" then defaultPackage else packageDeb debPath; }); }; } diff --git a/package.json b/package.json index 55353bc..2b634e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tensamin", - "version": "0.0.5", + "version": "0.0.6", "private": true, "workspaces": [ "packages/*", @@ -23,7 +23,7 @@ "build:mobile": "cd apps/tauri && bun run build:mobile", "dev:desktop": "cd apps/electron && bun run dev", "build:desktop": "cd apps/electron && bun run package", - "run:desktop": "TENSAMIN_APPIMAGE=\"$PWD/apps/electron/release/Tensamin-0.0.3-linux-x86_64.AppImage\" nix run .#localPathForDev --impure", + "run:desktop": "TENSAMIN_DEB=\"$PWD/apps/electron/release/Tensamin-$(node -p \\\"require('./package.json').version\\\")-linux-amd64.deb\" nix run .#localPathForDev --impure", "delete:mobile": "cd apps/tauri && nix develop --command adb uninstall net.tensamin.client" }, "devDependencies": { -- 2.54.0