feat: create autonomous Nivora package repository

Maintain a validated cross-distribution package catalog.
Automate upstream updates, isolated builds, diagnostics, and direct publication.
Build the official GitHub Desktop sources for Linux with working OAuth.
This commit is contained in:
Александр
2026-07-25 00:49:32 +10:00
commit f405ae2bcf
168 changed files with 8483 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
set -euo pipefail
package_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
repo_root="$(cd "${package_dir}/.." && pwd)"
exec "${repo_root}/tools/package_updates.sh" check "$(basename "$package_dir")"
+19
View File
@@ -0,0 +1,19 @@
Сведения о лицензии пакета OpenCode
Лицензия: MIT.
Исходный проект: https://github.com/anomalyco/opencode
Официальная страница загрузки: https://opencode.ai/ru/download
Нюансы пакета:
- Пакет перепаковывает официальный Linux deb-артефакт OpenCode Desktop из релизов проекта.
- В пакет входит десктопное Electron-приложение OpenCode; терминальная установка через `curl | bash`, npm, bun или Homebrew не используется.
- Код OpenCode распространяется на условиях лицензии MIT.
- Лицензия MIT разрешает использование, копирование, изменение и распространение при сохранении уведомления об авторских правах и текста лицензии.
- Для работы с внешними AI-провайдерами могут потребоваться отдельные учетные записи, ключи API или подписки. Эти сервисы и их условия использования не входят в пакет.
- Данные пользователя, настройки, авторизация и рабочие каталоги создаются приложением после запуска и не поставляются внутри пакета.
- Пакет добавляет alias `opencode-desktop`, чтобы запуск desktop-приложения не конфликтовал по смыслу с терминальным OpenCode CLI.
- Alias `open-code` сохранен для совместимости с прежним upstream-именем Linux-пакета.
- Код и ресурсы приложения устанавливаются без изменений; alias `opencode-desktop` напрямую запускает upstream-бинарник.
Полный официальный текст лицензии MIT:
https://opensource.org/license/mit
+94
View File
@@ -0,0 +1,94 @@
name='opencode'
version=1.18.4
release=1
summary='Open source AI coding agent desktop app'
summary_ru='Десктопное приложение AI-агента OpenCode'
group='Development/Tools'
desc='OpenCode is an open source AI coding agent for terminal, IDE and desktop workflows with support for multiple model providers.'
desc_ru='OpenCode — открытый AI-агент для работы с кодом в терминале, IDE и десктопном приложении с поддержкой разных провайдеров моделей.'
homepage='https://opencode.ai'
maintainer='Anomaly Innovations Inc. <hello@opencode.ai>'
architectures=('amd64' 'arm64')
license=('MIT')
provides=()
replaces=('opencode')
conflicts=()
auto_reqprov_method="dirty"
auto_req=0
auto_prov=0
deps=()
deps_debian=('libgtk-3-0' 'libnotify4' 'libnss3' 'libxss1' 'libxtst6' 'xdg-utils' 'libatspi2.0-0' 'libuuid1' 'libsecret-1-0')
deps_ubuntu=("${deps_debian[@]}")
deps_fedora=('gtk3' 'libnotify' 'nss' 'libXScrnSaver' 'libXtst' 'xdg-utils' 'at-spi2-core' 'libuuid' 'libsecret')
deps_arch=('gtk3' 'libnotify' 'nss' 'libxss' 'libxtst' 'xdg-utils' 'at-spi2-core' 'libutil-linux' 'libsecret')
deps_opensuse=('gtk3' 'libnotify4' 'mozilla-nss' 'libXScrnSaver1' 'libXtst6' 'xdg-utils' 'at-spi2-core' 'libuuid1' 'libsecret-1-0')
deps_altlinux=('libgtk+3' 'libnotify' 'libnss' 'libXScrnSaver' 'libXtst' 'xdg-utils' 'libat-spi2-core' 'libuuid' 'libsecret')
opt_deps=()
opt_deps_debian=('libappindicator3-1' 'gnome-keyring')
opt_deps_ubuntu=("${opt_deps_debian[@]}")
opt_deps_fedora=('libappindicator-gtk3' 'gnome-keyring')
opt_deps_arch=('libappindicator-gtk3' 'gnome-keyring')
opt_deps_opensuse=('libappindicator3-1' 'gnome-keyring')
opt_deps_altlinux=('libappindicator-gtk3' 'gnome-keyring')
build_deps=('binutils')
sources=(
"https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-desktop-linux-amd64.deb?~archive=false&~name=opencode.deb"
'local:///LICENSE'
)
sources_arm64=(
"https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-desktop-linux-arm64.deb?~archive=false&~name=opencode.deb"
'local:///LICENSE'
)
checksums=(
'sha256:a67bc47a98ded10275e7a8f32fa3e16480b55996cd52232da91450432b4d6599'
'sha256:5c888de95824a9a5752d1ee3de95e80200eb057eec4078df892a95ac34333888'
)
checksums_arm64=(
'sha256:09bd2be9951ba5a7a333db818de49524edc6c98fedcca20d13a4a0f1c6c5b9e1'
'sha256:5c888de95824a9a5752d1ee3de95e80200eb057eec4078df892a95ac34333888'
)
scripts=(
['postinstall']='postinstall.sh'
['postremove']='postremove.sh'
)
package() {
cd "${srcdir}"
mkdir -p "${srcdir}/extracted"
ar x opencode.deb
tar -xf data.tar.* -C "${srcdir}/extracted"
install -dm755 "${pkgdir}/opt"
cp -a "${srcdir}/extracted/opt/OpenCode" "${pkgdir}/opt/"
install -dm755 "${pkgdir}/usr/share"
cp -a "${srcdir}/extracted/usr/share/applications" "${pkgdir}/usr/share/"
cp -a "${srcdir}/extracted/usr/share/icons" "${pkgdir}/usr/share/"
install -dm755 "${pkgdir}/usr/bin"
ln -sfn /opt/OpenCode/ai.opencode.desktop "${pkgdir}/usr/bin/opencode-desktop"
install-license "${srcdir}/LICENSE" "opencode/LICENSE.nivora"
}
files() {
files-find-binary
files-find-desktop
files-find-license
files-find \
"/opt/OpenCode/**/*" \
"/usr/share/icons/hicolor/*/apps/ai.opencode.desktop.png"
}
+35
View File
@@ -0,0 +1,35 @@
#!/bin/bash
set -euo pipefail
optional_refresh() {
local label=$1
shift
if ! "$@"; then
echo "Предупреждение: не удалось обновить ${label}." >&2
fi
}
sandbox=/opt/OpenCode/chrome-sandbox
if [[ ! -f "$sandbox" ]]; then
echo "Ошибка: не найден Electron sandbox: ${sandbox}" >&2
exit 1
fi
if [[ -L /proc/self/ns/user ]] && command -v unshare >/dev/null 2>&1 \
&& unshare --user true 2>/dev/null; then
chmod 0755 "$sandbox"
else
chmod 4755 "$sandbox"
fi
if command -v update-desktop-database >/dev/null 2>&1; then
optional_refresh "desktop-базу" update-desktop-database -q /usr/share/applications
fi
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
optional_refresh "кэш иконок" gtk-update-icon-cache -f -q /usr/share/icons/hicolor
fi
if command -v kbuildsycoca6 >/dev/null 2>&1; then
optional_refresh "кэш KDE" kbuildsycoca6 --noincremental
elif command -v kbuildsycoca5 >/dev/null 2>&1; then
optional_refresh "кэш KDE" kbuildsycoca5 --noincremental
fi
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
set -euo pipefail
optional_refresh() {
local label=$1
shift
if ! "$@"; then
echo "Предупреждение: не удалось обновить ${label}." >&2
fi
}
if command -v update-desktop-database >/dev/null 2>&1; then
optional_refresh "desktop-базу" update-desktop-database -q /usr/share/applications
fi
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
optional_refresh "кэш иконок" gtk-update-icon-cache -f -q /usr/share/icons/hicolor
fi
if command -v kbuildsycoca6 >/dev/null 2>&1; then
optional_refresh "кэш KDE" kbuildsycoca6 --noincremental
elif command -v kbuildsycoca5 >/dev/null 2>&1; then
optional_refresh "кэш KDE" kbuildsycoca5 --noincremental
fi
+1
View File
@@ -0,0 +1 @@
include = "../stapler-repo.toml"