feat: supported flatpak version v3

This commit is contained in:
kogeletey 2024-01-25 14:49:53 +03:00
parent 4a99eb94e2
commit 43509fc943
No known key found for this signature in database
GPG Key ID: 386DEE24B60BD996
20 changed files with 501 additions and 478 deletions

44
.dockerignore Normal file
View File

@ -0,0 +1,44 @@
# Dependencies
**/node_modules
.pnp
.pnp.js
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Testing
coverage
# Turbo
.turbo
# Vercel
.vercel
# Build Outputs
**/.next/
**/out/
**/build
**/dist
**/target
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Misc
.DS_Store
*.pem
# Unnecessary files
**/.git/
.github/
flatpak/*.xml
flatpak/*.desktop
flatpak/*.yml

View File

@ -11,6 +11,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: cache of container
@ -51,11 +53,16 @@ jobs:
- uses: actions/download-artifact@v4
with:
name: repo-dist
- uses: actions/checkout@v4
with:
repository: flathub/shared-modules
path: shared-modules
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: lume.flatpak
manifest-path: nu.lume.Lume.yml
cache-key: flatpak-builder-${{ github.sha }}
restore-cache: false
# cache-key: flatpak-builder-${{ github.sha }}
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')

14
.gitignore vendored
View File

@ -13,25 +13,23 @@ node_modules
.env.production.local
# Testing
coverage
coverage/
# Turbo
.turbo
.turbo/
# Vercel
.vercel
.vercel/
# Build Outputs
.next/
out/
build
dist
build/
dist/
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
*.log*
# Misc
.DS_Store

View File

@ -1,12 +1,13 @@
import { CancelIcon, PlusIcon, UserAddIcon, UserRemoveIcon } from "@lume/icons";
import { User } from "@lume/ui";
import * as Dialog from "@radix-ui/react-dialog";
import { resolveResource } from "@tauri-apps/api/path";
import { resolveResource, resolve } from "@tauri-apps/api/path";
import { readTextFile, writeTextFile } from "@tauri-apps/plugin-fs";
import { nip19 } from "nostr-tools";
import { useEffect, useState } from "react";
import { parse, stringify } from "smol-toml";
import { toast } from "sonner";
import { VITE_FLATPAK_RESOURCE } from "@lume/utils";
export function DepotMembers() {
const [members, setMembers] = useState<Set<string>>(null);
@ -32,7 +33,7 @@ export function DepotMembers() {
const updateMembers = async () => {
setMembers(new Set(tmpMembers));
const defaultConfig = await resolveResource("resources/config.toml");
const defaultConfig = VITE_FLATPAK_RESOURCE !== null ? await resolve("/",VITE_FLATPAK_RESOURCE) : await resolveResource("resources/config.toml");
const config = await readTextFile(defaultConfig);
const configContent = parse(config);
@ -46,7 +47,7 @@ export function DepotMembers() {
useEffect(() => {
async function loadConfig() {
const defaultConfig = await resolveResource("resources/config.toml");
const defaultConfig = VITE_FLATPAK_RESOURCE !== null ? await resolve("/",VITE_FLATPAK_RESOURCE) : await resolveResource("resources/config.toml");
const config = await readTextFile(defaultConfig);
const configContent = parse(config);
setTmpMembers(

View File

@ -1,8 +1,8 @@
import { useArk } from "@lume/ark";
import { LoaderIcon } from "@lume/icons";
import { delay, VITE_FLATPAK_RESOURCE } from "@lume/utils";
import { resolve, resolveResource } from "@tauri-apps/api/path";
import { useStorage } from "@lume/storage";
import { delay } from "@lume/utils";
import { resolveResource } from "@tauri-apps/api/path";
import { readTextFile, writeTextFile } from "@tauri-apps/plugin-fs";
import { useState } from "react";
import { useNavigate } from "react-router-dom";
@ -21,7 +21,10 @@ export function DepotOnboardingScreen() {
setLoading(true);
// get default config
const defaultConfig = await resolveResource("resources/config.toml");
const defaultConfig =
VITE_FLATPAK_RESOURCE !== null
? await resolve("/", VITE_FLATPAK_RESOURCE)
: await resolveResource("resources/config.toml");
const config = await readTextFile(defaultConfig);
const parsedConfig = parse(config);

View File

@ -0,0 +1,13 @@
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 87c23e40..bb84872e 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -50,8 +50,6 @@
"deb": {
"depends": []
},
- "externalBin": ["bin/depot"],
- "resources": ["resources/*"],
"icon": [
"icons/32x32.png",
"icons/128x128.png",

View File

@ -10,6 +10,7 @@ RUN apt install libwebkit2gtk-4.1-dev -y \
file \
libssl-dev \
libayatana-appindicator3-dev \
protobuf-compiler \
librsvg2-dev
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
@ -25,41 +26,31 @@ ENV PATH="/root/.cargo/bin:${PATH}"
RUN corepack enable
ADD src /lume/src
ADD public /lume/public
ADD index.html \
package.json \
postcss.config.js \
tailwind.config.js \
vite.config.ts \
pnpm-lock.yaml \
tsconfig.json \
/lume
ADD src-tauri/icons /lume/src-tauri/icons
ADD src-tauri/migrations /lume/src-tauri/migrations
ADD src-tauri/src /lume/src-tauri/src
ADD src-tauri/build.rs \
src-tauri/Cargo.lock \
src-tauri/Cargo.toml \
src-tauri/tauri.conf.json \
src-tauri/tauri.linux.conf.json \
/lume/src-tauri
ADD . /lume/.
WORKDIR /lume
RUN pnpm install --frozen-lockfile
# Path for disable updater
ADD flatpak/0001-disable-tauri-updater.patch .
RUN patch -p1 -t -i 0001-disable-tauri-updater.patch
#ADD flatpak/0001-disable-tauri-updater.patch .
#RUN patch -p1 -t -i flatpak/0001-disable-tauri-updater.patch
ADD flatpak/0002-depot-remove.patch .
RUN patch -p1 -t -i 0002-depot-remove.patch
# compile depot
#ADD flatpak/build-depot.sh build-depot.sh
#RUN mv flatpak/build-depot.sh build-depot.sh
#RUN sh build-depot.sh
#RUN pnpm run build:depot
#ENV VITE_FLATPAK_RESOURCE="/app/lib/lume/resources/config.toml"
# debian build
RUN pnpm tauri build -b deb
ARG VERSION=2.2.3
ARG VERSION=3.0.0
ARG ARCH=amd64
RUN cp -r ./src-tauri/target/release/bundle/deb/lume_${VERSION}_${ARCH}/data lume-package

View File

@ -1,14 +0,0 @@
# Lume nostr desktop client
[GitHub - luminous-devs/lume: A cross-platform desktop nostr client](https://github.com/luminous-devs/lume) is made with Tauri and built using [pnpm](https://pnpm.io) and [cargo](https://doc.rust-lang.org/cargo/) packages.
Lume itself has node dependencies managed with pnpm as well.
## Source generation
To transform their package locks into flatpak sources, [flatpak-builder-tools](https://github.com/flatpak/flatpak-builder-tools) is used.
```sh
# Generate cinny-desktop sources for use with cargo
<path-to flatpak-builder-tools>/cargo/flatpak-cargo-generator.py -o cargo-sources.json <path-to cinny-desktop>/src-tauri/Cargo.lock
# Generate cinny and cinny-desktop sources for use with npm
flatpak-node-generator --no-requests-cache -r -o node-sources.json npm <path-to cinny-desktop>/package-lock.json
```

15
flatpak/build-depot.sh Normal file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env sh
directory_bin="/lume/src-tauri/bin"
target="x86_64-unknown-linux-gnu"
cd modules/depot
check_directory_keep=$(ls $directory_bin | grep -vE '.keep$' | wc -l)
echo $(ls $directory_bin | grep -vE '.keep$')
if [ $check_directory_keep -eq 0 ]; then
cargo build --release
mv target/release/depot "$directory_bin/depot-$target"
fi

View File

@ -30,7 +30,18 @@
<value key="Purism::form_factor">workstation</value>
<value key="Purism::form_factor">mobile</value>
</custom>
<screenshots>
<screenshot type="default">
<image> https://raw.githubusercontent.com/kogeletey/lume-nostr/feat/package-flatpak/flatpak/screenshoots/login-screen.png </image>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/kogeletey/lume-nostr/feat/package-flatpak/flatpak/screenshoots/collumns.png</image>
</screenshot>
<screenshot>
<image> https://raw.githubusercontent.com/kogeletey/lume-nostr/feat/package-flatpak/flatpak/screenshoots/home-screen.png </image>
</screenshot>
</screenshots>
<releases>
<release version="2.2.3" date="2023-12-07"/>

View File

@ -13,13 +13,14 @@ finish-args:
- --share=network
#- --filesystem=home
#- --filesystem=xdg-download
#- --talk-name=org.freedesktop.secrets
- --talk-name=org.freedesktop.secrets
- --talk-name=org.freedesktop.Notifications
- --talk-name=org.kde.StatusNotifierWatcher
- --filesystem=xdg-run/keyring
- --device=dri
modules:
- shared-modules/libappindicator/libappindicator-gtk3-12.10.json
- name: lume
sources:
- type: dir
@ -31,8 +32,10 @@ modules:
buildsystem: simple
build-commands:
- install -Dm755 bin/lume /app/bin/lume
# - install -Dm755 bin/depot /app/bin/depot
# - mkdir -p /app/lib/lume/resources
# - cp -r lib/lume/resources /app/lib/lume/resources
- mkdir -p /app/share/icons/hicolor/
- cp -r share/icons/hicolor/ /app/share/icons/
- install -Dm644 nu.lume.Lume.appdata.xml /app/share/metainfo/nu.lume.Lume.appdata.xml
- install -Dm644 nu.lume.Lume.desktop /app/share/applications/nu.lume.Lume.desktop
- ls -lRa /app

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB

View File

@ -3,6 +3,7 @@
"private": true,
"version": "3.0.0",
"scripts": {
"build:depot": "node --max-old-space-size=4096 scripts/compile-depot.mjs",
"build": "turbo build",
"dev": "turbo dev",
"tauri": "tauri"

View File

@ -14,6 +14,7 @@
"devDependencies": {
"@lume/tsconfig": "workspace:*",
"@lume/types": "workspace:*",
"@lume/utils": "workspace:^",
"@types/react": "^18.2.48",
"typescript": "^5.3.3"
}

View File

@ -8,7 +8,8 @@ import {
NDKCacheUserProfile,
} from "@lume/types";
import { invoke } from "@tauri-apps/api/core";
import { appConfigDir, resolveResource } from "@tauri-apps/api/path";
import { resolve, appConfigDir, resolveResource } from "@tauri-apps/api/path";
import { VITE_FLATPAK_RESOURCE } from "@lume/utils";
import { Platform } from "@tauri-apps/plugin-os";
import { Child, Command } from "@tauri-apps/plugin-shell";
import Database from "@tauri-apps/plugin-sql";
@ -92,7 +93,10 @@ export class LumeStorage {
}
public async launchDepot() {
const configPath = await resolveResource("resources/config.toml");
const configPath =
VITE_FLATPAK_RESOURCE !== null
? await resolve("/", VITE_FLATPAK_RESOURCE)
: await resolveResource("resources/config.toml");
const dataPath = await appConfigDir();
const command = Command.sidecar("bin/depot", [

View File

@ -406,3 +406,5 @@ export const QUOTES = [
"You can send secure messages on Nostr with https://0xchat.com/",
"Are you a fan of following topics, instead of people? Use https://zapddit.com",
];
export const VITE_FLATPAK_RESOURCE = import.meta.env.VITE_FLATPAK_RESOURCE;

File diff suppressed because it is too large Load Diff

View File

@ -1,124 +1,119 @@
{
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"build": {
"beforeBuildCommand": "pnpm run build",
"beforeDevCommand": "pnpm run dev",
"devPath": "http://localhost:3000",
"distDir": "../dist",
"withGlobalTauri": true
},
"package": {
"productName": "Lume 3",
"version": "3.0.0"
},
"plugins": {
"fs": {
"scope": [
"$APPDATA/*",
"$DATA/*",
"$LOCALDATA/*",
"$DESKTOP/*",
"$DOCUMENT/*",
"$DOWNLOAD/*",
"$HOME/*",
"$PICTURE/*",
"$PUBLIC/*",
"$VIDEO/*",
"$RESOURCE",
"$RESOURCE/*",
"$RESOURCE/**"
]
},
"http": {
"scope": ["http://**/", "https://**/"]
},
"shell": {
"open": true,
"scope": [{ "name": "bin/depot", "sidecar": true, "args": true }]
},
"updater": {
"endpoints": [
"https://lus.reya3772.workers.dev/v1/{{target}}/{{arch}}/{{current_version}}",
"https://lus.reya3772.workers.dev/{{target}}/{{current_version}}"
]
}
},
"tauri": {
"bundle": {
"active": true,
"category": "SocialNetworking",
"deb": {
"depends": []
},
"externalBin": [],
"resources": ["resources/*"],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"copyright": "",
"identifier": "nu.lume",
"longDescription": "nostr client for desktop",
"shortDescription": "",
"targets": "all",
"updater": {
"active": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEU3OTdCMkM3RjU5QzE2NzkKUldSNUZwejF4N0tYNTVHYjMrU0JkL090SlEyNUVLYU5TM2hTU3RXSWtEWngrZWJ4a0pydUhXZHEK",
"windows": {
"installMode": "quiet"
}
},
"appimage": {
"bundleMediaFramework": true
},
"rpm": {
"epoch": 0,
"files": {},
"release": "1"
},
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"license": "../LICENSE",
"minimumSystemVersion": "10.15.0",
"providerShortName": null,
"signingIdentity": null
},
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": ""
}
},
"security": {
"assetProtocol": {
"enable": true,
"scope": [
"$APPDATA/*",
"$DATA/*",
"$LOCALDATA/*",
"$DESKTOP/*",
"$DOCUMENT/*",
"$DOWNLOAD/*",
"$HOME/*",
"$PICTURE/*",
"$PUBLIC/*",
"$VIDEO/*",
"$APPCONFIG/*",
"$RESOURCE/*"
]
},
"dangerousDisableAssetCspModification": false,
"dangerousRemoteDomainIpcAccess": [],
"freezePrototype": false
},
"trayIcon": {
"iconPath": "icons/tray.png"
},
"macOSPrivateApi": true
}
"$schema": "../apps/desktop/node_modules/@tauri-apps/cli/schema.json",
"build": {
"beforeBuildCommand": "pnpm run build",
"beforeDevCommand": "pnpm run dev",
"devPath": "http://localhost:3000",
"distDir": "../dist",
"withGlobalTauri": true
},
"package": {
"productName": "Lume",
"version": "3.0.0"
},
"plugins": {
"fs": {
"scope": [
"$APPDATA/*",
"$DATA/*",
"$LOCALDATA/*",
"$DESKTOP/*",
"$DOCUMENT/*",
"$DOWNLOAD/*",
"$HOME/*",
"$PICTURE/*",
"$PUBLIC/*",
"$VIDEO/*",
"$RESOURCE",
"$RESOURCE/*",
"$RESOURCE/**"
]
},
"http": {
"scope": ["http://**/", "https://**/"]
},
"shell": {
"open": true,
"scope": [{ "name": "bin/depot", "sidecar": true, "args": true }]
},
"updater": {
"endpoints": [
"https://lus.reya3772.workers.dev/v1/{{target}}/{{arch}}/{{current_version}}",
"https://lus.reya3772.workers.dev/{{target}}/{{current_version}}"
]
}
},
"tauri": {
"bundle": {
"active": true,
"category": "SocialNetworking",
"deb": {
"depends": []
},
"externalBin": ["bin/depot"],
"resources": ["resources/*"],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"copyright": "",
"identifier": "nu.lume.Lume",
"longDescription": "nostr client for desktop",
"shortDescription": "",
"targets": "all",
"updater": {
"active": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEU3OTdCMkM3RjU5QzE2NzkKUldSNUZwejF4N0tYNTVHYjMrU0JkL090SlEyNUVLYU5TM2hTU3RXSWtEWngrZWJ4a0pydUhXZHEK",
"windows": {
"installMode": "quiet"
}
},
"appimage": {
"bundleMediaFramework": true
},
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"license": "../LICENSE",
"minimumSystemVersion": "10.15.0",
"providerShortName": null,
"signingIdentity": null
},
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": ""
}
},
"security": {
"assetProtocol": {
"enable": true,
"scope": [
"$APPDATA/*",
"$DATA/*",
"$LOCALDATA/*",
"$DESKTOP/*",
"$DOCUMENT/*",
"$DOWNLOAD/*",
"$HOME/*",
"$PICTURE/*",
"$PUBLIC/*",
"$VIDEO/*",
"$APPCONFIG/*",
"$RESOURCE/*"
]
},
"dangerousDisableAssetCspModification": false,
"dangerousRemoteDomainIpcAccess": [],
"freezePrototype": false
},
"trayIcon": {
"iconPath": "icons/tray.png"
},
"macOSPrivateApi": true
}
}