chore: replace old logger with new

This commit is contained in:
2025-01-22 16:37:16 +03:00
parent ac35b4d71d
commit a6076b1253
22 changed files with 707 additions and 221 deletions

View File

@ -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 {

View File

@ -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)
})
}

View File

@ -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)
// Логируем и завершаем выполнение при ошибке установки
}
}

View File

@ -1,48 +0,0 @@
// This file was originally part of the project "LURE - Linux User REpository", created by Elara Musayelyan.
// It has been modified as part of "ALR - Any Linux Repository" by Евгений Храмов.
//
// 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 loggerctx
import (
"context"
"go.elara.ws/logger"
)
// loggerCtxKey is used as the context key for loggers
type loggerCtxKey struct{}
// With returns a copy of ctx containing log
func With(ctx context.Context, log logger.Logger) context.Context {
return context.WithValue(ctx, loggerCtxKey{}, log)
}
// From attempts to get a logger from ctx. If ctx doesn't
// contain a logger, it returns a nop logger.
func From(ctx context.Context) logger.Logger {
if val := ctx.Value(loggerCtxKey{}); val != nil {
if log, ok := val.(logger.Logger); ok && log != nil {
return log
} else {
return logger.NewNop()
}
} else {
return logger.NewNop()
}
}

View File

@ -22,6 +22,7 @@ package repos
import (
"context"
"errors"
"log/slog"
"net/url"
"os"
"path/filepath"
@ -31,6 +32,7 @@ import (
"github.com/go-git/go-billy/v5/osfs"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/leonelquinteros/gotext"
"github.com/pelletier/go-toml/v2"
"go.elara.ws/vercmp"
"mvdan.cc/sh/v3/expand"
@ -41,7 +43,6 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/loggerctx"
)
type actionType uint8
@ -61,8 +62,6 @@ type action struct {
// In this case, only changed packages will be processed if possible.
// If repos is set to nil, the repos in the ALR config will be used.
func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
log := loggerctx.From(ctx)
if repos == nil {
repos = rs.cfg.Repos(ctx)
}
@ -73,7 +72,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
return err
}
log.Info("Pulling repository").Str("name", repo.Name).Send()
slog.Info(gotext.Get("Pulling repository"), "name", repo.Name)
repoDir := filepath.Join(config.GetPaths(ctx).RepoDir, repo.Name)
var repoFS billy.Filesystem
@ -97,7 +96,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
err = w.PullContext(ctx, &git.PullOptions{Progress: os.Stderr})
if errors.Is(err, git.NoErrAlreadyUpToDate) {
log.Info("Repository up to date").Str("name", repo.Name).Send()
slog.Info(gotext.Get("Repository up to date"), "name", repo.Name)
} else if err != nil {
return err
}
@ -154,7 +153,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
fl, err := repoFS.Open("alr-repo.toml")
if err != nil {
log.Warn("Git repository does not appear to be a valid ALR repo").Str("repo", repo.Name).Send()
slog.Warn(gotext.Get("Git repository does not appear to be a valid ALR repo"), "repo", repo.Name)
continue
}
@ -170,7 +169,7 @@ func (rs *Repos) Pull(ctx context.Context, repos []types.Repo) error {
// to compare it to the repo version, so only compare versions with the "v".
if strings.HasPrefix(config.Version, "v") {
if vercmp.Compare(config.Version, repoCfg.Repo.MinVersion) == -1 {
log.Warn("ALR repo's minumum ALR version is greater than the current version. Try updating ALR if something doesn't work.").Str("repo", repo.Name).Send()
slog.Warn(gotext.Get("ALR repo's minumum ALR version is greater than the current version. Try updating ALR if something doesn't work."), "repo", repo.Name)
}
}
}