diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index ef210bd..20af9c7 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -238,10 +238,10 @@ jobs: run: | set -eu - DEB="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-amd64.deb' -print -quit)" - test -n "$DEB" + APPIMAGE="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-x86_64.AppImage' -print -quit)" + test -n "$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")" + 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")" export HASH node -e ' @@ -250,37 +250,15 @@ jobs: 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}";`); + content = content.replace(/hash = "sha256-[^"]+";/, `hash = "${hash}";`); fs.writeFileSync("flake.nix", content); ' if git diff --quiet -- flake.nix; then - 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." + echo "flake.nix already has the current release hash." 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 origin HEAD:dev + git push diff --git a/flake.nix b/flake.nix index f847bd6..0ee94f1 100644 --- a/flake.nix +++ b/flake.nix @@ -4,100 +4,37 @@ inputs.nixpkgs.url = "nixpkgs/nixos-unstable"; outputs = {nixpkgs, ...}: let - systems = ["x86_64-linux"]; + systems = ["x86_64-linux" "aarch64-linux"]; forAllSystems = nixpkgs.lib.genAttrs systems; - version = "0.0.5"; - x86_64DebHash = "sha256-flC62rhhKyE/yRoNZRwXVHn/vwxE/Klxzj8uWhItDkY="; + version = "0.0.3"; forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}"; in { packages = forAllSystems (system: let pkgs = import nixpkgs {inherit system;}; - 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 { + 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 { pname = "tensamin"; - 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 + inherit version src; + extraInstallCommands = '' + install -Dm444 ${desktopItem}/share/applications/tensamin.desktop $out/share/applications/tensamin.desktop ''; }; - defaultPackage = packageDeb (pkgs.fetchurl { - url = "${forgejoBaseUrl}/${debArtifact}"; - hash = x86_64DebHash; - }); in { - default = defaultPackage; + default = wrapAppImage (pkgs.fetchurl { + url = "${forgejoBaseUrl}/${artifact}"; + hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; + }); - localPathForDev = if localDebPath == "" then defaultPackage else packageDeb debPath; + localPathForDev = wrapAppImage appImagePath; }); }; } diff --git a/package.json b/package.json index 2b634e3..55353bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tensamin", - "version": "0.0.6", + "version": "0.0.5", "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_DEB=\"$PWD/apps/electron/release/Tensamin-$(node -p \\\"require('./package.json').version\\\")-linux-amd64.deb\" nix run .#localPathForDev --impure", + "run:desktop": "TENSAMIN_APPIMAGE=\"$PWD/apps/electron/release/Tensamin-0.0.3-linux-x86_64.AppImage\" nix run .#localPathForDev --impure", "delete:mobile": "cd apps/tauri && nix develop --command adb uninstall net.tensamin.client" }, "devDependencies": {