jbrowse-desktop-git
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed the full PKGBUILD and judged it LOW (confidence 75%): Package builds from the official GMOD/jbrowse-components GitHub repo using pnpm with a frozen lockfile; the flagged 'undeclared external package' is just pnpm installing the project's own monorepo dependencies scoped to the desktop subgraph, not an unrelated third-party package. The SKIP checksum is expected for a git source. No obfuscation, no exfiltration, no untrusted binary downloads.
1 higher static finding superseded - not the current verdict (shown for transparency)
npm_install_external
Runs `npm/yarn/pnpm install <package>` for a package not in source=(), pulling unpinned, unreviewed code at build time. Severity downgraded: the package declares/looks like a Node.js consumer, where build-time installs are expected.
-
PKGBUILD:42
pnpm install --frozen-lockfile --filter "@jbrowse/desktop..."
PKGBUILD
1 offending line(s) highlighted# Maintainer: Piotr Balwierz <nikt@tuta.com>
pkgname=jbrowse-desktop-git
_appname=jbrowse-desktop
pkgver=4.3.0.r11311.g76002d07d6
pkgrel=1
pkgdesc="JBrowse 2 — pluggable open-source genome browser (desktop Electron app, git version)"
arch=('any')
url="https://jbrowse.org/jb2/"
license=('Apache-2.0')
# Runtime: system Electron (upstream targets electron ^42). Renderer + main are
# bundled at build time (esbuild main with external:electron, webpack renderer),
# so no node_modules are needed at runtime.
depends=('electron42' 'hicolor-icon-theme')
makedepends=('git' 'pnpm' 'nodejs')
provides=('jbrowse-desktop')
conflicts=('jbrowse-desktop')
options=('!strip' '!debug')
source=("$_appname::git+https://github.com/GMOD/jbrowse-components.git")
sha256sums=('SKIP')
pkgver() {
cd "$srcdir/$_appname"
local _v
_v=$(node -p "require('./products/jbrowse-desktop/package.json').version")
printf "%s.r%s.g%s" "$_v" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "$srcdir/$_appname"
# Keep npm/pnpm caches inside srcdir; skip the unused bundled Electron binary
# (we run on system electron42) and give Node headroom for the webpack build.
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
# e2e-only tooling pulled in as devDeps; their browser/binary downloads are
# not needed to build and can fail on flaky networks.
export PUPPETEER_SKIP_DOWNLOAD=1
export npm_config_cache="$srcdir/.npm-cache"
export NODE_OPTIONS="--max-old-space-size=8192"
# Scope install to the desktop subgraph only — the default whole-monorepo
# install builds website/jbrowse-img deps (sharp/libvips, node-canvas) that
# have no prebuilt binaries for the host Node and fail to compile.
pnpm install --frozen-lockfile --filter "@jbrowse/desktop..."
cd products/jbrowse-desktop
pnpm build
}
package() {
cd "$srcdir/$_appname/products/jbrowse-desktop"
# The app's *internal* version must be valid semver (electron-updater parses
# app.getVersion() and throws otherwise) — use upstream's, not the Arch pkgver.
local _ver
_ver=$(node -p "require('./package.json').version")
# App payload: the built renderer + bundled electron main.
# The packaged main loads the renderer from `app.getAppPath()/index.html`
# (= the dir holding package.json), so flatten build/'s contents into the app
# root — index.html, static/ and electron.js all sit next to package.json.
install -dm755 "$pkgdir/usr/lib/$_appname"
cp -r build/. "$pkgdir/usr/lib/$_appname/"
# Minimal runtime package.json so `electron <dir>` finds the entry point
cat > "$pkgdir/usr/lib/$_appname/package.json" <<EOF
{
"name": "jbrowse-desktop",
"productName": "JBrowse 2",
"version": "$_ver",
"type": "module",
"main": "electron.js"
}
EOF
# Launcher using the system Electron 42 runtime
install -dm755 "$pkgdir/usr/bin"
cat > "$pkgdir/usr/bin/$_appname" <<EOF
#!/bin/sh
exec electron42 /usr/lib/$_appname --ozone-platform-hint=auto "\$@"
EOF
chmod 755 "$pkgdir/usr/bin/$_appname"
# Icon (size-agnostic location so it is always found) + hicolor
install -Dm644 assets/icon.png "$pkgdir/usr/share/pixmaps/$_appname.png"
install -Dm644 assets/icon.png "$pkgdir/usr/share/icons/hicolor/512x512/apps/$_appname.png"
# Desktop entry
install -dm755 "$pkgdir/usr/share/applications"
cat > "$pkgdir/usr/share/applications/$_appname.desktop" <<EOF
[Desktop Entry]
Type=Application
Name=JBrowse 2
GenericName=Genome Browser
Comment=A pluggable open-source genome browser
Exec=$_appname %U
Icon=$_appname
Terminal=false
Categories=Science;Biology;Education;
StartupWMClass=JBrowse 2
EOF
install -Dm644 "$srcdir/$_appname/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |
| 2026-07-16 00:05:41 | LOW | 2 |
| 2026-07-15 00:09:25 | LOW | 2 |