Compare commits
13 Commits
71000fd3cd
...
v0.0.8
Author | SHA1 | Date | |
---|---|---|---|
9cf8af08ab | |||
86940e8962 | |||
db244204c7 | |||
9cb0a5e9ad | |||
1a57ccdb83 | |||
615cd83fb7 | |||
27e2f54653 | |||
af57165c89 | |||
3770c82240 | |||
2dff463303 | |||
9085e38454 | |||
a7d016abc9 | |||
4a5cca2d0f |
2
Makefile
2
Makefile
@@ -21,7 +21,7 @@ build: check-no-root $(BIN)
|
|||||||
|
|
||||||
export CGO_ENABLED := 0
|
export CGO_ENABLED := 0
|
||||||
$(BIN):
|
$(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:
|
check-no-root:
|
||||||
@if [[ "$$(whoami)" == 'root' ]]; then \
|
@if [[ "$$(whoami)" == 'root' ]]; then \
|
||||||
|
19
README.md
19
README.md
@@ -7,9 +7,9 @@
|
|||||||
|
|
||||||
# ALR (Any Linux Repository)
|
# 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
|
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 будет установлен, клонируйте это репозиторий и запустите:
|
Чтобы собрать ALR из исходного кода, вам понадобится версия Go 1.18 или новее. Как только Go будет установлен, клонируйте это репозиторий и запустите:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make build
|
make build -B
|
||||||
sudo make install
|
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.
|
Репозитории 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
|
VK - https://vk.com/plemya_kh
|
||||||
|
|
||||||
Discord - https://discord.com/channels/817759634105827358/1261631565084233749
|
|
||||||
|
|
||||||
Telegram - https://t.me/plemyakh
|
Telegram - https://t.me/plemyakh
|
||||||
|
|
||||||
## Спасибы
|
## Спасибы
|
||||||
@@ -75,3 +73,6 @@ Telegram - https://t.me/plemyakh
|
|||||||
- <https://github.com/goreleaser/nfpm>
|
- <https://github.com/goreleaser/nfpm>
|
||||||
- <https://github.com/charmbracelet/bubbletea>
|
- <https://github.com/charmbracelet/bubbletea>
|
||||||
- <https://gitlab.com/cznic/sqlite>
|
- <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">
|
<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="15" fill="#010101" fill-opacity=".3">coverage</text>
|
||||||
<text x="33.5" y="14">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="15" fill="#010101" fill-opacity=".3">19.8%</text>
|
||||||
<text x="86" y="14">19.6%</text>
|
<text x="86" y="14">19.8%</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B |
6
build.go
6
build.go
@@ -50,9 +50,9 @@ func BuildCmd() *cli.Command {
|
|||||||
Usage: gotext.Get("Path to the build script"),
|
Usage: gotext.Get("Path to the build script"),
|
||||||
},
|
},
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "script-package",
|
Name: "subpackage",
|
||||||
Aliases: []string{"sp"},
|
Aliases: []string{"sb"},
|
||||||
Usage: gotext.Get("Specify package in script (for multi package script only)"),
|
Usage: gotext.Get("Specify subpackage in script (for multi package script only)"),
|
||||||
},
|
},
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "package",
|
Name: "package",
|
||||||
|
@@ -119,6 +119,11 @@ func InstallCmd() *cli.Command {
|
|||||||
BashComplete: func(c *cli.Context) {
|
BashComplete: func(c *cli.Context) {
|
||||||
cfg := config.New()
|
cfg := config.New()
|
||||||
db := database.New(cfg)
|
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")
|
result, err := db.GetPkgs(c.Context, "true")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error getting packages"), "err", err)
|
slog.Error(gotext.Get("Error getting packages"), "err", err)
|
||||||
|
@@ -91,7 +91,7 @@ func TestDownloadWithoutCache(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "git download",
|
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) {
|
expected: func(t *testing.T, err error, tmpdir string) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
@@ -18,7 +18,7 @@ msgid "Path to the build script"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:55
|
#: build.go:55
|
||||||
msgid "Specify package in script (for multi package script only)"
|
msgid "Specify subpackage in script (for multi package script only)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:60
|
#: build.go:60
|
||||||
@@ -158,15 +158,15 @@ msgstr ""
|
|||||||
msgid "Command install expected at least 1 argument, got %d"
|
msgid "Command install expected at least 1 argument, got %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:146
|
#: install.go:151
|
||||||
msgid "Remove an installed package"
|
msgid "Remove an installed package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:151
|
#: install.go:156
|
||||||
msgid "Command remove expected at least 1 argument, got %d"
|
msgid "Command remove expected at least 1 argument, got %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:163
|
#: install.go:168
|
||||||
msgid "Error removing packages"
|
msgid "Error removing packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -357,77 +357,77 @@ msgstr ""
|
|||||||
msgid "Error while running app"
|
msgid "Error while running app"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:153
|
#: pkg/build/build.go:156
|
||||||
msgid "Failed to prompt user to view build script"
|
msgid "Failed to prompt user to view build script"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:157
|
#: pkg/build/build.go:160
|
||||||
msgid "Building package"
|
msgid "Building package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:228
|
#: pkg/build/build.go:208
|
||||||
|
msgid "The checksums array must be the same length as sources"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pkg/build/build.go:235
|
||||||
msgid "Downloading sources"
|
msgid "Downloading sources"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:250
|
#: pkg/build/build.go:257
|
||||||
msgid "Building package metadata"
|
msgid "Building package metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:272
|
#: pkg/build/build.go:279
|
||||||
msgid "Compressing package"
|
msgid "Compressing package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:426
|
#: pkg/build/build.go:438
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your system's CPU architecture doesn't match this package. Do you want to "
|
"Your system's CPU architecture doesn't match this package. Do you want to "
|
||||||
"build anyway?"
|
"build anyway?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:440
|
#: pkg/build/build.go:452
|
||||||
msgid "This package is already installed"
|
msgid "This package is already installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:464
|
#: pkg/build/build.go:476
|
||||||
msgid "Installing build dependencies"
|
msgid "Installing build dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:505
|
#: pkg/build/build.go:517
|
||||||
msgid "Installing dependencies"
|
msgid "Installing dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:540
|
#: pkg/build/build.go:598
|
||||||
msgid "The checksums array must be the same length as sources"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pkg/build/build.go:591
|
|
||||||
msgid "Would you like to remove the build dependencies?"
|
msgid "Would you like to remove the build dependencies?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:654
|
#: pkg/build/build.go:661
|
||||||
msgid "Executing prepare()"
|
msgid "Executing prepare()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:664
|
#: pkg/build/build.go:671
|
||||||
msgid "Executing build()"
|
msgid "Executing build()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:694 pkg/build/build.go:714
|
#: pkg/build/build.go:701 pkg/build/build.go:721
|
||||||
msgid "Executing %s()"
|
msgid "Executing %s()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:773
|
#: pkg/build/build.go:780
|
||||||
msgid "Error installing native packages"
|
msgid "Error installing native packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:797
|
#: pkg/build/build.go:804
|
||||||
msgid "Error installing package"
|
msgid "Error installing package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:857
|
#: pkg/build/build.go:863
|
||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:868
|
#: pkg/build/build.go:874
|
||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: unnamed project\n"
|
"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"
|
"Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -25,8 +25,8 @@ msgid "Path to the build script"
|
|||||||
msgstr "Путь к скрипту сборки"
|
msgstr "Путь к скрипту сборки"
|
||||||
|
|
||||||
#: build.go:55
|
#: build.go:55
|
||||||
msgid "Specify package in script (for multi package script only)"
|
msgid "Specify subpackage in script (for multi package script only)"
|
||||||
msgstr "Укажите пакет в скрипте (только для многопакетного скрипта)"
|
msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)"
|
||||||
|
|
||||||
#: build.go:60
|
#: build.go:60
|
||||||
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
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"
|
msgid "Command install expected at least 1 argument, got %d"
|
||||||
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d"
|
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d"
|
||||||
|
|
||||||
#: install.go:146
|
#: install.go:151
|
||||||
msgid "Remove an installed package"
|
msgid "Remove an installed package"
|
||||||
msgstr "Удалить установленный пакет"
|
msgstr "Удалить установленный пакет"
|
||||||
|
|
||||||
#: install.go:151
|
#: install.go:156
|
||||||
msgid "Command remove expected at least 1 argument, got %d"
|
msgid "Command remove expected at least 1 argument, got %d"
|
||||||
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
|
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
|
||||||
|
|
||||||
#: install.go:163
|
#: install.go:168
|
||||||
msgid "Error removing packages"
|
msgid "Error removing packages"
|
||||||
msgstr "Ошибка при удалении пакетов"
|
msgstr "Ошибка при удалении пакетов"
|
||||||
|
|
||||||
@@ -371,27 +371,31 @@ msgstr "Показать справку"
|
|||||||
msgid "Error while running app"
|
msgid "Error while running app"
|
||||||
msgstr "Ошибка при запуске приложения"
|
msgstr "Ошибка при запуске приложения"
|
||||||
|
|
||||||
#: pkg/build/build.go:153
|
#: pkg/build/build.go:156
|
||||||
msgid "Failed to prompt user to view build script"
|
msgid "Failed to prompt user to view build script"
|
||||||
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
|
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
|
||||||
|
|
||||||
#: pkg/build/build.go:157
|
#: pkg/build/build.go:160
|
||||||
msgid "Building package"
|
msgid "Building package"
|
||||||
msgstr "Сборка пакета"
|
msgstr "Сборка пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:228
|
#: pkg/build/build.go:208
|
||||||
|
msgid "The checksums array must be the same length as sources"
|
||||||
|
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
|
||||||
|
|
||||||
|
#: pkg/build/build.go:235
|
||||||
msgid "Downloading sources"
|
msgid "Downloading sources"
|
||||||
msgstr "Скачивание источников"
|
msgstr "Скачивание источников"
|
||||||
|
|
||||||
#: pkg/build/build.go:250
|
#: pkg/build/build.go:257
|
||||||
msgid "Building package metadata"
|
msgid "Building package metadata"
|
||||||
msgstr "Сборка метаданных пакета"
|
msgstr "Сборка метаданных пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:272
|
#: pkg/build/build.go:279
|
||||||
msgid "Compressing package"
|
msgid "Compressing package"
|
||||||
msgstr "Сжатие пакета"
|
msgstr "Сжатие пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:426
|
#: pkg/build/build.go:438
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your system's CPU architecture doesn't match this package. Do you want to "
|
"Your system's CPU architecture doesn't match this package. Do you want to "
|
||||||
"build anyway?"
|
"build anyway?"
|
||||||
@@ -399,52 +403,48 @@ msgstr ""
|
|||||||
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
|
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
|
||||||
"равно хотите выполнить сборку?"
|
"равно хотите выполнить сборку?"
|
||||||
|
|
||||||
#: pkg/build/build.go:440
|
#: pkg/build/build.go:452
|
||||||
msgid "This package is already installed"
|
msgid "This package is already installed"
|
||||||
msgstr "Этот пакет уже установлен"
|
msgstr "Этот пакет уже установлен"
|
||||||
|
|
||||||
#: pkg/build/build.go:464
|
#: pkg/build/build.go:476
|
||||||
msgid "Installing build dependencies"
|
msgid "Installing build dependencies"
|
||||||
msgstr "Установка зависимостей сборки"
|
msgstr "Установка зависимостей сборки"
|
||||||
|
|
||||||
#: pkg/build/build.go:505
|
#: pkg/build/build.go:517
|
||||||
msgid "Installing dependencies"
|
msgid "Installing dependencies"
|
||||||
msgstr "Установка зависимостей"
|
msgstr "Установка зависимостей"
|
||||||
|
|
||||||
#: pkg/build/build.go:540
|
#: pkg/build/build.go:598
|
||||||
msgid "The checksums array must be the same length as sources"
|
|
||||||
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
|
|
||||||
|
|
||||||
#: pkg/build/build.go:591
|
|
||||||
msgid "Would you like to remove the build dependencies?"
|
msgid "Would you like to remove the build dependencies?"
|
||||||
msgstr "Хотели бы вы удалить зависимости сборки?"
|
msgstr "Хотели бы вы удалить зависимости сборки?"
|
||||||
|
|
||||||
#: pkg/build/build.go:654
|
#: pkg/build/build.go:661
|
||||||
msgid "Executing prepare()"
|
msgid "Executing prepare()"
|
||||||
msgstr "Исполнение prepare()"
|
msgstr "Исполнение prepare()"
|
||||||
|
|
||||||
#: pkg/build/build.go:664
|
#: pkg/build/build.go:671
|
||||||
msgid "Executing build()"
|
msgid "Executing build()"
|
||||||
msgstr "Исполнение build()"
|
msgstr "Исполнение build()"
|
||||||
|
|
||||||
#: pkg/build/build.go:694 pkg/build/build.go:714
|
#: pkg/build/build.go:701 pkg/build/build.go:721
|
||||||
msgid "Executing %s()"
|
msgid "Executing %s()"
|
||||||
msgstr "Исполнение %s()"
|
msgstr "Исполнение %s()"
|
||||||
|
|
||||||
#: pkg/build/build.go:773
|
#: pkg/build/build.go:780
|
||||||
msgid "Error installing native packages"
|
msgid "Error installing native packages"
|
||||||
msgstr "Ошибка при установке нативных пакетов"
|
msgstr "Ошибка при установке нативных пакетов"
|
||||||
|
|
||||||
#: pkg/build/build.go:797
|
#: pkg/build/build.go:804
|
||||||
msgid "Error installing package"
|
msgid "Error installing package"
|
||||||
msgstr "Ошибка при установке пакета"
|
msgstr "Ошибка при установке пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:857
|
#: pkg/build/build.go:863
|
||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
|
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
|
||||||
|
|
||||||
#: pkg/build/build.go:868
|
#: pkg/build/build.go:874
|
||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
|
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
|
||||||
|
@@ -111,7 +111,10 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error)
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
dirs := b.getDirs(basePkg)
|
dirs, err := b.getDirs(basePkg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
builtPaths := make([]string, 0)
|
builtPaths := make([]string, 0)
|
||||||
|
|
||||||
@@ -200,8 +203,12 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error)
|
|||||||
buildDepends = removeDuplicates(buildDepends)
|
buildDepends = removeDuplicates(buildDepends)
|
||||||
optDepends = removeDuplicates(optDepends)
|
optDepends = removeDuplicates(optDepends)
|
||||||
depends = removeDuplicates(depends)
|
depends = removeDuplicates(depends)
|
||||||
sources = removeDuplicates(sources)
|
|
||||||
checksums = removeDuplicates(checksums)
|
if len(sources) != len(checksums) {
|
||||||
|
slog.Error(gotext.Get("The checksums array must be the same length as sources"))
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
sources, checksums = removeDuplicatesSources(sources, checksums)
|
||||||
|
|
||||||
mergedVars := types.BuildVars{
|
mergedVars := types.BuildVars{
|
||||||
Sources: sources,
|
Sources: sources,
|
||||||
@@ -379,14 +386,19 @@ func (b *Builder) executeFirstPass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Функция getDirs возвращает соответствующие директории для скрипта
|
// Функция 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) // Определяем базовую директорию
|
baseDir := filepath.Join(b.config.GetPaths(b.ctx).PkgsDir, basePkg) // Определяем базовую директорию
|
||||||
return types.Directories{
|
return types.Directories{
|
||||||
BaseDir: baseDir,
|
BaseDir: baseDir,
|
||||||
SrcDir: filepath.Join(baseDir, "src"),
|
SrcDir: filepath.Join(baseDir, "src"),
|
||||||
PkgDir: filepath.Join(baseDir, "pkg"),
|
PkgDir: filepath.Join(baseDir, "pkg"),
|
||||||
ScriptDir: filepath.Dir(b.opts.Script),
|
ScriptDir: filepath.Dir(scriptPath),
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Функция executeSecondPass выполняет скрипт сборки второй раз без каких-либо ограничений. Возвращается декодер,
|
// Функция executeSecondPass выполняет скрипт сборки второй раз без каких-либо ограничений. Возвращается декодер,
|
||||||
@@ -536,11 +548,6 @@ func (b *Builder) buildALRDeps(ctx context.Context, depends []string) (builtPath
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
|
func (b *Builder) getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
|
||||||
if len(bv.Sources) != len(bv.Checksums) {
|
|
||||||
slog.Error(gotext.Get("The checksums array must be the same length as sources"))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, src := range bv.Sources {
|
for i, src := range bv.Sources {
|
||||||
opts := dl.Options{
|
opts := dl.Options{
|
||||||
Name: fmt.Sprintf("%s[%d]", bv.Name, i),
|
Name: fmt.Sprintf("%s[%d]", bv.Name, i),
|
||||||
@@ -844,7 +851,6 @@ func (b *Builder) buildPkgMetadata(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
slog.Info("contents", "contents", contents)
|
|
||||||
pkgInfo.Overridables.Contents = contents
|
pkgInfo.Overridables.Contents = contents
|
||||||
|
|
||||||
if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) {
|
if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) {
|
||||||
|
@@ -313,3 +313,24 @@ func removeDuplicates(slice []string) []string {
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeDuplicatesSources(sources, checksums []string) ([]string, []string) {
|
||||||
|
seen := map[string]string{}
|
||||||
|
keys := make([]string, 0)
|
||||||
|
for i, s := range sources {
|
||||||
|
if val, ok := seen[s]; !ok || strings.EqualFold(val, "SKIP") {
|
||||||
|
if !ok {
|
||||||
|
keys = append(keys, s)
|
||||||
|
}
|
||||||
|
seen[s] = checksums[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newSources := make([]string, len(keys))
|
||||||
|
newChecksums := make([]string, len(keys))
|
||||||
|
for i, k := range keys {
|
||||||
|
newSources[i] = k
|
||||||
|
newChecksums[i] = seen[k]
|
||||||
|
}
|
||||||
|
return newSources, newChecksums
|
||||||
|
}
|
||||||
|
47
pkg/build/utils_internal_test.go
Normal file
47
pkg/build/utils_internal_test.go
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// ALR - Any Linux Repository
|
||||||
|
// Copyright (C) 2025 Евгений Храмов
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package build
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestRemoveDuplicatesSources(t *testing.T) {
|
||||||
|
type testCase struct {
|
||||||
|
Name string
|
||||||
|
Sources []string
|
||||||
|
Checksums []string
|
||||||
|
NewSources []string
|
||||||
|
NewChecksums []string
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range []testCase{{
|
||||||
|
Name: "prefer non-skip values",
|
||||||
|
Sources: []string{"a", "b", "c", "a"},
|
||||||
|
Checksums: []string{"skip", "skip", "skip", "1"},
|
||||||
|
NewSources: []string{"a", "b", "c"},
|
||||||
|
NewChecksums: []string{"1", "skip", "skip"},
|
||||||
|
}} {
|
||||||
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
|
s, c := removeDuplicatesSources(tc.Sources, tc.Checksums)
|
||||||
|
assert.Equal(t, s, tc.NewSources)
|
||||||
|
assert.Equal(t, c, tc.NewChecksums)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@@ -32,19 +32,19 @@ deps=("python3")
|
|||||||
deps_arch=("python")
|
deps_arch=("python")
|
||||||
deps_alpine=("python3")
|
deps_alpine=("python3")
|
||||||
|
|
||||||
build_deps=("python3" "python3-setuptools")
|
build_deps=("python3" "python3-pip")
|
||||||
build_deps_arch=("python" "python-setuptools")
|
build_deps_arch=("python" "python-pip")
|
||||||
build_deps_alpine=("python3" "py3-setuptools")
|
build_deps_alpine=("python3" "py3-pip")
|
||||||
|
|
||||||
sources=("https://files.pythonhosted.org/packages/source/{{.SourceURL.Filename | firstchar}}/{{.Info.Name}}/{{.SourceURL.Filename}}")
|
sources=("https://files.pythonhosted.org/packages/source/{{.SourceURL.Filename | firstchar}}/{{.Info.Name}}/{{.SourceURL.Filename}}")
|
||||||
checksums=('blake2b-256:{{.SourceURL.Digests.blake2b_256}}')
|
checksums=('blake2b-256:{{.SourceURL.Digests.blake2b_256}}')
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
cd "$srcdir/{{.Info.Name}}-${version}"
|
cd "$srcdir/{{.Info.Name}}-${version}"
|
||||||
python3 setup.py build
|
python3 -m build
|
||||||
}
|
}
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
cd "$srcdir/{{.Info.Name}}-${version}"
|
cd "$srcdir/{{.Info.Name}}-${version}"
|
||||||
python3 setup.py install --root="${pkgdir}/" --optimize=1 || return 1
|
pip install --root="${pkgdir}/" . --no-deps --disable-pip-version-check
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user