siyuan

LOW
maintainer zxp19821005 2 votes scanned 2026-09-29 05:22:53.434583
View on AUR
Why flagged

The package builds from the project's own source via git clone from the official GitHub repository, uses standard build tools, and installs dependencies declared in the project's package.json; the variable-named package installation (pnpm) is part of the project's legitimate build process and does not introduce untrusted code.

Triggered rules

Low AI review of an ambiguous pattern llm_review

The static rules found a suspicious pattern they could not resolve, so an AI model (qwen/qwen3-235b-a22b-2507) reviewed it and judged it LOW (confidence 95%): The package builds from the project's own source via git clone from the official GitHub repository, uses standard build tools, and installs dependencies declared in the project's package.json; the variable-named package installation (pnpm) is part of the project's legitimate build process and does not introduce untrusted code.

  • PKGBUILD:96 npm install -g "pnpm@${_pnpmver}" --prefix "${HOME}/.pnpm" \

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2# Contributor: Xiaozhu1337 <nihaoaheheda@gmail.com>
3pkgname=siyuan
4pkgver=3.8.6
5_electronversion=44
6_nodeversion=24
7pkgrel=1
8pkgdesc="A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang."
9arch=(
10 'aarch64'
11 'x86_64'
12)
13url="https://b3log.org/siyuan"
14_ghurl="https://github.com/siyuan-note/siyuan"
15license=('AGPL-3.0-only')
16conflicts=(
17 "${pkgname}"
18 "${pkgname}-note"
19)
20provides=("${pkgname}")
21depends=(
22 "electron${_electronversion}"
23)
24makedepends=(
25 'gendesk'
26 'nvm'
27 'npm'
28 'go'
29 'pnpm'
30 'git'
31 'jq'
32)
33source=("${pkgname}.sh")
34sha256sums=('bd5358d8f323d3c2c2f0733364ee4ea55f551dd86ba0be2a76846210b60897fc')
35_get_app_dir() {
36 find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
37}
38_ensure_local_nvm() {
39 local NVM_DIR="${srcdir}/.nvm"
40 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
41 nvm install "${_nodeversion}"
42 nvm use "${_nodeversion}"
43}
44_get_project_dir() {
45 local d
46 while IFS= read -r d; do
47 find "$d" -name "package.json" ! -path "*/node_modules/*" 2>/dev/null | grep -q . && { echo "$d"; return; }
48 done < <(find "${srcdir}" -maxdepth 1 -mindepth 1 -type d ! -name '.*')
49}
50_set_build_env() {
51 export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
52 export ELECTRON_OVERRIDE_DIST_PATH="${ELECTRON_DIST}"
53 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
54 export ELECTRON_BUILDER_OFFLINE=true
55 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/^v//')"
56 export HOME="${srcdir}/.home"
57 export XDG_CACHE_HOME="${HOME}/.cache"
58 export XDG_CONFIG_HOME="${HOME}/.config"
59 export XDG_DATA_HOME="${HOME}/.local/share"
60 export XDG_STATE_HOME="${HOME}/.local/state"
61 export PNPM_HOME="${HOME}/.pnpm/bin"
62 export pnpm_config_cache_dir="${HOME}/.pnpm_cache"
63 export pnpm_config_store_dir="${HOME}/.pnpm_store"
64 export pnpm_config_global_dir="${HOME}/.pnpm/global"
65 export pnpm_config_state_dir="${HOME}/.pnpm/state"
66 export pnpm_config_node_linker=hoisted
67 export pnpm_config_minimum_release_age=0
68 export pnpm_config_update_notifier=false
69 export COREPACK_NPM_REGISTRY="${COREPACK_NPM_REGISTRY:-${NPM_CONFIG_REGISTRY:-https://registry.npmjs.org}}"
70 export COREPACK_HOME="${HOME}/.corepack"
71 export GOPATH="${HOME}/go"
72 export GOCACHE="${HOME}/go-build"
73 export GOENV="${HOME}/go/env"
74 export XDG_CONFIG_HOME="${HOME}/.config"
75 export XDG_CACHE_HOME="${HOME}/.cache"
76 export CGO_CPPFLAGS="${CPPFLAGS}"
77 export CGO_CFLAGS="${CFLAGS}"
78 export CGO_CXXFLAGS="${CXXFLAGS}"
79 export CGO_LDFLAGS="${LDFLAGS}"
80 export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw"
81 export GOTOOLCHAIN=local
82 export GOWORK=off
83 mkdir -p "${HOME}" "${PNPM_HOME}" "${pnpm_config_cache_dir}" "${pnpm_config_store_dir}" "${pnpm_config_global_dir}" "${pnpm_config_state_dir}" \
84 "${COREPACK_HOME}" "${GOCACHE}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "$(dirname "${GOENV}")"
85 : > "${GOENV}"
86 export PATH="${PNPM_HOME}:${PATH}"
87 local _pnpmver=""
88 local _pkgjson="$(_get_project_dir)/package.json"
89 if [ -f "${_pkgjson}" ]; then
90 _pnpmver="$(grep -o '"packageManager"[^,]*' "${_pkgjson}" 2>/dev/null | grep -oE 'pnpm@[^"+]+' | head -n1 | sed 's/^pnpm@//')"
91 if [ -z "${_pnpmver}" ]; then
92 _pnpmver="$(grep -oE '"pnpm"[[:space:]]*:[[:space:]]*"[^"]+"' "${_pkgjson}" 2>/dev/null | grep -oE '[0-9][0-9.]*' | head -n1)"
93 fi
94 fi
95 if [ -n "${_pnpmver}" ]; then
96 npm install -g "pnpm@${_pnpmver}" --prefix "${HOME}/.pnpm" \
97 --registry "${COREPACK_NPM_REGISTRY}"
98 fi
99}
100_get_electron_version() {
101 _elec_ver=$(find "$(_get_project_dir)" -name "package.json" ! -path "*/node_modules/*" -print \
102 | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null \
103 | grep -v '^$' | sed 's/^[^0-9]*//' | head -1)
104 [[ -z "${_elec_ver}" ]] && return 1
105 echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
106}
107prepare() {
108 cd "${srcdir}"
109 if [[ ! -d "${srcdir}/${pkgname}-${pkgver}" ]]; then
110 git clone \
111 --depth 1 \
112 --branch "v${pkgver}" \
113 "${_ghurl}" \
114 "${pkgname}-${pkgver}"
115 fi
116 cd "$(_get_project_dir)/app"
117 _get_electron_version
118 sed -i -e "
119 s/@electronversion@/${_electronversion}/g
120 s/@appname@/${pkgname}/g
121 s/@runname@/app/g
122 s/@cfgdirname@/SiYuan-Electron/g
123 " "${srcdir}/${pkgname}.sh"
124 gendesk -q -f -n \
125 --pkgname="${pkgname}" \
126 --pkgdesc="${pkgdesc}" \
127 --categories="Office" \
128 --name="${pkgname}" \
129 --exec="${pkgname} %U" \
130 --custom="Name[zh_CN]=思源笔记"
131 _ensure_local_nvm
132 _set_build_env
133 sed -i -e "
134 /build:mobile/d
135 s/\"electron\": \"\([^\"]*\)\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g
136 " package.json
137 export NODE_ENV=development
138 pnpm install --no-frozen-lockfile
139}
140build() {
141 cd "$(_get_project_dir)/app"
142 _ensure_local_nvm
143 _set_build_env
144 export NODE_ENV=production
145 pnpm run build
146 cd "$(_get_project_dir)/kernel"
147 case "${CARCH}" in
148 aarch64)
149 _CFG_FILE=electron-builder-linux-arm64.yml
150 _KERNEL_DIR=kernel-linux-arm64
151 ;;
152 x86_64)
153 _CFG_FILE=electron-builder-linux.yml
154 _KERNEL_DIR=kernel-linux
155 ;;
156 esac
157 go build --tags fts5 -o "../app/${_KERNEL_DIR}/SiYuan-Kernel" -v -ldflags "-s -w -X github.com/siyuan-note/siyuan/kernel/util.Mode=prod"
158 cd "$(_get_project_dir)/app"
159 pnpm -c exec "electron-builder --linux dir -c.electronDist=${ELECTRON_DIST} --config=${_CFG_FILE} "
160}
161package() {
162 install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
163 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
164 local _app_dir="$(_get_app_dir)"
165 cp -a "${_app_dir}/resources/." "${pkgdir}/usr/lib/${pkgname}/"
166 rm -rf "${pkgdir}/usr/lib/${pkgname}/default_app.asar"
167 local _src="$(_get_project_dir)"
168 _icon_sizes=(16x16 32x32 48x48 64x64 128x128 256x256 512x512)
169 for _icons in "${_icon_sizes[@]}";do
170 install -Dm644 "${_src}/app/src/assets/icon/${_icons}.png" \
171 "${pkgdir}/usr/share/icons/hicolor/${_icons}/apps/${pkgname%-git}.png"
172 done
173 install -Dm644 "${_src}/app/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
174}

