Compare commits

..

7 Commits

9 changed files with 82 additions and 69 deletions

@ -21,7 +21,7 @@ build: check-no-root $(BIN)
export CGO_ENABLED := 0
$(BIN):
go build -ldflags="-X 'gitea.plemya-x.ru/xpamych/ALR/internal/config.Version=$(GIT_VERSION)'" -o $@
go build -ldflags="-X 'gitea.plemya-x.ru/Plemya-x/ALR/internal/config.Version=$(GIT_VERSION)'" -o $@
check-no-root:
@if [[ "$$(whoami)" == 'root' ]]; then \

@ -7,9 +7,9 @@
# ALR (Any Linux Repository)
ALR - это независимая от дистрибутива система сборки для Linux, аналогичная [AUR](https://wiki.archlinux.org/title/Arch_User_Repository). В настоящее время она находится в стадии бета-тестирования. Исправлено большинство основных ошибок и добавлено большинство важных функций. alr готов к общему использованию, но все еще может время от времени ломаться или заменяться.
ALR - это независимая от дистрибутива система сборки для Linux (форк [LURE](https://github.com/lure-sh/lure), аналогичная [AUR](https://wiki.archlinux.org/title/Arch_User_Repository). В настоящее время она находится в стадии бета-тестирования. Исправлено большинство основных ошибок и добавлено большинство важных функций. ALR готов к общему использованию, но все еще может время от времени ломаться или изменяться.
ALR написан на чистом Go и после сборки не имеет зависимостей. Единственное, для повышения привилегий ALR требуется команда, такая как `sudo`, `doas` и т.д., а также поддерживаемый менеджер пакетов. В настоящее время ALR поддерживает `apt`, `pacman`, `apk`, `dnf`, `yum`, and `zypper`. Если в вашей системе существует поддерживаемый менеджер пакетов, он будет обнаружен и использован автоматически.
ALR написан на чистом Go и после сборки не имеет зависимостей. Для повышения привилегий ALR требуется команда, такая как `sudo`, `doas` и т.д., а также поддерживаемый менеджер пакетов. В настоящее время ALR поддерживает `apt`, `apt-get` `pacman`, `apk`, `dnf`, `yum`, and `zypper`. Если в вашей системе используется поддерживаемый менеджер пакетов, то он будет обнаружен и использован автоматически.
---
@ -23,14 +23,14 @@ ALR написан на чистом Go и после сборки не имее
curl -fsSL plemya-x.ru/alr/install.sh | bash
```
**ВАЖНО**: При этом скрипт будет загружен и запущен с <https://gitea.plemya-x.ru/Plemya-x/ALR/src/branch/master/scripts/install.sh>. Пожалуйста, просматривайте любые скрипты, которые вы скачиваете из Интернета (включая этот), прежде чем запускать их.
**ВАЖНО**: При этом скрипт будет загружен и запущен с <https://plemya-x.ru/alr/install.sh>. Пожалуйста, просматривайте любые скрипты, которые вы скачиваете из Интернета (включая этот), прежде чем запускать их.
### Сборка из исходного кода
Чтобы собрать ALR из исходного кода, вам понадобится версия Go 1.18 или новее. Как только Go будет установлен, клонируйте это репозиторий и запустите:
```shell
make build
make build -B
sudo make install
```
@ -44,7 +44,7 @@ ALR был создан потому, что упаковка программн
## Документация
Документация по всем этим вопросам находится в [Wiki](https://gitea.plemya-x.ru/xpamych/ALR/wiki/Home).
Документация находится в [Wiki](https://disc.plemya-x.ru/c/alr/wiki-alr).
---
@ -52,17 +52,15 @@ ALR был создан потому, что упаковка программн
Репозитории alr - это git-хранилища, которые содержат каталог для каждого пакета с файлом `alr.sh` внутри. Файл `alr.sh` содержит все инструкции по сборке пакета и информацию о нем. Скрипты `alr.sh` аналогичны скриптам Aur PKGBUILD.
Например, репозиторий [Plemya-x/xpamych-alr-repo](https://gitea.plemya-x.ru/Plemya-x/xpamych-alr-repo.git) можно подключить так:
Например, репозиторий [Plemya-x/alr-repo](https://gitea.plemya-x.ru/Plemya-x/alr-repo.git) можно подключить так:
```
alr addrepo --name xpamych-alr-repo --url https://gitea.plemya-x.ru/Plemya-x/xpamych-alr-repo.git
alr addrepo --name alr-repo --url https://gitea.plemya-x.ru/Plemya-x/alr-repo.git
```
---
## Соцсети
VK - https://vk.com/plemya_kh
Discord - https://discord.com/channels/817759634105827358/1261631565084233749
Telegram - https://t.me/plemyakh
## Спасибы
@ -75,3 +73,6 @@ Telegram - https://t.me/plemyakh
- <https://github.com/goreleaser/nfpm>
- <https://github.com/charmbracelet/bubbletea>
- <https://gitlab.com/cznic/sqlite>
Благодарим за активное участие в развитии проекта:
- Maks1mS <maxim@slipenko.com>

@ -11,7 +11,7 @@
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
<text x="33.5" y="14">coverage</text>
<text x="86" y="15" fill="#010101" fill-opacity=".3">19.6%</text>
<text x="86" y="14">19.6%</text>
<text x="86" y="15" fill="#010101" fill-opacity=".3">19.5%</text>
<text x="86" y="14">19.5%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 926 B

After

Width:  |  Height:  |  Size: 926 B

@ -50,9 +50,9 @@ func BuildCmd() *cli.Command {
Usage: gotext.Get("Path to the build script"),
},
&cli.StringFlag{
Name: "script-package",
Aliases: []string{"sp"},
Usage: gotext.Get("Specify package in script (for multi package script only)"),
Name: "subpackage",
Aliases: []string{"sb"},
Usage: gotext.Get("Specify subpackage in script (for multi package script only)"),
},
&cli.StringFlag{
Name: "package",

@ -119,6 +119,11 @@ func InstallCmd() *cli.Command {
BashComplete: func(c *cli.Context) {
cfg := config.New()
db := database.New(cfg)
err := db.Init(c.Context)
if err != nil {
slog.Error(gotext.Get("Error initialization database"), "err", err)
os.Exit(1)
}
result, err := db.GetPkgs(c.Context, "true")
if err != nil {
slog.Error(gotext.Get("Error getting packages"), "err", err)

@ -91,7 +91,7 @@ func TestDownloadWithoutCache(t *testing.T) {
},
{
name: "git download",
path: "git+%s/git-downloader/git/Plemya-x/xpamych-alr-repo",
path: "git+%s/git-downloader/git/Plemya-x/alr-repo",
expected: func(t *testing.T, err error, tmpdir string) {
assert.NoError(t, err)

@ -18,7 +18,7 @@ msgid "Path to the build script"
msgstr ""
#: build.go:55
msgid "Specify package in script (for multi package script only)"
msgid "Specify subpackage in script (for multi package script only)"
msgstr ""
#: build.go:60
@ -158,15 +158,15 @@ msgstr ""
msgid "Command install expected at least 1 argument, got %d"
msgstr ""
#: install.go:146
#: install.go:151
msgid "Remove an installed package"
msgstr ""
#: install.go:151
#: install.go:156
msgid "Command remove expected at least 1 argument, got %d"
msgstr ""
#: install.go:163
#: install.go:168
msgid "Error removing packages"
msgstr ""
@ -357,77 +357,77 @@ msgstr ""
msgid "Error while running app"
msgstr ""
#: pkg/build/build.go:153
#: pkg/build/build.go:156
msgid "Failed to prompt user to view build script"
msgstr ""
#: pkg/build/build.go:157
#: pkg/build/build.go:160
msgid "Building package"
msgstr ""
#: pkg/build/build.go:228
#: pkg/build/build.go:231
msgid "Downloading sources"
msgstr ""
#: pkg/build/build.go:250
#: pkg/build/build.go:253
msgid "Building package metadata"
msgstr ""
#: pkg/build/build.go:272
#: pkg/build/build.go:275
msgid "Compressing package"
msgstr ""
#: pkg/build/build.go:426
#: pkg/build/build.go:434
msgid ""
"Your system's CPU architecture doesn't match this package. Do you want to "
"build anyway?"
msgstr ""
#: pkg/build/build.go:440
#: pkg/build/build.go:448
msgid "This package is already installed"
msgstr ""
#: pkg/build/build.go:464
#: pkg/build/build.go:472
msgid "Installing build dependencies"
msgstr ""
#: pkg/build/build.go:505
#: pkg/build/build.go:513
msgid "Installing dependencies"
msgstr ""
#: pkg/build/build.go:540
#: pkg/build/build.go:548
msgid "The checksums array must be the same length as sources"
msgstr ""
#: pkg/build/build.go:591
#: pkg/build/build.go:599
msgid "Would you like to remove the build dependencies?"
msgstr ""
#: pkg/build/build.go:654
#: pkg/build/build.go:662
msgid "Executing prepare()"
msgstr ""
#: pkg/build/build.go:664
#: pkg/build/build.go:672
msgid "Executing build()"
msgstr ""
#: pkg/build/build.go:694 pkg/build/build.go:714
#: pkg/build/build.go:702 pkg/build/build.go:722
msgid "Executing %s()"
msgstr ""
#: pkg/build/build.go:773
#: pkg/build/build.go:781
msgid "Error installing native packages"
msgstr ""
#: pkg/build/build.go:797
#: pkg/build/build.go:805
msgid "Error installing package"
msgstr ""
#: pkg/build/build.go:857
#: pkg/build/build.go:864
msgid "AutoProv is not implemented for this package format, so it's skipped"
msgstr ""
#: pkg/build/build.go:868
#: pkg/build/build.go:875
msgid "AutoReq is not implemented for this package format, so it's skipped"
msgstr ""

@ -5,15 +5,15 @@
msgid ""
msgstr ""
"Project-Id-Version: unnamed project\n"
"PO-Revision-Date: 2025-02-27 14:27+0300\n"
"PO-Revision-Date: 2025-03-09 17:31+0300\n"
"Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Gtranslator 47.1\n"
#: build.go:44
@ -25,8 +25,8 @@ msgid "Path to the build script"
msgstr "Путь к скрипту сборки"
#: build.go:55
msgid "Specify package in script (for multi package script only)"
msgstr "Укажите пакет в скрипте (только для многопакетного скрипта)"
msgid "Specify subpackage in script (for multi package script only)"
msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)"
#: build.go:60
msgid "Name of the package to build and its repo (example: default/go-bin)"
@ -165,15 +165,15 @@ msgstr "Установить новый пакет"
msgid "Command install expected at least 1 argument, got %d"
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d"
#: install.go:146
#: install.go:151
msgid "Remove an installed package"
msgstr "Удалить установленный пакет"
#: install.go:151
#: install.go:156
msgid "Command remove expected at least 1 argument, got %d"
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
#: install.go:163
#: install.go:168
msgid "Error removing packages"
msgstr "Ошибка при удалении пакетов"
@ -371,27 +371,27 @@ msgstr "Показать справку"
msgid "Error while running app"
msgstr "Ошибка при запуске приложения"
#: pkg/build/build.go:153
#: pkg/build/build.go:156
msgid "Failed to prompt user to view build script"
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
#: pkg/build/build.go:157
#: pkg/build/build.go:160
msgid "Building package"
msgstr "Сборка пакета"
#: pkg/build/build.go:228
#: pkg/build/build.go:231
msgid "Downloading sources"
msgstr "Скачивание источников"
#: pkg/build/build.go:250
#: pkg/build/build.go:253
msgid "Building package metadata"
msgstr "Сборка метаданных пакета"
#: pkg/build/build.go:272
#: pkg/build/build.go:275
msgid "Compressing package"
msgstr "Сжатие пакета"
#: pkg/build/build.go:426
#: pkg/build/build.go:434
msgid ""
"Your system's CPU architecture doesn't match this package. Do you want to "
"build anyway?"
@ -399,52 +399,52 @@ msgstr ""
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
"равно хотите выполнить сборку?"
#: pkg/build/build.go:440
#: pkg/build/build.go:448
msgid "This package is already installed"
msgstr "Этот пакет уже установлен"
#: pkg/build/build.go:464
#: pkg/build/build.go:472
msgid "Installing build dependencies"
msgstr "Установка зависимостей сборки"
#: pkg/build/build.go:505
#: pkg/build/build.go:513
msgid "Installing dependencies"
msgstr "Установка зависимостей"
#: pkg/build/build.go:540
#: pkg/build/build.go:548
msgid "The checksums array must be the same length as sources"
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
#: pkg/build/build.go:591
#: pkg/build/build.go:599
msgid "Would you like to remove the build dependencies?"
msgstr "Хотели бы вы удалить зависимости сборки?"
#: pkg/build/build.go:654
#: pkg/build/build.go:662
msgid "Executing prepare()"
msgstr "Исполнение prepare()"
#: pkg/build/build.go:664
#: pkg/build/build.go:672
msgid "Executing build()"
msgstr "Исполнение build()"
#: pkg/build/build.go:694 pkg/build/build.go:714
#: pkg/build/build.go:702 pkg/build/build.go:722
msgid "Executing %s()"
msgstr "Исполнение %s()"
#: pkg/build/build.go:773
#: pkg/build/build.go:781
msgid "Error installing native packages"
msgstr "Ошибка при установке нативных пакетов"
#: pkg/build/build.go:797
#: pkg/build/build.go:805
msgid "Error installing package"
msgstr "Ошибка при установке пакета"
#: pkg/build/build.go:857
#: pkg/build/build.go:864
msgid "AutoProv is not implemented for this package format, so it's skipped"
msgstr ""
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
#: pkg/build/build.go:868
#: pkg/build/build.go:875
msgid "AutoReq is not implemented for this package format, so it's skipped"
msgstr ""
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"

@ -111,7 +111,10 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error)
return nil, nil, err
}
dirs := b.getDirs(basePkg)
dirs, err := b.getDirs(basePkg)
if err != nil {
return nil, nil, err
}
builtPaths := make([]string, 0)
@ -379,14 +382,19 @@ func (b *Builder) executeFirstPass(
}
// Функция getDirs возвращает соответствующие директории для скрипта
func (b *Builder) getDirs(basePkg string) types.Directories {
func (b *Builder) getDirs(basePkg string) (types.Directories, error) {
scriptPath, err := filepath.Abs(b.opts.Script)
if err != nil {
return types.Directories{}, err
}
baseDir := filepath.Join(b.config.GetPaths(b.ctx).PkgsDir, basePkg) // Определяем базовую директорию
return types.Directories{
BaseDir: baseDir,
SrcDir: filepath.Join(baseDir, "src"),
PkgDir: filepath.Join(baseDir, "pkg"),
ScriptDir: filepath.Dir(b.opts.Script),
}
ScriptDir: filepath.Dir(scriptPath),
}, nil
}
// Функция executeSecondPass выполняет скрипт сборки второй раз без каких-либо ограничений. Возвращается декодер,
@ -844,7 +852,6 @@ func (b *Builder) buildPkgMetadata(
if err != nil {
return nil, err
}
slog.Info("contents", "contents", contents)
pkgInfo.Overridables.Contents = contents
if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) {