rotki
maintainer chadsr
· 0 votes
· scanned 2026-08-03 00:08:14.047287
LOW
View on AUR ↗
Why flagged
The pip install of pyinstaller and uv sync are part of the build process for the application's own source from a trusted GitHub repository, not execution of untrusted external code.
Triggered rules
LOW
AI review downgraded a static finding
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The pip install of pyinstaller and uv sync are part of the build process for the application's own source from a trusted GitHub repository, not execution of untrusted external code.
2 higher static findings superseded - not the current verdict (shown for transparency)
MEDIUM
pip install of an external package
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:50
uv pip install pyinstaller
MEDIUM
External install via pipx/uv/poetry/cargo/go/gem
alt_pkg_manager_install
A non-pip/npm package manager (pipx, uv, poetry, cargo install, go install, gem, conda…) fetches and builds an external package at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:50
uv pip install pyinstaller
PKGBUILD
1 offending line(s) highlighted
1
# Maintainer: Ross Chadwick <git at ross dot ch>
2
# Contributor: goose (Block/Open Source)
3
4
pkgname=rotki
5
pkgver=1.43.2
6
pkgrel=1
7
pkgdesc='A portfolio tracking, analytics, accounting and management application that protects your privacy'
8
arch=('x86_64' 'aarch64')
9
url='https://rotki.com'
10
license=('AGPL-3.0-only')
11
provides=('rotki')
12
conflicts=('rotki-bin')
13
depends=(
14
'gtk3'
15
'nss'
16
)
17
makedepends=(
18
'python'
19
'uv'
20
'cargo'
21
'nodejs'
22
'pnpm'
23
'nvm'
24
)
25
options=(!lto)
26
source=(
27
"$pkgname-$pkgver.tar.gz::https://github.com/rotki/rotki/archive/refs/tags/v$pkgver.tar.gz"
28
"rotki.sh"
29
"rotki.desktop"
30
)
31
sha512sums=(
32
'7056697b15864f7fbed3d932b007453ec829a2ea4130c346f86a694f5215c43beaf7f3dd2d8ad33b7273db8ed65b8936ac8c4df668b8dfefdb45a829ebdbfe35'
33
'eb0bda9312d9b7f09d758c7b13dc60acb32af5119b63e526c04b52bf15630cc80d0a69d867aa062253c332592e5e6490ea63f8f765023032d4994a6a2fe05cca'
34
'ecaa5f356d0fabe9b6baa1432c6f047f9acfc75d5dc0e859dab06e182b34c9442cefcff1efac8cec826dc943c7f0f85e5809aea60dea21c99b41927f17e5117a'
35
)
36
37
_ensure_local_nvm() {
38
which nvm >/dev/null 2>&1 && nvm deactivate && nvm unload
39
export NVM_DIR="${srcdir}/.nvm"
40
source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
41
}
42
43
prepare() {
44
cd "$srcdir/$pkgname-$pkgver"
45
_ensure_local_nvm
46
47
uv sync --group packaging
48
49
# Rotki doesn't include pyinstaller as a UV dependency, so install it
50
uv pip install pyinstaller
51
52
cd frontend
53
nvm install
54
nvm use
55
export CYPRESS_INSTALL_BINARY=0 # Avoid downloading Cypress binary during frontend install
56
pnpm install --frozen-lockfile
57
}
58
59
build() {
60
cd "$srcdir/$pkgname-$pkgver"
61
_ensure_local_nvm
62
63
# Build colibri rust binary
64
cargo build \
65
--target-dir build/colibri \
66
--manifest-path ./colibri/Cargo.toml \
67
--release
68
69
mkdir -p build/colibri/bin/
70
mv build/colibri/release/colibri build/colibri/bin/
71
72
# Create the Python backend onefile with PyInstaller from rotkehlchen.spec
73
export PYTHONOPTIMIZE=2
74
export SETUPTOOLS_SCM_PRETEND_VERSION="$pkgver"
75
uv run pyinstaller --noconfirm --clean --distpath "${PWD}/build/backend" rotkehlchen.spec
76
77
# Build the Electron frontend and package into an unpacked directory (--dir)
78
cd frontend
79
nvm use
80
export ROTKI_VERSION="$pkgver"
81
pnpm run build
82
pnpm run electron:package -- --dir
83
}
84
85
package() {
86
cd "$srcdir/$pkgname-$pkgver"
87
88
install -d "$pkgdir/opt/$pkgname" "$pkgdir/usr/bin"
89
90
# Move the unpacked electron app produced by electron-builder --dir
91
mv frontend/app/build/linux-unpacked/* "$pkgdir/opt/$pkgname/"
92
93
install -Dm755 "$srcdir/rotki.sh" "$pkgdir/usr/bin/rotki"
94
95
install -Dm644 "$srcdir/rotki.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
96
97
install -Dm644 frontend/app/public/assets/images/protocols/rotki.svg "${pkgdir}/usr/share/icons/hicolor/scalable/apps/rotki.svg"
98
99
# License
100
install -Dm644 LICENSE.md "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
101
}
102
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 3 |
| 2026-08-02 00:16:08 | LOW | 3 |
| 2026-08-01 00:11:18 | LOW | 3 |
| 2026-07-31 00:14:10 | LOW | 3 |
| 2026-07-30 00:17:23 | LOW | 3 |
| 2026-07-29 00:25:53 | LOW | 3 |
| 2026-07-28 00:07:28 | LOW | 3 |
| 2026-07-27 00:24:32 | LOW | 3 |
| 2026-07-26 00:07:32 | LOW | 3 |
| 2026-07-25 00:13:44 | LOW | 3 |
| 2026-07-24 00:02:28 | LOW | 3 |
| 2026-07-23 00:14:47 | LOW | 3 |
| 2026-07-22 00:29:32 | LOW | 3 |
| 2026-07-21 00:24:15 | LOW | 3 |
| 2026-07-20 00:19:49 | LOW | 3 |
| 2026-07-19 00:17:08 | LOW | 3 |
| 2026-07-18 00:14:48 | LOW | 3 |
| 2026-07-17 00:06:16 | LOW | 3 |
| 2026-07-16 00:05:41 | LOW | 3 |
| 2026-07-15 00:09:25 | LOW | 3 |