Changes since previous scan

--- PKGBUILD @ 2026-09-22 09:37
+++ PKGBUILD @ 2026-09-29 05:22
@@ -1,7 +1,7 @@
# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
# Contributor: Xiaozhu1337 <nihaoaheheda@gmail.com>
pkgname=siyuan
-pkgver=3.8.5
+pkgver=3.8.6
_electronversion=44
_nodeversion=24
pkgrel=1
@@ -23,7 +23,6 @@
)
makedepends=(
'gendesk'
- 'curl'
'nvm'
'npm'
'go'
@@ -32,7 +31,7 @@
'jq'
)
source=("${pkgname}.sh")
-sha256sums=('a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
+sha256sums=('bd5358d8f323d3c2c2f0733364ee4ea55f551dd86ba0be2a76846210b60897fc')
_get_app_dir() {
find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
}
@@ -42,54 +41,38 @@
nvm install "${_nodeversion}"
nvm use "${_nodeversion}"
}
+_get_project_dir() {
+ local d
+ while IFS= read -r d; do
+ find "$d" -name "package.json" ! -path "*/node_modules/*" 2>/dev/null | grep -q . && { echo "$d"; return; }
+ done < <(find "${srcdir}" -maxdepth 1 -mindepth 1 -type d ! -name '.*')
+}
_set_build_env() {
export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
export ELECTRON_OVERRIDE_DIST_PATH="${ELECTRON_DIST}"
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
- _ev="$(electron${_electronversion} -v)"
- export SYSTEM_ELECTRON_VERSION="${_ev#v}"
- export HOME="${srcdir}/.electron-gyp"
- mkdir -p "${HOME}"
- export XDG_CACHE_HOME="${srcdir}/.cache"
- export XDG_CONFIG_HOME="${srcdir}/.config"
- export XDG_DATA_HOME="${srcdir}/.local/share"
- export XDG_STATE_HOME="${srcdir}/.local/state"
- export PNPM_CACHE_DIR="${srcdir}/.pnpm_cache"
- export PNPM_STORE_DIR="${srcdir}/.pnpm_store"
- export PNPM_GLOBAL_DIR="${srcdir}/.pnpm/global"
- export PNPM_GLOBAL_BIN_DIR="${srcdir}/.pnpm/bin"
- export PNPM_STATE_DIR="${srcdir}/.pnpm/state"
- export PNPM_MINIMUM_RELEASE_AGE=0
- export PNPM_NODE_LINKER=hoisted
- export PNPM_FETCH_RETRIES=3
- export PNPM_FETCH_RETRY_MAXTIMEOUT=10000
- export PNPM_UPDATE_NOTIFIER=false
- export PNPM_NO_COLOR=true
- export PNPM_NO_PROGRESS=true
- export pnpm_config_platform=linux
- export pnpm_config_arch="${CARCH}"
- export NODE_OPTIONS="--max-old-space-size=4096"
- export npm_config_node_options="--max-old-space-size=4096"
- mkdir -p "${PNPM_CACHE_DIR}" "${PNPM_STORE_DIR}" "${PNPM_GLOBAL_DIR}" "${PNPM_GLOBAL_BIN_DIR}" "${PNPM_STATE_DIR}"
- local _pnpmver="${_pnpmversion}"
- if [[ -z "${_pnpmver}" ]]; then
- _pnpmver="$(node -p "const pm=require('./package.json').packageManager; pm && pm.startsWith('pnpm@') ? pm.split('@')[1] : ''" 2>/dev/null)"
- fi
- if [[ -n "${_pnpmver}" ]]; then
- export COREPACK_HOME="${srcdir}/.corepack"
- install -dm755 "${srcdir}/.bin"
- corepack enable --install-directory "${srcdir}/.bin"
- export PATH="${srcdir}/.bin:${PATH}"
- corepack prepare "pnpm@${_pnpmver}" --activate
- fi
- export GOPATH="${srcdir}/go"
- export GOMODCACHE="${GOPATH}/pkg/mod"
- export GOBIN="${GOPATH}/bin"
- export GOCACHE="${srcdir}/go-build"
- export GOENV="${srcdir}/go/env"
- export XDG_CONFIG_HOME="${srcdir}/.config"
- export XDG_CACHE_HOME="${srcdir}/.cache"
- export CGO_ENABLED=1
+ export ELECTRON_BUILDER_OFFLINE=true
+ export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/^v//')"
+ export HOME="${srcdir}/.home"
+ export XDG_CACHE_HOME="${HOME}/.cache"
+ export XDG_CONFIG_HOME="${HOME}/.config"
+ export XDG_DATA_HOME="${HOME}/.local/share"
+ export XDG_STATE_HOME="${HOME}/.local/state"
+ export PNPM_HOME="${HOME}/.pnpm/bin"
+ export pnpm_config_cache_dir="${HOME}/.pnpm_cache"
+ export pnpm_config_store_dir="${HOME}/.pnpm_store"
+ export pnpm_config_global_dir="${HOME}/.pnpm/global"
+ export pnpm_config_state_dir="${HOME}/.pnpm/state"
+ export pnpm_config_node_linker=hoisted
+ export pnpm_config_minimum_release_age=0
+ export pnpm_config_update_notifier=false
+ export COREPACK_NPM_REGISTRY="${COREPACK_NPM_REGISTRY:-${NPM_CONFIG_REGISTRY:-https://registry.npmjs.org}}"
+ export COREPACK_HOME="${HOME}/.corepack"
+ export GOPATH="${HOME}/go"
+ export GOCACHE="${HOME}/go-build"
+ export GOENV="${HOME}/go/env"
+ export XDG_CONFIG_HOME="${HOME}/.config"
+ export XDG_CACHE_HOME="${HOME}/.cache"
export CGO_CPPFLAGS="${CPPFLAGS}"
export CGO_CFLAGS="${CFLAGS}"
export CGO_CXXFLAGS="${CXXFLAGS}"
@@ -97,14 +80,29 @@
export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw"
export GOTOOLCHAIN=local
export GOWORK=off
- mkdir -p "${GOMODCACHE}" "${GOBIN}" "${GOCACHE}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "$(dirname "${GOENV}")"
- : > "${GOENV}"
+ mkdir -p "${HOME}" "${PNPM_HOME}" "${pnpm_config_cache_dir}" "${pnpm_config_store_dir}" "${pnpm_config_global_dir}" "${pnpm_config_state_dir}" \
+ "${COREPACK_HOME}" "${GOCACHE}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "$(dirname "${GOENV}")"
+ : > "${GOENV}"
+ export PATH="${PNPM_HOME}:${PATH}"
+ local _pnpmver=""
+ local _pkgjson="$(_get_project_dir)/package.json"
+ if [ -f "${_pkgjson}" ]; then
+ _pnpmver="$(grep -o '"packageManager"[^,]*' "${_pkgjson}" 2>/dev/null | grep -oE 'pnpm@[^"+]+' | head -n1 | sed 's/^pnpm@//')"
+ if [ -z "${_pnpmver}" ]; then
+ _pnpmver="$(grep -oE '"pnpm"[[:space:]]*:[[:space:]]*"[^"]+"' "${_pkgjson}" 2>/dev/null | grep -oE '[0-9][0-9.]*' | head -n1)"
+ fi
+ fi
+ if [ -n "${_pnpmver}" ]; then
+ npm install -g "pnpm@${_pnpmver}" --prefix "${HOME}/.pnpm" \
+ --registry "${COREPACK_NPM_REGISTRY}"
+ fi
}
_get_electron_version() {
- _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
- -exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
- [[ -z "${_elec_ver}" ]] && return 1
- echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
+ _elec_ver=$(find "$(_get_project_dir)" -name "package.json" ! -path "*/node_modules/*" -print \
+ | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null \
+ | grep -v '^$' | sed 's/^[^0-9]*//' | head -1)
+ [[ -z "${_elec_ver}" ]] && return 1
+ echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
}
prepare() {
cd "${srcdir}"
@@ -115,7 +113,7 @@
"${_ghurl}" \
"${pkgname}-${pkgver}"
fi
- cd "${srcdir}/${pkgname}-${pkgver}/app"
+ cd "$(_get_project_dir)/app"
_get_electron_version
sed -i -e "
s/@electronversion@/${_electronversion}/g
@@ -136,14 +134,16 @@
/build:mobile/d
s/\"electron\": \"\([^\"]*\)\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g
" package.json
- NODE_ENV=development pnpm install --no-frozen-lockfile
+ export NODE_ENV=development
+ pnpm install --no-frozen-lockfile
}
build() {
+ cd "$(_get_project_dir)/app"
_ensure_local_nvm
_set_build_env
- cd "${srcdir}/${pkgname}-${pkgver}/app"
- NODE_ENV=production pnpm run build
- cd "${srcdir}/${pkgname}-${pkgver}/kernel"
+ export NODE_ENV=production
+ pnpm run build
+ cd "$(_get_project_dir)/kernel"
case "${CARCH}" in
aarch64)
_CFG_FILE=electron-builder-linux-arm64.yml
@@ -155,16 +155,20 @@
;;
esac
go build --tags fts5 -o "../app/${_KERNEL_DIR}/SiYuan-Kernel" -v -ldflags "-s -w -X github.com/siyuan-note/siyuan/kernel/util.Mode=prod"
- cd "${srcdir}/${pkgname}-${pkgver}/app"
- NODE_ENV=production pnpm -c exec "electron-builder --linux dir -c.electronDist=${ELECTRON_DIST} --config=${_CFG_FILE} "
+ cd "$(_get_project_dir)/app"
+ pnpm -c exec "electron-builder --linux dir -c.electronDist=${ELECTRON_DIST} --config=${_CFG_FILE} "
}
package() {
install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
- local _app_dir=$(_get_app_dir)
+ local _app_dir="$(_get_app_dir)"
cp -a "${_app_dir}/resources/." "${pkgdir}/usr/lib/${pkgname}/"
rm -rf "${pkgdir}/usr/lib/${pkgname}/default_app.asar"
- install -Dm644 "${srcdir}/${pkgname}-${pkgver}/app/src/assets/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
- install -Dm644 "${srcdir}/${pkgname}-${pkgver}/app/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
+ local _src="$(_get_project_dir)"
+ _icon_sizes=(16x16 32x32 48x48 64x64 128x128 256x256 512x512)
+ for _icons in "${_icon_sizes[@]}";do
+ install -Dm644 "${_src}/app/src/assets/icon/${_icons}.png" \
+ "${pkgdir}/usr/share/icons/hicolor/${_icons}/apps/${pkgname%-git}.png"
+ done
+ install -Dm644 "${_src}/app/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
}
-

Scan history

Scanned at (UTC)SeverityRules
2026-09-29 05:22:53 Low 1
2026-09-22 09:37:47 Clean 0
2026-09-18 11:28:26 Clean 0
2026-09-07 09:14:05 Clean 0
2026-08-31 03:44:41 Clean 0
2026-08-19 03:41:13 Clean 0
2026-08-13 01:25:20 Clean 0
2026-07-21 07:16:26 Clean 0
2026-07-14 05:43:49 Clean 0
2026-07-06 09:20:52 Clean 0
2026-07-01 08:40:56 Clean 0
2026-06-18 16:11:54 Clean 0

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion