forked from Plemya-x/ALR
		
	chore: replace old logger with new
This commit is contained in:
		@@ -25,6 +25,7 @@ import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
@@ -38,7 +39,7 @@ import (
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/arch"
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/deb"
 | 
			
		||||
	_ "github.com/goreleaser/nfpm/v2/rpm"
 | 
			
		||||
	"go.elara.ws/logger/log"
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
	"mvdan.cc/sh/v3/expand"
 | 
			
		||||
	"mvdan.cc/sh/v3/interp"
 | 
			
		||||
	"mvdan.cc/sh/v3/syntax"
 | 
			
		||||
@@ -56,7 +57,6 @@ import (
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
 | 
			
		||||
)
 | 
			
		||||
@@ -64,7 +64,6 @@ import (
 | 
			
		||||
// Функция BuildPackage выполняет сборку скрипта по указанному пути. Возвращает два среза.
 | 
			
		||||
// Один содержит пути к собранным пакетам, другой - имена собранных пакетов.
 | 
			
		||||
func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	reposInstance := repos.GetInstance(ctx)
 | 
			
		||||
 | 
			
		||||
	info, err := distro.ParseOSRelease(ctx)
 | 
			
		||||
@@ -102,10 +101,11 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
	// Спрашиваем у пользователя, хочет ли он увидеть скрипт сборки.
 | 
			
		||||
	err = cliutils.PromptViewScript(ctx, opts.Script, vars.Name, config.Config(ctx).PagerStyle, opts.Interactive)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Failed to prompt user to view build script").Err(err).Send()
 | 
			
		||||
		slog.Error(gotext.Get("Failed to prompt user to view build script"), "err", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Building package").Str("name", vars.Name).Str("version", vars.Version).Send()
 | 
			
		||||
	slog.Info(gotext.Get("Building package"), "name", vars.Name, "version", vars.Version)
 | 
			
		||||
 | 
			
		||||
	// Второй проход будет использоваться для выполнения реального кода,
 | 
			
		||||
	// поэтому он не ограничен. Скрипт уже был показан
 | 
			
		||||
@@ -149,7 +149,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Downloading sources").Send() // Записываем в лог загрузку источников
 | 
			
		||||
	slog.Info(gotext.Get("Downloading sources")) // Записываем в лог загрузку источников
 | 
			
		||||
 | 
			
		||||
	err = getSources(ctx, dirs, vars) // Загружаем исходники
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -161,7 +161,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Building package metadata").Str("name", vars.Name).Send() // Логгируем сборку метаданных пакета
 | 
			
		||||
	slog.Info(gotext.Get("Building package metadata"), "name", vars.Name)
 | 
			
		||||
 | 
			
		||||
	pkgFormat := getPkgFormat(opts.Manager) // Получаем формат пакета
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +183,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Info("Compressing package").Str("name", pkgName).Send() // Логгируем сжатие пакета
 | 
			
		||||
	slog.Info(gotext.Get("Compressing package"), "name", pkgName) // Логгируем сжатие пакета
 | 
			
		||||
 | 
			
		||||
	err = packager.Package(pkgInfo, pkgFile) // Упаковываем пакет
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -308,7 +308,6 @@ func prepareDirs(dirs types.Directories) error {
 | 
			
		||||
 | 
			
		||||
// Функция performChecks проверяет различные аспекты в системе, чтобы убедиться, что пакет может быть установлен.
 | 
			
		||||
func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool, installed map[string]string) (bool, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if !cpu.IsCompatibleWith(cpu.Arch(), vars.Architectures) { // Проверяем совместимость архитектуры
 | 
			
		||||
		cont, err := cliutils.YesNoPrompt(ctx, "Your system's CPU architecture doesn't match this package. Do you want to build anyway?", interactive, true)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -321,10 +320,10 @@ func performChecks(ctx context.Context, vars *types.BuildVars, interactive bool,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if instVer, ok := installed[vars.Name]; ok { // Если пакет уже установлен, выводим предупреждение
 | 
			
		||||
		log.Warn("This package is already installed").
 | 
			
		||||
			Str("name", vars.Name).
 | 
			
		||||
			Str("version", instVer).
 | 
			
		||||
			Send()
 | 
			
		||||
		slog.Warn(gotext.Get("This package is already installed"),
 | 
			
		||||
			"name", vars.Name,
 | 
			
		||||
			"version", instVer,
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true, nil
 | 
			
		||||
@@ -337,7 +336,6 @@ type PackageFinder interface {
 | 
			
		||||
// Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает
 | 
			
		||||
// срез, содержащий имена всех установленных пакетов.
 | 
			
		||||
func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	var buildDeps []string
 | 
			
		||||
	if len(vars.BuildDepends) > 0 {
 | 
			
		||||
		deps, err := removeAlreadyInstalled(opts, vars.BuildDepends)
 | 
			
		||||
@@ -350,7 +348,7 @@ func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.Buil
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log.Info("Installing build dependencies").Send() // Логгируем установку зависимостей
 | 
			
		||||
		slog.Info(gotext.Get("Installing build dependencies")) // Логгируем установку зависимостей
 | 
			
		||||
 | 
			
		||||
		flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) // Уплощаем список зависимостей
 | 
			
		||||
		buildDeps = packageNames(flattened)
 | 
			
		||||
@@ -391,9 +389,8 @@ func installOptDeps(ctx context.Context, repos PackageFinder, vars *types.BuildV
 | 
			
		||||
// пакетов, которые она собрала, а также все зависимости, которые не были найдены в ALR репозитории,
 | 
			
		||||
// чтобы они могли быть установлены из системных репозиториев.
 | 
			
		||||
func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVars) (builtPaths, builtNames, repoDeps []string, err error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if len(vars.Depends) > 0 {
 | 
			
		||||
		log.Info("Installing dependencies").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Installing dependencies"))
 | 
			
		||||
 | 
			
		||||
		found, notFound, err := repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -433,10 +430,9 @@ func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVa
 | 
			
		||||
 | 
			
		||||
// Функция executeFunctions выполняет специальные функции ALR, такие как version(), prepare() и т.д.
 | 
			
		||||
func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Directories, vars *types.BuildVars) (err error) {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	version, ok := dec.GetFunc("version")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing version()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing version()"))
 | 
			
		||||
 | 
			
		||||
		buf := &bytes.Buffer{}
 | 
			
		||||
 | 
			
		||||
@@ -456,12 +452,12 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
		}
 | 
			
		||||
		vars.Version = newVer
 | 
			
		||||
 | 
			
		||||
		log.Info("Updating version").Str("new", newVer).Send()
 | 
			
		||||
		slog.Info("Updating version", "new", newVer)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prepare, ok := dec.GetFunc("prepare")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing prepare()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing prepare()"))
 | 
			
		||||
 | 
			
		||||
		err = prepare(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -471,7 +467,7 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
 | 
			
		||||
	build, ok := dec.GetFunc("build")
 | 
			
		||||
	if ok {
 | 
			
		||||
		log.Info("Executing build()").Send()
 | 
			
		||||
		slog.Info(gotext.Get("Executing build()"))
 | 
			
		||||
 | 
			
		||||
		err = build(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -483,24 +479,27 @@ func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Dire
 | 
			
		||||
	for {
 | 
			
		||||
		packageFn, ok := dec.GetFunc("package")
 | 
			
		||||
		if ok {
 | 
			
		||||
			log.Info("Executing package()").Send()
 | 
			
		||||
			slog.Info(gotext.Get("Executing package()"))
 | 
			
		||||
			err = packageFn(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Проверка на наличие дополнительных функций package_*
 | 
			
		||||
		packageFuncName := "package_"
 | 
			
		||||
		if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
			
		||||
			log.Info("Executing " + packageFuncName).Send()
 | 
			
		||||
			err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
		/*
 | 
			
		||||
			// Проверка на наличие дополнительных функций package_*
 | 
			
		||||
			packageFuncName := "package_"
 | 
			
		||||
			if packageFunc, ok := dec.GetFunc(packageFuncName); ok {
 | 
			
		||||
				slog.Info("Executing " + packageFuncName)
 | 
			
		||||
				err = packageFunc(ctx, interp.Dir(dirs.SrcDir))
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return err
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				break // Если больше нет функций package_*, выходим из цикла
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			break // Если больше нет функций package_*, выходим из цикла
 | 
			
		||||
		}
 | 
			
		||||
		*/
 | 
			
		||||
		break
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
@@ -555,7 +554,7 @@ func buildPkgMetadata(ctx context.Context, vars *types.BuildVars, dirs types.Dir
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			log.Info("AutoProv is not implemented for this package format, so it's skiped").Send()
 | 
			
		||||
			slog.Info(gotext.Get("AutoProv is not implemented for this package format, so it's skiped"))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -566,7 +565,7 @@ func buildPkgMetadata(ctx context.Context, vars *types.BuildVars, dirs types.Dir
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			log.Info("AutoReq is not implemented for this package format, so it's skiped").Send()
 | 
			
		||||
			slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skiped"))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -756,9 +755,9 @@ func createBuildEnvVars(info *distro.OSRelease, dirs types.Directories) []string
 | 
			
		||||
 | 
			
		||||
// Функция getSources загружает исходники скрипта.
 | 
			
		||||
func getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
	if len(bv.Sources) != len(bv.Checksums) {
 | 
			
		||||
		log.Fatal("The checksums array must be the same length as sources").Send()
 | 
			
		||||
		slog.Error(gotext.Get("The checksums array must be the same length as sources"))
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, src := range bv.Sources {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,21 +19,20 @@ package build
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/goreleaser/nfpm/v2"
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, command string, updateFunc func(string)) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	if _, err := exec.LookPath(command); err != nil {
 | 
			
		||||
		log.Info("Command not found on the system").Str("command", command).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Command not found on the system"), "command", command)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -64,7 +63,7 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir
 | 
			
		||||
	cmd.Stdout = &out
 | 
			
		||||
	cmd.Stderr = &stderr
 | 
			
		||||
	if err := cmd.Run(); err != nil {
 | 
			
		||||
		log.Error(stderr.String()).Send()
 | 
			
		||||
		slog.Error(stderr.String())
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -79,19 +78,15 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rpmFindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-provides", func(dep string) {
 | 
			
		||||
		log.Info("Provided dependency found").Str("dep", dep).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Provided dependency found"), "dep", dep)
 | 
			
		||||
		pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rpmFindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error {
 | 
			
		||||
	log := loggerctx.From(ctx)
 | 
			
		||||
 | 
			
		||||
	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-requires", func(dep string) {
 | 
			
		||||
		log.Info("Required dependency found").Str("dep", dep).Send()
 | 
			
		||||
		slog.Info(gotext.Get("Required dependency found"), "dep", dep)
 | 
			
		||||
		pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,24 +21,26 @@ package build
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"log/slog"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
 | 
			
		||||
	"github.com/leonelquinteros/gotext"
 | 
			
		||||
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
 | 
			
		||||
	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// InstallPkgs устанавливает нативные пакеты с использованием менеджера пакетов,
 | 
			
		||||
// затем строит и устанавливает пакеты ALR
 | 
			
		||||
func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
 | 
			
		||||
	log := loggerctx.From(ctx) // Инициализируем логгер из контекста
 | 
			
		||||
 | 
			
		||||
	if len(nativePkgs) > 0 {
 | 
			
		||||
		err := opts.Manager.Install(nil, nativePkgs...)
 | 
			
		||||
		// Если есть нативные пакеты, выполняем их установку
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error installing native packages").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error installing native packages"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -61,20 +63,21 @@ func GetScriptPaths(ctx context.Context, pkgs []db.Package) []string {
 | 
			
		||||
 | 
			
		||||
// InstallScripts строит и устанавливает переданные alr скрипты сборки
 | 
			
		||||
func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) {
 | 
			
		||||
	log := loggerctx.From(ctx) // Получаем логгер из контекста
 | 
			
		||||
	for _, script := range scripts {
 | 
			
		||||
		opts.Script = script // Устанавливаем текущий скрипт в опции
 | 
			
		||||
		builtPkgs, _, err := BuildPackage(ctx, opts)
 | 
			
		||||
		// Выполняем сборку пакета
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error building package").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error building package"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке сборки
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = opts.Manager.InstallLocal(nil, builtPkgs...)
 | 
			
		||||
		// Устанавливаем локально собранные пакеты
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Error installing package").Err(err).Send()
 | 
			
		||||
			slog.Error(gotext.Get("Error installing package"), "err", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
			// Логируем и завершаем выполнение при ошибке установки
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user