summaryrefslogtreecommitdiffstats
path: root/packaging/rpm/meshbay-cli.spec
blob: 5d9aeb684a2a68f732f4d5bac6e616916a586b5c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Name:           meshbay-cli
Version:        __VERSION__
Release:        1%{?dist}
Summary:        MeshBay command-line client — a member's groups and files, from a terminal
# The Python packages only the client needs go with it, each under its own
# licence: /opt/meshbay-cli/THIRD-PARTY-NOTICES.txt lists them.
License:        AGPL-3.0-or-later
URL:            https://meshbay.org

AutoReqProv:    no
# Not noarch: argon2-cffi's bindings are compiled code, as meshbay-common's are.

Requires:       meshbay-common = %{version}

%description
meshbay-cli signs in to a MeshBay hub, lists the groups the account belongs
to and their folders, and downloads and uploads files, directly with the node
serving each group and end-to-end encrypted. With no argument it opens an
interactive two-pane view.

Installs into the shared venv at /opt/meshbay-common/venv/, with the Python
packages only the client needs (Textual, keyring, argon2-cffi).

%install
cp -a %{_staging_root}/* %{buildroot}/
install -Dm644 -t %{buildroot}%{_licensedir}/%{name} %{_repo_root}/LICENSE

# After the whole transaction, so that meshbay-common's venv is in place. The
# client runs as an unprivileged user, who cannot write bytecode into /opt:
# compiled here once, or every run compiles Textual again in memory.
%posttrans
site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
while IFS= read -r entry; do
    [ -d "$site/$entry" ] || continue
    /opt/meshbay-common/venv/bin/python -m compileall -q "$site/$entry" >/dev/null 2>&1 || true
done < /opt/meshbay-cli/site-packages.list

# The client's files live in meshbay-common's venv: the bytecode compiled next
# to them is removed, or rpm cannot remove the directories it sits in. Before
# an upgrade too, while the list still names what the old version shipped.
%pre
if [ "$1" -ge 2 ] && [ -f /opt/meshbay-cli/site-packages.list ]; then
    site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
    while IFS= read -r entry; do
        [ -n "$entry" ] && [ -d "$site/$entry" ] || continue
        find "$site/$entry" -depth -type d -name __pycache__ \
            -exec rm -rf {} + 2>/dev/null || true
    done < /opt/meshbay-cli/site-packages.list
fi

%preun
if [ "$1" -eq 0 ]; then
    site=$(echo /opt/meshbay-common/venv/lib/python3.*/site-packages)
    while IFS= read -r entry; do
        [ -n "$entry" ] && [ -d "$site/$entry" ] || continue
        find "$site/$entry" -depth -type d -name __pycache__ \
            -exec rm -rf {} + 2>/dev/null || true
    done < /opt/meshbay-cli/site-packages.list
fi

%files -f %{_staging_root}.files
%license %{_licensedir}/%{name}
/opt/meshbay-cli
/usr/bin/meshbay-cli
%{_mandir}/man1/meshbay-cli.1*

%changelog
* Wed Oct 14 2026 MeshBay Team <devel@meshbay.org> - %{version}-1
- First package: the command-line client