0
0
Fork 0
mirror of https://gitea.plemya-x.ru/Plemya-x/ALR.git synced 2025-01-10 09:16:45 +00:00

alr изменения

This commit is contained in:
Евгений Храмов 2024-05-05 13:32:08 +03:00
parent b94c39ccff
commit d427b37e23
73 changed files with 411 additions and 1213 deletions

6
.gitignore vendored
View file

@ -1,6 +1,6 @@
/lure /alr
/lure-api-server /alr-api-server
/cmd/lure-api-server/lure-api-server /cmd/alr-api-server/alr-api-server
/dist/ /dist/
/internal/config/version.txt /internal/config/version.txt
.fleet .fleet

View file

@ -2,12 +2,12 @@ before:
hooks: hooks:
- go mod tidy - go mod tidy
builds: builds:
- id: lure - id: alr
env: env:
- CGO_ENABLED=0 - CGO_ENABLED=0
binary: lure binary: alr
ldflags: ldflags:
- -X go.elara.ws/lure/internal/config.Version={{.Version}} - -X go.elara.ws/alr/internal/config.Version={{.Version}}
goos: goos:
- linux - linux
goarch: goarch:
@ -28,7 +28,7 @@ archives:
files: files:
- scripts/completion/* - scripts/completion/*
nfpms: nfpms:
- id: lure - id: alr
package_name: linux-user-repository package_name: linux-user-repository
file_name_template: >- file_name_template: >-
{{- .PackageName}}- {{- .PackageName}}-
@ -38,9 +38,9 @@ nfpms:
{{- else if .Arch | eq "386"}}i386 {{- else if .Arch | eq "386"}}i386
{{- else if .Arch | eq "arm64"}}aarch64 {{- else if .Arch | eq "arm64"}}aarch64
{{- else }}{{ .Arch }}{{ end -}} {{- else }}{{ .Arch }}{{ end -}}
description: "Linux User REpository" description: "Any Linux Repository"
homepage: 'https://lure.sh' homepage: 'https://gitflic.ru/project/xpamych/alr'
maintainer: 'Elara Musayelyan <elara@elara.ws>' maintainer: 'Евгений Храмов <xpamych@yandex.ru>'
license: GPLv3 license: GPLv3
formats: formats:
- apk - apk
@ -55,15 +55,15 @@ nfpms:
- aria2 - aria2
contents: contents:
- src: scripts/completion/bash - src: scripts/completion/bash
dst: /usr/share/bash-completion/completions/lure dst: /usr/share/bash-completion/completions/alr
- src: scripts/completion/zsh - src: scripts/completion/zsh
dst: /usr/share/zsh/site-functions/_lure dst: /usr/share/zsh/site-functions/_alr
aurs: aurs:
- name: linux-user-repository-bin - name: linux-user-repository-bin
homepage: 'https://lure.sh' homepage: 'https://gitflic.ru/project/xpamych/alr'
description: "Linux User REpository" description: "Any Linux Repository"
maintainers: maintainers:
- 'Elara Musayelyan <elara@elara.ws>' - 'Евгений Храмов <xpamych@yandex.ru>'
license: GPLv3 license: GPLv3
private_key: '{{ .Env.AUR_KEY }}' private_key: '{{ .Env.AUR_KEY }}'
git_url: 'ssh://aur@aur.archlinux.org/linux-user-repository-bin.git' git_url: 'ssh://aur@aur.archlinux.org/linux-user-repository-bin.git'
@ -78,15 +78,15 @@ aurs:
- 'aria2: for downloading torrent sources' - 'aria2: for downloading torrent sources'
package: |- package: |-
# binaries # binaries
install -Dm755 ./lure "${pkgdir}/usr/bin/lure" install -Dm755 ./alr "${pkgdir}/usr/bin/alr"
# completions # completions
install -Dm755 ./scripts/completion/bash ${pkgdir}/usr/share/bash-completion/completions/lure install -Dm755 ./scripts/completion/bash ${pkgdir}/usr/share/bash-completion/completions/alr
install -Dm755 ./scripts/completion/zsh ${pkgdir}/usr/share/zsh/site-functions/_lure install -Dm755 ./scripts/completion/zsh ${pkgdir}/usr/share/zsh/site-functions/_alr
release: release:
gitea: gitea:
owner: lure owner: alr
name: lure name: alr
gitea_urls: gitea_urls:
api: 'https://gitea.elara.ws/api/v1/' api: 'https://gitea.elara.ws/api/v1/'
download: 'https://gitea.elara.ws' download: 'https://gitea.elara.ws'

View file

@ -1,20 +1,20 @@
PREFIX ?= /usr/local PREFIX ?= /usr/local
GIT_VERSION = $(shell git describe --tags ) GIT_VERSION = $(shell git describe --tags )
lure: alr:
CGO_ENABLED=0 go build -ldflags="-X 'go.elara.ws/lure/internal/config.Version=$(GIT_VERSION)'" CGO_ENABLED=0 go build -ldflags="-X 'go.elara.ws/alr/internal/config.Version=$(GIT_VERSION)'"
clean: clean:
rm -f lure rm -f alr
install: lure installmisc install: alr installmisc
install -Dm755 lure $(DESTDIR)$(PREFIX)/bin/lure install -Dm755 alr $(DESTDIR)$(PREFIX)/bin/alr
installmisc: installmisc:
install -Dm755 scripts/completion/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/lure install -Dm755 scripts/completion/bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/alr
install -Dm755 scripts/completion/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_lure install -Dm755 scripts/completion/zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_alr
uninstall: uninstall:
rm -f /usr/local/bin/lure rm -f /usr/local/bin/alr
.PHONY: install clean uninstall installmisc lure .PHONY: install clean uninstall installmisc alr

View file

@ -1,39 +1,32 @@
<img src="assets/logo.png" alt="LURE Logo" width="200"> <img src="assets/logo.png" alt="ALR Logo" width="200">
# LURE (Linux User REpository) # ALR (Any Linux Repository)
[![Go Report Card](https://goreportcard.com/badge/go.elara.ws/lure)](https://goreportcard.com/report/go.elara.ws/lure) ALR - это независимая от дистрибутива система сборки для Linux, аналогичная [AUR](https://wiki.archlinux.org/title/Arch_User_Repository). В настоящее время она находится в стадии бета-тестирования. Исправлено большинство основных ошибок и добавлено большинство важных функций. alr готов к общему использованию, но все еще может время от времени ломаться или заменяться.
[![status-badge](https://ci.elara.ws/api/badges/lure/lure/status.svg)](https://ci.elara.ws/lure/lure)
[![SWH](https://archive.softwareheritage.org/badge/origin/https://gitea.elara.ws/lure/lure.git/)](https://archive.softwareheritage.org/browse/origin/?origin_url=https://gitea.elara.ws/lure/lure.git)
[![linux-user-repository-bin AUR package](https://img.shields.io/aur/version/linux-user-repository-bin?label=linux-user-repository-bin&logo=archlinux)](https://aur.archlinux.org/packages/linux-user-repository-bin/)
LURE is a distro-agnostic build system for Linux, similar to the [AUR](https://wiki.archlinux.org/title/Arch_User_Repository). It is currently in **beta**. Most major bugs have been fixed, and most major features have been added. LURE is ready for general use, but may still break or change occasionally. alr написан на чистом Go и после сборки не имеет зависимостей. Единственное, для повышения привилегий alr требуется команда area, такая как "sudo", "doas" и т.д., а также поддерживаемый менеджер пакетов. В настоящее время alr поддерживает `apt`, `pacman`, `apk`, `dnf`, `yum`, and `zypper`. Если в вашей системе существует поддерживаемый менеджер пакетов, он будет обнаружен и использован автоматически.
LURE is written in pure Go and has zero dependencies after building. The only things LURE requires are a command for privilege elevation such as `sudo`, `doas`, etc. as well as a supported package manager. Currently, LURE supports `apt`, `pacman`, `apk`, `dnf`, `yum`, and `zypper`. If a supported package manager exists on your system, it will be detected and used automatically.
--- ---
## Installation ## Установка
### Install script ### Установка скриптом
The LURE install script will automatically download and install the appropriate LURE package on your system. To use it, simply run the following command: Установочный скрипт автоматически загрузит и установит соответствующий пакет ALR в вашей системе. Чтобы использовать его, просто выполните следующую команду:
```bash ```bash
curl -fsSL lure.sh/install | bash curl -fsSL plemya-x.ru/install | bash
``` ```
**IMPORTANT**: This will download and run the script from https://lure.sh/install. Please look through any script you download from the internet (including this one) before running it. **ВАЖНО**: При этом скрипт будет загружен и запущен с https://gitflic.ru/project/xpamych/alr/install. Пожалуйста, просматривайте любые скрипты, которые вы скачиваете из Интернета (включая этот), прежде чем запускать их.
### Packages ### Пакеты
Distro packages and binary archives are provided at the latest Gitea release: https://gitea.elara.ws/lure/lure/releases/latest Пакеты для дистрибутивов и двоичные архивы представлены в последней версии на Gitflic: https://gitflic.ru/project/xpamych/alr/package
LURE is also available on the AUR as [linux-user-repository-bin](https://aur.archlinux.org/packages/linux-user-repository-bin)
### Building from source ### Building from source
To build LURE from source, you'll need Go 1.18 or newer. Once Go is installed, clone this repo and run: To build alr from source, you'll need Go 1.18 or newer. Once Go is installed, clone this repo and run:
```shell ```shell
sudo make install sudo make install
@ -43,31 +36,31 @@ sudo make install
## Why? ## Why?
LURE was created because packaging software for multiple Linux distros can be difficult and error-prone, and installing those packages can be a nightmare for users unless they're available in their distro's official repositories. It automates the process of building and installing unofficial packages. alr was created because packaging software for multiple Linux distros can be difficult and error-prone, and installing those packages can be a nightmare for users unless they're available in their distro's official repositories. It automates the process of building and installing unofficial packages.
--- ---
## Documentation ## Documentation
The documentation for LURE is in the [docs](docs) directory in this repo. The documentation for alr is in the [docs](docs) directory in this repo.
--- ---
## Web Interface ## Web Interface
LURE has an open source web interface, licensed under the AGPLv3 (https://gitea.elara.ws/lure/lure-web), and it's available at https://lure.sh/. alr has an open source web interface, licensed under the AGPLv3 (https://gitea.elara.ws/alr/alr-web), and it's available at https://gitflic.ru/project/xpamych/alr/.
--- ---
## Repositories ## Repositories
LURE's repos are git repositories that contain a directory for each package, with a `lure.sh` file inside. The `lure.sh` file tells LURE how to build the package and information about it. `lure.sh` scripts are similar to the AUR's PKGBUILD scripts. alr's repos are git repositories that contain a directory for each package, with a `alr.sh` file inside. The `alr.sh` file tells alr how to build the package and information about it. `alr.sh` scripts are similar to the AUR's PKGBUILD scripts.
--- ---
## Acknowledgements ## Acknowledgements
Thanks to the following projects for making LURE possible: Thanks to the following projects for making alr possible:
- https://github.com/mvdan/sh - https://github.com/mvdan/sh
- https://github.com/go-git/go-git - https://github.com/go-git/go-git

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 1,022 KiB

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,13 +23,13 @@ import (
"path/filepath" "path/filepath"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/osutils" "plemya-x.ru/alr/internal/osutils"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/build" "plemya-x.ru/alr/pkg/build"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
) )
var buildCmd = &cli.Command{ var buildCmd = &cli.Command{
@ -39,7 +39,7 @@ var buildCmd = &cli.Command{
&cli.StringFlag{ &cli.StringFlag{
Name: "script", Name: "script",
Aliases: []string{"s"}, Aliases: []string{"s"},
Value: "lure.sh", Value: "alr.sh",
Usage: "Path to the build script", Usage: "Path to the build script",
}, },
&cli.StringFlag{ &cli.StringFlag{
@ -59,7 +59,7 @@ var buildCmd = &cli.Command{
script := c.String("script") script := c.String("script")
if c.String("package") != "" { if c.String("package") != "" {
script = filepath.Join(config.GetPaths(ctx).RepoDir, c.String("package"), "lure.sh") script = filepath.Join(config.GetPaths(ctx).RepoDir, c.String("package"), "alr.sh")
} }
err := repos.Pull(ctx, config.Config(ctx).Repos) err := repos.Pull(ctx, config.Config(ctx).Repos)

View file

@ -1,8 +0,0 @@
# LURE Docs
- [Configuration](configuration.md)
- [Usage](usage.md)
- [Packages](packages)
- [Build Scripts](packages/build-scripts.md)
- [Package Conventions](packages/conventions.md)
- [Adding Packages to LURE's repo](packages/adding-packages.md)

View file

@ -1,44 +0,0 @@
# Configuration
This page describes the configuration of LURE
---
## Table of Contents
- [Config file](#config-file)
- [rootCmd](#rootcmd)
- [repo](#repo)
---
## File locations
| Path | Description
| --: | :--
| ~/.config/lure/lure.toml | Config file
| ~/.cache/lure/pkgs | here the packages are built and stored
| ~/.cache/lure/repo | here are the git repos with all the `lure.sh` files
| | Example: `~/.cache/lure/repo/default/itd-bin/lure.sh`
---
## Config file
### rootCmd
The `rootCmd` field in the config specifies which command should be used for privilege elevation. The default value is `sudo`.
### repo
The `repo` array in the config specifies which repos are added to LURE. Each repo must have a name and URL. A repo looks like this in the config:
```toml
[[repo]]
name = 'default'
url = 'https://github.com/Elara6331/lure-repo.git'
```
The `default` repo is added by default. Any amount of repos may be added.
---

View file

@ -1,5 +0,0 @@
# LURE Docs > Packages
- [Build Scripts](build-scripts.md)
- [Package Conventions](conventions.md)
- [Adding Packages to LURE's repo](adding-packages.md)

View file

@ -1,27 +0,0 @@
# Adding Packages to LURE's repo
## Requirements
- `go` (1.18+)
- `git`
- `lure-analyzer`
- `go install go.elara.ws/lure-repo-bot/cmd/lure-analyzer@latest`
- `shfmt`
- May be available in distro repos
- `go install mvdan.cc/sh/v3/cmd/shfmt@latest`
---
## How to test a package
To test packages you can first create [a `lure.sh` shell file](./build-scripts.md) and then run the `lure build` comand to build the local `lure.sh` file into a package for your distro (more info about the `build` command [here](./usage.md#build)). You can then install this file to your distro and test it.
## How to submit a package
LURE's repo is hosted on Github at https://github.com/Elara6331/lure-repo. In it, there are multiple directories each containing a `lure.sh` file. In order to add a package to LURE's repo, simply create a PR with a [build script](./build-scripts.md) and place it in a directory with the same name as the package.
Upon submitting the PR, [lure-repo-bot](https://github.com/Elara6331/lure-repo-bot) will pull your PR and analyze it, providing suggestions for fixes as review comments. If there are no problems, the bot will approve your changes. If there are issues, re-request review from the bot after you've finished applying the fixes and it will automatically review the PR again.
All scripts submitted to the LURE repo should be formatted with `shfmt`. If they are not properly formatted, Github Actions will add suggestions in the "Files Changed" tab of the PR.
Once your PR is merged, LURE will pull the changed repo and your package will be available for people to install.

View file

@ -1,499 +0,0 @@
# LURE Build Scripts
LURE uses build scripts similar to the AUR's PKGBUILDs. This is the documentation for those scripts.
---
## Table of Contents
- [Distro Overrides](#distro-overrides)
- [Variables](#variables)
- [name](#name)
- [version](#version)
- [release](#release)
- [epoch](#epoch)
- [desc](#desc)
- [homepage](#homepage)
- [maintainer](#maintainer)
- [architectures](#architectures)
- [licenses](#licenses)
- [provides](#provides)
- [conflicts](#conflicts)
- [deps](#deps)
- [build_deps](#build_deps)
- [opt_deps](#opt_deps)
- [replaces](#replaces)
- [sources](#sources)
- [checksums](#checksums)
- [backup](#backup)
- [scripts](#scripts)
- [Functions](#functions)
- [prepare](#prepare)
- [version](#version-1)
- [build](#build)
- [package](#package)
- [Environment Variables](#environment-variables)
- [DISTRO_NAME](#distro_name)
- [DISTRO_PRETTY_NAME](#distro_pretty_name)
- [DISTRO_ID](#distro_id)
- [DISTRO_VERSION_ID](#distro_version_id)
- [ARCH](#arch)
- [NCPU](#ncpu)
- [Helper Commands](#helper-commands)
- [install-binary](#install-binary)
- [install-systemd](#install-systemd)
- [install-systemd-user](#install-systemd-user)
- [install-config](#install-config)
- [install-license](#install-license)
- [install-completion](#install-completion)
- [install-manual](#install-manual)
- [install-desktop](#install-desktop)
- [install-library](#install-library)
- [git-version](#git-version)
---
## Distro Overrides
Allowing LURE to run on different distros provides some challenges. For example, some distros use different names for their packages. This is solved using distro overrides. Any variable or function used in a LURE build script may be overridden based on distro and CPU architecture. The way you do this is by appending the distro and/or architecture to the end of the name. For example, [ITD](https://gitea.elara.ws/Elara6331/itd) depends on the `pactl` command as well as DBus and BlueZ. These are named somewhat differently on different distros. For ITD, I use the following for the dependencies:
```bash
deps=('dbus' 'bluez' 'pulseaudio-utils')
deps_arch=('dbus' 'bluez' 'libpulse')
deps_opensuse=('dbus-1' 'bluez' 'pulseaudio-utils')
```
Appending `arch` and `opensuse` to the end causes LURE to use the appropriate array based on the distro. If on Arch Linux, it will use `deps_arch`. If on OpenSUSE, it will use `deps_opensuse`, and if on anything else, it will use `deps`.
Names are checked in the following order:
- $name_$architecture_$distro
- $name_$distro
- $name_$architecture
- $name
Distro detection is performed by reading the `/usr/lib/os-release` and `/etc/os-release` files.
### Like distros
Inside the `os-release` file, there is a list of "like" distros. LURE takes this into account. For example, if a script contains `deps_debian` but not `deps_ubuntu`, Ubuntu builds will use `deps_debian` because Ubuntu is based on debian.
Most specificity is preferred, so if both `deps_debian` and `deps_ubuntu` is provided, Ubuntu and all Ubuntu-based distros will use `deps_ubuntu` while Debian and all Debian-based distros
that are not Ubuntu-based will use `deps_debian`.
Like distros are disabled when using the `LURE_DISTRO` environment variable.
## Variables
Any variables marked with `(*)` are required
### name (*)
The `name` variable contains the name of the package described by the script.
### version (*)
The `version` variable contains the version of the package. This should be the same as the version used by the author upstream.
Versions are compared using the [rpmvercmp](https://fedoraproject.org/wiki/Archive:Tools/RPM/VersionComparison) algorithm.
### release (*)
The `release` number is meant to differentiate between different builds of the same package version, such as if the script is changed but the version stays the same. The `release` must be an integer.
### epoch
The `epoch` number forces the package to be considered newer than versions with a lower epoch. It is meant to be used if the versioning scheme can't be used to determine which package is newer. Its use is discouraged and it should only be used if necessary. The `epoch` must be a positive integer.
### desc
The `desc` field contains the description for the package. It should not contain any newlines.
### homepage
The `homepage` field contains the URL to the website of the project packaged by this script.
### maintainer
The `maintainer` field contains the name and email address of the person maintaining the package. Example:
```text
Elara Musayelyan <elara@elara.ws>
```
While LURE does not require this field to be set, Debian has deprecated unset maintainer fields, and may disallow their use in `.deb` packages in the future.
### architectures
The `architectures` array contains all the architectures that this package supports. These match Go's GOARCH list, except for a few differences.
The `all` architecture will be translated to the proper term for the packaging format. For example, it will be changed to `noarch` if building a `.rpm`, or `any` if building an Arch package.
Since multiple variations of the `arm` architecture exist, the following values should be used:
`arm5`: armv5
`arm6`: armv6
`arm7`: armv7
LURE will attempt to detect which variant your system is using by checking for the existence of various CPU features. If this yields the wrong result or if you simply want to build for a different variant, the `LURE_ARM_VARIANT` variable should be set to the ARM variant you want. Example:
```shell
LURE_ARM_VARIANT=arm5 lure install ...
```
### licenses
The `licenses` array contains the licenses used by this package. In order to standardize license names, values should be [SPDX Identifiers](https://spdx.org/licenses/) such as `Apache-2.0`, `MIT`, and `GPL-3.0-only`. If the project uses a license that is not standardized in SPDX, use the value `Custom`. If the project has multiple nonstandard licenses, include `Custom` as many times as there are nonstandard licenses.
### provides
The `provides` array specifies what features the package provides. For example, if two packages build `ffmpeg` with different build flags, they should both have `ffmpeg` in the `provides` array.
### conflicts
The `conflicts` array contains names of packages that conflict with the one built by this script. If two different packages contain the executable for `ffmpeg`, they cannot be installed at the same time, so they conflict. The `provides` array will also be checked, so this array generally contains the same values as `provides`.
### deps
The `deps` array contains the dependencies for the package. LURE repos will be checked first, and if the packages exist there, they will be built and installed. Otherwise, they will be installed from the system repos by your package manager.
### build_deps
The `build_deps` array contains the dependencies that are required to build the package. They will be installed before the build starts. Similarly to the `deps` array, LURE repos will be checked first.
### opt_deps
The `opt_deps` array contains optional dependencies for the package. A description can be added after ": ", but it's not required.
```bash
opt_deps_arch=(
'git: Download git repositories'
'aria2: Download files'
)
```
### replaces
The `replaces` array contains the packages that are replaced by this package. Generally, if package managers find a package with a `replaces` field set, they will remove the listed package(s) and install that one instead. This is only useful if the packages are being stored in a repo for your package manager.
### sources
The `sources` array contains URLs which are downloaded into `$srcdir` before the build starts.
If the URL provided is an archive or compressed file, it will be extracted. To disable this, add the `~archive=false` query parameter. Example:
Extracted:
```text
https://example.com/archive.tar.gz
```
Not extracted:
```text
https://example.com/archive.tar.gz?~archive=false
```
If the URL scheme starts with `git+`, the source will be downloaded as a git repo. The git download mode supports multiple parameters:
- `~rev`: Specify which revision of the repo to check out.
- `~depth`: Specify what depth should be used when cloning the repo. Must be an integer.
- `~name`: Specify the name of the directory into which the git repo should be cloned.
- `~recursive`: If set to true, submodules will be cloned recursively. It is false by default.
Examples:
```text
git+https://gitea.elara.ws/Elara6331/itd?~rev=resource-loading&~depth=1
```
```text
git+https://gitea.elara.ws/lure/lure?~rev=v0.0.1&~recursive=true
```
### checksums
The `checksums` array must be the same length as the `sources` array. It contains checksums for the source files. The files are checked against the checksums and the build fails if they don't match.
By default, checksums are expected to be sha256. To change the algorithm, add it before the hash with a colon in between. For example, `md5:bc0c6f5dcd06bddbca9a0163e4c9f2e1`. The following algorithms are currently supported: `sha256`, `sha224`, `sha512`, `sha384`, `sha1`, and `md5`.
To skip the check for a particular source, set the corresponding checksum to `SKIP`.
### backup
The `backup` array contains files that should be backed up when upgrading and removing. The exact behavior of this depends on your package manager. All files within this array must be full destination paths. For example, if there's a config called `config` in `/etc` that you want to back up, you'd set it like so:
```bash
backup=('/etc/config')
```
### scripts
The `scripts` variable contains a Bash associative array that specifies the location of various scripts relative to the build script. Example:
```bash
scripts=(
['preinstall']='preinstall.sh'
['postinstall']='postinstall.sh'
['preremove']='preremove.sh'
['postremove']='postremove.sh'
['preupgrade']='preupgrade.sh'
['postupgrade']='postupgrade.sh'
['pretrans']='pretrans.sh'
['posttrans']='posttrans.sh'
)
```
Note: The quotes are required due to limitations with the bash parser used.
The `preupgrade` and `postupgrade` scripts are only available in `.apk` and Arch Linux packages.
The `pretrans` and `posttrans` scripts are only available in `.rpm` packages.
The rest of the scripts are available in all packages.
---
## Functions
This section documents user-defined functions that can be added to build scripts. Any functions marked with `(*)` are required.
All functions are executed in the `$srcdir` directory
### version
The `version()` function updates the `version` variable. This allows for automatically deriving the version from sources. This is most useful for git packages, which usually don't need to be changed, so their `version` variable stays the same.
An example of using this for git:
```bash
version() {
cd "$srcdir/itd"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
```
The AUR equivalent is the [`pkgver()` function](https://wiki.archlinux.org/title/VCS_package_guidelines#The_pkgver()_function)
### prepare
The `prepare()` function is meant to prepare the sources for building and packaging. This is the function in which patches should be applied, for example, by the `patch` command, and where tools like `go generate` should be executed.
### build
The `build()` function is where the package is actually built. Use the same commands that would be used to manually compile the software. Often, this function is just one line:
```bash
build() {
make
}
```
### package (*)
The `package()` function is where the built files are placed into the directory that will be used by LURE to build the package.
Any files that should be installed on the filesystem should go in the `$pkgdir` directory in this function. For example, if you have a binary called `bin` that should be placed in `/usr/bin` and a config file called `bin.cfg` that should be placed in `/etc`, the `package()` function might look like this:
```bash
package() {
install -Dm755 bin ${pkgdir}/usr/bin/bin
install -Dm644 bin.cfg ${pkgdir}/etc/bin.cfg
}
```
---
## Environment Variables
LURE exposes several values as environment variables for use in build scripts.
### DISTRO_NAME
The `DISTRO_NAME` variable is the name of the distro as defined in its `os-release` file.
For example, it's set to `Fedora Linux` in a Fedora 36 docker image
### DISTRO_PRETTY_NAME
The `DISTRO_PRETTY_NAME` variable is the "pretty" name of the distro as defined in its `os-release` file.
For example, it's set to `Fedora Linux 36 (Container Image)` in a Fedora 36 docker image
### DISTRO_ID
The `DISTRO_ID` variable is the identifier of the distro as defined in its `os-release` file. This is the same as what LURE uses for overrides.
For example, it's set to `fedora` in a Fedora 36 docker image
### DISTRO_ID_LIKE
The `DISTRO_ID_LIKE` variable contains identifiers of similar distros to the one running, separated by spaces.
For example, it's set to `opensuse suse` in an OpenSUSE Tumbleweed docker image and `rhel fedora` in a CentOS 8 docker image.
### DISTRO_VERSION_ID
The `DISTRO_VERSION_ID` variable is the version identifier of the distro as defined in its `os-release` file.
For example, it's set to `36` in a Fedora 36 docker image and `11` in a Debian Bullseye docker image
### ARCH
The `ARCH` variable is the architecture of the machine running the script. It uses the same naming convention as the values in the `architectures` array
### NCPU
The `NCPU` variable is the amount of CPUs available on the machine running the script. It will be set to `8` on a quad core machine with hyperthreading, for example.
---
## Helper Commands
LURE provides various commands to help packagers create proper cross-distro packages. These commands should be used wherever possible instead of doing the tasks manually.
### install-binary
`install-binary` accepts 1-2 arguments. The first argument is the binary you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-binary ./itd
install-binary ./itd itd-2
```
### install-systemd
`install-systemd` installs regular systemd system services (see `install-systemd-user` for user services)
It accepts 1-2 arguments. The first argument is the service you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-systemd ./syncthing@.service
install-systemd-user ./syncthing@.service sync-thing@.service
```
### install-systemd-user
`install-systemd-user` installs systemd user services (services like `itd` meant to be started with `--user`).
It accepts 1-2 arguments. The first argument is the service you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-systemd-user ./itd.service
install-systemd-user ./itd.service infinitime-daemon.service
```
### install-config
`install-config` installs configuration files into the `/etc` directory
It accepts 1-2 arguments. The first argument is the config you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-config ./itd.toml
install-config ./itd.example.toml itd.toml
```
### install-license
`install-license` installs a license file
It accepts 1-2 arguments. The first argument is the config you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-license ./LICENSE itd/LICENSE
```
### install-completion
`install-completion` installs shell completions
It currently supports `bash`, `zsh`, and `fish`
Completions are read from stdin, so they can either be piped in or retrieved from files
Two arguments are required for this function. The first one is the name of the shell and the second is the name of the completion.
Examples:
```bash
./k9s completion fish | install-completion fish k9s
install-completion bash k9s <./k9s/completions/k9s.bash
```
### install-manual
`install-manual` installs manpages. It accepts a single argument, which is the path to the manpage.
The install path will be determined based on the number at the end of the filename. If a number cannot be extracted, an error will be returned.
Examples:
```bash
install-manual ./man/strelaysrv.1
install-manual ./mdoc.7
```
### install-desktop
`install-desktop` installs desktop files for applications. It accepts 1-2 arguments. The first argument is the config you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-desktop ./${name}/share/admc.desktop
install-desktop ./${name}/share/admc.desktop admc-app.desktop
```
### install-library
`install-library` installs shared and static libraries to the correct location.
This is the most important helper as it contains logic to figure out where to install libraries based on the target distro and CPU architecture. It should almost always be used to install all libraries.
It accepts 1-2 arguments. The first argument is the config you'd like to install. The second is the filename that should be used.
If the filename argument is not provided, tha name of the input file will be used.
Examples:
```bash
install-library ./${name}/build/libadldap.so
```
### git-version
`git-version` returns a version number based on the git revision of a repository.
If an argument is provided, it will be used as the path to the repo. Otherwise, the current directory will be used.
The version number will be the amount of revisions, a dot, and the short hash of the current revision. For example: `118.e4b8348`.
The AUR's convention includes an `r` at the beginning of the version number. This is ommitted because some distros expect the version number to start with a digit.
Examples:
```bash
git-version
git-version "$srcdir/itd"
```

View file

@ -1,36 +0,0 @@
# Package Conventions
## General
Packages should have the name(s) of what they contain in their `provides` and `conflicts` arrays. That way, they can be installed by users without needing to know the full package name. For example, there are two LURE packages for ITD: `itd-bin`, and `itd-git`. Both of them have provides and conflicts arrays specifying the two commands they install: `itd`, and `itctl`. This means that if a user wants to install ITD, they simply have to type `lure in itd` and LURE will prompt them for which one they want to install.
## Binary packages
Packages that install download and install precompiled binaries should have a `-bin` suffix.
## Git packages
Packages that build and install programs from source code cloned directly from Git should have a `-git` suffix.
The versions of these packages should consist of the amount of revisions followed by the current revision, separated by a period. For example: `183.80187b0`. Note that unlike the AUR, there is no `r` at the beginning. This is because some package managers refuse to install packages whose version numbers don't start with a digit.
This version number can be obtained using the following command:
```bash
printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
```
The `version()` function for such packages should use the LURE-provided `git-version` helper command, like so:
```bash
version() {
cd "$srcdir/$name"
git-version
}
```
This uses LURE's embedded Git implementation, which ensures that the user doesn't need Git installed on their system in order to install `-git` packages.
## Other packages
Packages that download sources for a specific version of a program should not have any suffix, even if those sources are downloaded from Git.

View file

@ -1,209 +0,0 @@
# Usage
## Table of Contents
- [Commands](#commands)
- [install](#install)
- [remove](#remove)
- [upgrade](#upgrade)
- [info](#info)
- [list](#list)
- [build](#build)
- [addrepo](#addrepo)
- [removerepo](#removerepo)
- [refresh](#refresh)
- [fix](#fix)
- [version](#version)
- [Environment Variables](#environment-variables)
- [LURE_DISTRO](#lure_distro)
- [LURE_PKG_FORMAT](#lure_pkg_format)
- [LURE_ARM_VARIANT](#lure_arm_variant)
---
## Commands
### install
The install command installs a package from the LURE repos. Any packages that aren't found in LURE's repos get forwarded to the system package manager for installation.
The package arguments do not have to be exact. LURE will check the `provides` array if an exact match is not found. There is also support for using "%" as a wildcard.
If multiple packages are found, you will be prompted to select which you want to install.
By default, if a package has already been built, LURE will install the cached package rather than re-build it. Use the `-c` or `--clean` flag to force a re-build.
Examples:
```shell
lure in itd-bin # only finds itd-bin
lure in itd # finds itd-bin and itd-git
lure in it% # finds itd-bin, itd-git, and itgui-git
lure in -c itd-bin
```
### remove
The remove command is for convenience. All it does is forwards the remove command to the system package manager.
Example:
```shell
lure rm firefox
```
### upgrade
The upgrade command looks through the packages installed on your system and sees if any of them match LURE repo packages. If they do, their versions are compared using the `rpmvercmp` algorithm. If LURE repos contain a newer version, the package is upgraded.
By default, if a package has already been built, LURE will install the cached package rather than re-build it. Use the `-c` or `--clean` flag to force a re-build.
Example:
```shell
lure up
```
### info
The info command displays information about a package in LURE's repos.
The package arguments do not have to be exact. LURE will check the `provides` array if an exact match is not found. There is also support for using "%" as a wildcard.
If multiple packages are found, you will be prompted to select which you want to show.
Example:
```shell
lure info itd-bin # only finds itd-bin
lure info itd # finds itd-bin and itd-git
lure info it% # finds itd-bin, itd-git, and itgui-git
```
### list
The list command lists all LURE repo packages as well as their versions
This command accepts a single optional argument. This argument is a pattern to filter found packages against.
The pattern does not have to be exact. LURE will check the `provides` array if an exact match is not found. There is also support for using "%" as a wildcard.
There is a `-I` or `--installed` flag that filters out any packages that are not installed on the system
Examples:
```shell
lure ls # lists all LURE packages
lure ls -I # lists all installed packages
lure ls i% # lists all packages starting with "i"
lure ls %d # lists all packages ending with "d"
lure ls -I i% # lists all installed packages that start with "i"
```
### build
The build command builds a package using a `lure.sh` build script in the current directory. The path to the script can be changed with the `-s` flag.
Example:
```shell
lure build
```
### addrepo
The addrepo command adds a repository to LURE if it doesn't already exist. The `-n` flag sets the name of the repository, and the `-u` flag is the URL to the repository. Both are required.
Example:
```shell
lure ar -n default -u https://github.com/Elara6331/lure-repo
```
### removerepo
The removerepo command removes a repository from LURE and deletes its contents if it exists. The `-n` flag specifies the name of the repo to be deleted.
Example:
```shell
lure rr -n default
```
### refresh
The refresh command pulls all changes from all LURE repos that have changed.
Example:
```shell
lure ref
```
### fix
The fix command attempts to fix issues with LURE by deleting and rebuilding LURE's cache
Example:
```shell
lure fix
```
### version
The version command returns the current LURE version and exits
Example:
```shell
lure version
```
---
## Environment Variables
### LURE_DISTRO
The `LURE_DISTRO` environment variable should be set to the distro for which the package should be built. It tells LURE which overrides to use. Values should be the same as the `ID` field in `/etc/os-release` or `/usr/lib/os-release`. Possible values include:
- `arch`
- `alpine`
- `opensuse`
- `debian`
### LURE_PKG_FORMAT
The `LURE_PKG_FORMAT` environment variable should be set to the packaging format that should be used. Valid values are:
- `archlinux`
- `apk`
- `rpm`
- `deb`
### LURE_ARM_VARIANT
The `LURE_ARM_VARIANT` environment variable dictates which ARM variant to build for, if LURE is running on an ARM system. Possible values include:
- `arm5`
- `arm6`
- `arm7`
---
## Cross-packaging for other Distributions
You can create packages for different distributions
setting the environment variables `LURE_DISTRO` and `LURE_PKG_FORMAT` as mentioned above.
Examples:
```
LURE_DISTRO=arch LURE_PKG_FORMAT=archlinux lure build
LURE_DISTRO=alpine LURE_PKG_FORMAT=apk lure build
LURE_DISTRO=opensuse LURE_PKG_FORMAT=rpm lure build
LURE_DISTRO=debian LURE_PKG_FORMAT=deb lure build
```
---

14
fix.go
View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -22,15 +22,15 @@ import (
"os" "os"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
) )
var fixCmd = &cli.Command{ var fixCmd = &cli.Command{
Name: "fix", Name: "fix",
Usage: "Attempt to fix problems with LURE", Usage: "Attempt to fix problems with ALR",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
ctx := c.Context ctx := c.Context
log := loggerctx.From(ctx) log := loggerctx.From(ctx)

6
gen.go
View file

@ -4,12 +4,12 @@ import (
"os" "os"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/pkg/gen" "plemya-x.ru/alr/pkg/gen"
) )
var genCmd = &cli.Command{ var genCmd = &cli.Command{
Name: "generate", Name: "generate",
Usage: "Generate a LURE script from a template", Usage: "Generate a ALR script from a template",
Aliases: []string{"gen"}, Aliases: []string{"gen"},
Subcommands: []*cli.Command{ Subcommands: []*cli.Command{
genPipCmd, genPipCmd,
@ -18,7 +18,7 @@ var genCmd = &cli.Command{
var genPipCmd = &cli.Command{ var genPipCmd = &cli.Command{
Name: "pip", Name: "pip",
Usage: "Generate a LURE script for a pip module", Usage: "Generate a ALR script for a pip module",
Flags: []cli.Flag{ Flags: []cli.Flag{
&cli.StringFlag{ &cli.StringFlag{
Name: "name", Name: "name",

2
go.mod
View file

@ -1,4 +1,4 @@
module lure.sh/lure module plemya-x.ru/alr
go 1.21 go 1.21

34
go.sum
View file

@ -1,3 +1,5 @@
lure.sh/fakeroot v0.0.0-20231024000108-b130d64a68ee h1:kSXIuMid56Q29WEl7EQb5QUtmGqQqAu66EZ2G0OSUfU=
lure.sh/fakeroot v0.0.0-20231024000108-b130d64a68ee/go.mod h1:/v0u0AZ+wbzUWhV02KzciOf1KFNh7/7rbkz5Z0b5gDA=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@ -22,6 +24,7 @@ github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1r
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
@ -59,6 +62,7 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4= github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4=
@ -72,6 +76,7 @@ github.com/bodgit/windows v1.0.0/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11 h1:IRrDwVlWQr6kS1U8/EtyA1+EHcc4yl8pndcqXWrEamg= github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11 h1:IRrDwVlWQr6kS1U8/EtyA1+EHcc4yl8pndcqXWrEamg=
github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11/go.mod h1:je2KZ+LxaCNvCoKg32jtOIULcFogJKcL1ZWUaIBjKj0= github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11/go.mod h1:je2KZ+LxaCNvCoKg32jtOIULcFogJKcL1ZWUaIBjKj0=
github.com/caarlos0/go-version v0.1.1/go.mod h1:Ze5Qx4TsBBi5FyrSKVg1Ibc44KGV/llAaKGp86oTwZ0=
github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8= github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8=
github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk= github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk=
github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM= github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM=
@ -81,6 +86,7 @@ github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5
github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc=
github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY= github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg= github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg=
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
github.com/charmbracelet/lipgloss v0.8.0 h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdyCQk84RU= github.com/charmbracelet/lipgloss v0.8.0 h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdyCQk84RU=
github.com/charmbracelet/lipgloss v0.8.0/go.mod h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU= github.com/charmbracelet/lipgloss v0.8.0/go.mod h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@ -118,6 +124,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA=
github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
@ -167,6 +174,7 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
github.com/google/rpmpack v0.5.0 h1:L16KZ3QvkFGpYhmp23iQip+mx1X39foEsqszjMNBm8A= github.com/google/rpmpack v0.5.0 h1:L16KZ3QvkFGpYhmp23iQip+mx1X39foEsqszjMNBm8A=
github.com/google/rpmpack v0.5.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI= github.com/google/rpmpack v0.5.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@ -190,18 +198,23 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/invopop/jsonschema v0.8.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@ -218,6 +231,7 @@ github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@ -227,10 +241,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
@ -263,12 +279,17 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM=
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34= github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34=
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4=
github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA=
github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
github.com/nwaples/rardecode/v2 v2.0.0-beta.2 h1:e3mzJFJs4k83GXBEiTaQ5HgSc/kOK8q0rDaRO0MPaOk= github.com/nwaples/rardecode/v2 v2.0.0-beta.2 h1:e3mzJFJs4k83GXBEiTaQ5HgSc/kOK8q0rDaRO0MPaOk=
@ -281,6 +302,7 @@ github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@ -299,6 +321,7 @@ github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUz
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE=
github.com/schollz/progressbar/v3 v3.13.1/go.mod h1:xvrbki8kfT1fzWzBT/UZd9L6GA+jdL7HAgq2RFnO6fQ= github.com/schollz/progressbar/v3 v3.13.1/go.mod h1:xvrbki8kfT1fzWzBT/UZd9L6GA+jdL7HAgq2RFnO6fQ=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
@ -306,15 +329,21 @@ github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM=
github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo=
github.com/smartystreets/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0ZxudX+ThRdWfU= github.com/smartystreets/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0ZxudX+ThRdWfU=
github.com/smartystreets/assertions v1.13.1/go.mod h1:cXr/IwVfSo/RbCSPhoAPv73p3hlSdrBH/b3SdnW/LMY= github.com/smartystreets/assertions v1.13.1/go.mod h1:cXr/IwVfSo/RbCSPhoAPv73p3hlSdrBH/b3SdnW/LMY=
github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w=
github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@ -328,6 +357,7 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw=
github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY=
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
@ -524,6 +554,7 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@ -563,6 +594,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@ -578,7 +610,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI=
lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
lure.sh/fakeroot v0.0.0-20231024000108-b130d64a68ee h1:kSXIuMid56Q29WEl7EQb5QUtmGqQqAu66EZ2G0OSUfU=
lure.sh/fakeroot v0.0.0-20231024000108-b130d64a68ee/go.mod h1:/v0u0AZ+wbzUWhV02KzciOf1KFNh7/7rbkz5Z0b5gDA= lure.sh/fakeroot v0.0.0-20231024000108-b130d64a68ee/go.mod h1:/v0u0AZ+wbzUWhV02KzciOf1KFNh7/7rbkz5Z0b5gDA=
modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw=
modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
@ -606,6 +637,7 @@ modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY=
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=
mvdan.cc/editorconfig v0.2.0/go.mod h1:lvnnD3BNdBYkhq+B4uBuFFKatfp02eB6HixDvEz91C0=
mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg= mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg=
mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8= mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=

View file

@ -6,17 +6,17 @@ import (
"strings" "strings"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/cpu" "plemya-x.ru/alr/internal/cpu"
"lure.sh/lure/internal/shutils/helpers" "plemya-x.ru/alr/internal/shutils/helpers"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
) )
var helperCmd = &cli.Command{ var helperCmd = &cli.Command{
Name: "helper", Name: "helper",
Usage: "Run a LURE helper command", Usage: "Run a ALR helper command",
ArgsUsage: `<helper_name|"list">`, ArgsUsage: `<helper_name|"list">`,
Subcommands: []*cli.Command{helperListCmd}, Subcommands: []*cli.Command{helperListCmd},
Flags: []cli.Flag{ Flags: []cli.Flag{

16
info.go
View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,12 +23,12 @@ import (
"os" "os"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/cliutils" "plemya-x.ru/alr/internal/cliutils"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/overrides" "plemya-x.ru/alr/internal/overrides"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -22,14 +22,14 @@ import (
"fmt" "fmt"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/cliutils" "plemya-x.ru/alr/internal/cliutils"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/build" "plemya-x.ru/alr/pkg/build"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
) )
var installCmd = &cli.Command{ var installCmd = &cli.Command{

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,11 +24,11 @@ import (
"strings" "strings"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/pager" "plemya-x.ru/alr/internal/pager"
"lure.sh/lure/internal/translations" "plemya-x.ru/alr/internal/translations"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
) )
// YesNoPrompt asks the user a yes or no question, using def as the default answer // YesNoPrompt asks the user a yes or no question, using def as the default answer

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,8 +24,8 @@ import (
"sync" "sync"
"github.com/pelletier/go-toml/v2" "github.com/pelletier/go-toml/v2"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
) )
var defaultConfig = &types.Config{ var defaultConfig = &types.Config{
@ -35,7 +35,7 @@ var defaultConfig = &types.Config{
Repos: []types.Repo{ Repos: []types.Repo{
{ {
Name: "default", Name: "default",
URL: "https://github.com/lure-sh/lure-repo.git", URL: "https://gitflic.ru/project/xpamych/xpamych-alr-repo.git",
}, },
}, },
} }
@ -45,7 +45,7 @@ var (
config *types.Config config *types.Config
) )
// Config returns a LURE configuration struct. // Config returns a ALR configuration struct.
// The first time it's called, it'll load the config from a file. // The first time it's called, it'll load the config from a file.
// Subsequent calls will just return the same value. // Subsequent calls will just return the same value.
func Config(ctx context.Context) *types.Config { func Config(ctx context.Context) *types.Config {

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@ import (
"strings" "strings"
"sync" "sync"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"golang.org/x/text/language" "golang.org/x/text/language"
) )

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -25,10 +25,10 @@ import (
"sync" "sync"
"github.com/pelletier/go-toml/v2" "github.com/pelletier/go-toml/v2"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
) )
// Paths contains various paths used by LURE // Paths contains various paths used by ALR
type Paths struct { type Paths struct {
ConfigDir string ConfigDir string
ConfigPath string ConfigPath string
@ -60,19 +60,19 @@ func GetPaths(ctx context.Context) *Paths {
log.Fatal("Unable to detect user config directory").Err(err).Send() log.Fatal("Unable to detect user config directory").Err(err).Send()
} }
paths.ConfigDir = filepath.Join(cfgDir, "lure") paths.ConfigDir = filepath.Join(cfgDir, "alr")
err = os.MkdirAll(paths.ConfigDir, 0o755) err = os.MkdirAll(paths.ConfigDir, 0o755)
if err != nil { if err != nil {
log.Fatal("Unable to create LURE config directory").Err(err).Send() log.Fatal("Unable to create ALR config directory").Err(err).Send()
} }
paths.ConfigPath = filepath.Join(paths.ConfigDir, "lure.toml") paths.ConfigPath = filepath.Join(paths.ConfigDir, "alr.toml")
if _, err := os.Stat(paths.ConfigPath); err != nil { if _, err := os.Stat(paths.ConfigPath); err != nil {
cfgFl, err := os.Create(paths.ConfigPath) cfgFl, err := os.Create(paths.ConfigPath)
if err != nil { if err != nil {
log.Fatal("Unable to create LURE config file").Err(err).Send() log.Fatal("Unable to create ALR config file").Err(err).Send()
} }
err = toml.NewEncoder(cfgFl).Encode(&defaultConfig) err = toml.NewEncoder(cfgFl).Encode(&defaultConfig)
@ -88,7 +88,7 @@ func GetPaths(ctx context.Context) *Paths {
log.Fatal("Unable to detect cache directory").Err(err).Send() log.Fatal("Unable to detect cache directory").Err(err).Send()
} }
paths.CacheDir = filepath.Join(cacheDir, "lure") paths.CacheDir = filepath.Join(cacheDir, "alr")
paths.RepoDir = filepath.Join(paths.CacheDir, "repo") paths.RepoDir = filepath.Join(paths.CacheDir, "repo")
paths.PkgsDir = filepath.Join(paths.CacheDir, "pkgs") paths.PkgsDir = filepath.Join(paths.CacheDir, "pkgs")

View file

@ -1,5 +1,5 @@
package config package config
// Version contains the version of LURE. If the version // Version contains the version of ALR. If the version
// isn't known, it'll be set to "unknown" // isn't known, it'll be set to "unknown"
var Version = "unknown" var Version = "unknown"

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -28,10 +28,10 @@ import (
"golang.org/x/sys/cpu" "golang.org/x/sys/cpu"
) )
// armVariant checks which variant of ARM lure is running // armVariant checks which variant of ARM alr is running
// on, by using the same detection method as Go itself // on, by using the same detection method as Go itself
func armVariant() string { func armVariant() string {
armEnv := os.Getenv("LURE_ARM_VARIANT") armEnv := os.Getenv("ALR_ARM_VARIANT")
// ensure value has "arm" prefix, such as arm5 or arm6 // ensure value has "arm" prefix, such as arm5 or arm6
if strings.HasPrefix(armEnv, "arm") { if strings.HasPrefix(armEnv, "arm") {
return armEnv return armEnv
@ -48,7 +48,7 @@ func armVariant() string {
// Arch returns the canonical CPU architecture of the system // Arch returns the canonical CPU architecture of the system
func Arch() string { func Arch() string {
arch := os.Getenv("LURE_ARCH") arch := os.Getenv("ALR_ARCH")
if arch == "" { if arch == "" {
arch = runtime.GOARCH arch = runtime.GOARCH
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -28,8 +28,8 @@ import (
"sync" "sync"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"modernc.org/sqlite" "modernc.org/sqlite"
) )
@ -42,7 +42,7 @@ func init() {
sqlite.MustRegisterScalarFunction("json_array_contains", 2, jsonArrayContains) sqlite.MustRegisterScalarFunction("json_array_contains", 2, jsonArrayContains)
} }
// Package is a LURE package's database representation // Package is a ALR package's database representation
type Package struct { type Package struct {
Name string `sh:"name,required" db:"name"` Name string `sh:"name,required" db:"name"`
Version string `sh:"version,required" db:"version"` Version string `sh:"version,required" db:"version"`
@ -72,7 +72,7 @@ var (
closed = true closed = true
) )
// DB returns the LURE database. // DB returns the ALR database.
// The first time it's called, it opens the SQLite database file. // The first time it's called, it opens the SQLite database file.
// Subsequent calls return the same connection. // Subsequent calls return the same connection.
func DB(ctx context.Context) *sqlx.DB { func DB(ctx context.Context) *sqlx.DB {
@ -147,7 +147,7 @@ func initDB(ctx context.Context, dsn string) error {
UNIQUE(name, repository) UNIQUE(name, repository)
); );
CREATE TABLE IF NOT EXISTS lure_db_version ( CREATE TABLE IF NOT EXISTS alr_db_version (
version INT NOT NULL version INT NOT NULL
); );
`) `)
@ -161,7 +161,7 @@ func initDB(ctx context.Context, dsn string) error {
reset(ctx) reset(ctx)
return initDB(ctx, dsn) return initDB(ctx, dsn)
} else if !ok { } else if !ok {
log.Warn("Database version does not exist. Run lure fix if something isn't working.").Send() log.Warn("Database version does not exist. Run alr fix if something isn't working.").Send()
return addVersion(ctx, CurrentVersion) return addVersion(ctx, CurrentVersion)
} }
@ -174,7 +174,7 @@ func reset(ctx context.Context) error {
if err != nil { if err != nil {
return err return err
} }
_, err = DB(ctx).ExecContext(ctx, "DROP TABLE IF EXISTS lure_db_version;") _, err = DB(ctx).ExecContext(ctx, "DROP TABLE IF EXISTS alr_db_version;")
return err return err
} }
@ -192,7 +192,7 @@ func IsEmpty(ctx context.Context) bool {
// whether the database contained a version number // whether the database contained a version number
func GetVersion(ctx context.Context) (int, bool) { func GetVersion(ctx context.Context) (int, bool) {
var ver version var ver version
err := DB(ctx).GetContext(ctx, &ver, "SELECT * FROM lure_db_version LIMIT 1;") err := DB(ctx).GetContext(ctx, &ver, "SELECT * FROM alr_db_version LIMIT 1;")
if err != nil { if err != nil {
return 0, false return 0, false
} }
@ -200,7 +200,7 @@ func GetVersion(ctx context.Context) (int, bool) {
} }
func addVersion(ctx context.Context, ver int) error { func addVersion(ctx context.Context, ver int) error {
_, err := DB(ctx).ExecContext(ctx, `INSERT INTO lure_db_version(version) VALUES (?);`, ver) _, err := DB(ctx).ExecContext(ctx, `INSERT INTO alr_db_version(version) VALUES (?);`, ver)
return err return err
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@ import (
"testing" "testing"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
) )
var testPkg = db.Package{ var testPkg = db.Package{
@ -37,10 +37,10 @@ var testPkg = db.Package{
"ru": "Проверочный пакет", "ru": "Проверочный пакет",
}), }),
Homepage: db.NewJSON(map[string]string{ Homepage: db.NewJSON(map[string]string{
"en": "https://lure.sh/", "en": "https://gitflic.ru/project/xpamych/alr/",
}), }),
Maintainer: db.NewJSON(map[string]string{ Maintainer: db.NewJSON(map[string]string{
"en": "Elara Musayelyan <elara@elara.ws>", "en": "Евгений Храмов <xpamych@yandex.ru>",
"ru": "Элара Мусаелян <elara@elara.ws>", "ru": "Элара Мусаелян <elara@elara.ws>",
}), }),
Architectures: db.NewJSON([]string{"arm64", "amd64"}), Architectures: db.NewJSON([]string{"arm64", "amd64"}),

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -39,11 +39,11 @@ import (
"golang.org/x/crypto/blake2b" "golang.org/x/crypto/blake2b"
"golang.org/x/crypto/blake2s" "golang.org/x/crypto/blake2s"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"lure.sh/lure/internal/dlcache" "plemya-x.ru/alr/internal/dlcache"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
) )
const manifestFileName = ".lure_cache_manifest" const manifestFileName = ".alr_cache_manifest"
// ErrChecksumMismatch occurs when the checksum of a downloaded file // ErrChecksumMismatch occurs when the checksum of a downloaded file
// does not match the expected checksum provided in the Options struct. // does not match the expected checksum provided in the Options struct.

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -33,7 +33,7 @@ import (
"github.com/mholt/archiver/v4" "github.com/mholt/archiver/v4"
"github.com/schollz/progressbar/v3" "github.com/schollz/progressbar/v3"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
) )
// FileDownloader downloads files using HTTP // FileDownloader downloads files using HTTP

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -26,7 +26,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
) )
// BasePath returns the base path of the download cache // BasePath returns the base path of the download cache

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -27,12 +27,12 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/dlcache" "plemya-x.ru/alr/internal/dlcache"
) )
func init() { func init() {
dir, err := os.MkdirTemp("/tmp", "lure-dlcache-test.*") dir, err := os.MkdirTemp("/tmp", "alr-dlcache-test.*")
if err != nil { if err != nil {
panic(err) panic(err)
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -22,9 +22,9 @@ import (
"reflect" "reflect"
"strings" "strings"
"lure.sh/lure/internal/cpu" "plemya-x.ru/alr/internal/cpu"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"golang.org/x/text/language" "golang.org/x/text/language"
) )
@ -146,7 +146,7 @@ func (o *Opts) WithLanguageTags(langs []string) *Opts {
return out return out
} }
// ResolvedPackage is a LURE package after its overrides // ResolvedPackage is a ALR package after its overrides
// have been resolved // have been resolved
type ResolvedPackage struct { type ResolvedPackage struct {
Name string `sh:"name"` Name string `sh:"name"`

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,8 +23,8 @@ import (
"reflect" "reflect"
"testing" "testing"
"lure.sh/lure/internal/overrides" "plemya-x.ru/alr/internal/overrides"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"golang.org/x/text/language" "golang.org/x/text/language"
) )
@ -90,8 +90,8 @@ func TestResolveName(t *testing.T) {
} }
func TestResolveArch(t *testing.T) { func TestResolveArch(t *testing.T) {
os.Setenv("LURE_ARCH", "arm7") os.Setenv("ALR_ARCH", "arm7")
defer os.Setenv("LURE_ARCH", "") defer os.Setenv("ALR_ARCH", "")
names, err := overrides.Resolve(info, &overrides.Opts{ names, err := overrides.Resolve(info, &overrides.Opts{
Name: "deps", Name: "deps",

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -25,8 +25,8 @@ import (
"strings" "strings"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"lure.sh/lure/internal/overrides" "plemya-x.ru/alr/internal/overrides"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -27,8 +27,8 @@ import (
"strings" "strings"
"testing" "testing"
"lure.sh/lure/internal/shutils/decoder" "plemya-x.ru/alr/internal/shutils/decoder"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
) )
@ -56,8 +56,8 @@ const testScript = `
release=1 release=1
epoch=2 epoch=2
desc="Test package" desc="Test package"
homepage='https://lure.arsenm.dev' homepage='https://gitflic.ru/project/xpamych/alr'
maintainer='Arsen Musayelyan <arsen@arsenm.dev>' maintainer='Евгений Храмов <xpamych@yandex.ru>'
architectures=('arm64' 'amd64') architectures=('arm64' 'amd64')
license=('GPL-3.0-or-later') license=('GPL-3.0-or-later')
provides=('test') provides=('test')
@ -87,7 +87,7 @@ var osRelease = &distro.OSRelease{
func TestDecodeVars(t *testing.T) { func TestDecodeVars(t *testing.T) {
ctx := context.Background() ctx := context.Background()
fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "lure.sh") fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "alr.sh")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }
@ -116,7 +116,7 @@ func TestDecodeVars(t *testing.T) {
Release: 1, Release: 1,
Epoch: 2, Epoch: 2,
Description: "Test package", Description: "Test package",
Homepage: "https://lure.arsenm.dev", Homepage: "https://gitflic.ru/project/xpamych/alr",
Maintainer: "Arsen Musayelyan <arsen@arsenm.dev>", Maintainer: "Arsen Musayelyan <arsen@arsenm.dev>",
Architectures: []string{"arm64", "amd64"}, Architectures: []string{"arm64", "amd64"},
Licenses: []string{"GPL-3.0-or-later"}, Licenses: []string{"GPL-3.0-or-later"},
@ -139,7 +139,7 @@ func TestDecodeVarsMissing(t *testing.T) {
name='test' name='test'
epoch=2 epoch=2
desc="Test package" desc="Test package"
homepage='https://lure.arsenm.dev' homepage='https://gitflic.ru/project/xpamych/alr'
maintainer='Arsen Musayelyan <arsen@arsenm.dev>' maintainer='Arsen Musayelyan <arsen@arsenm.dev>'
architectures=('arm64' 'amd64') architectures=('arm64' 'amd64')
license=('GPL-3.0-or-later') license=('GPL-3.0-or-later')
@ -162,7 +162,7 @@ func TestDecodeVarsMissing(t *testing.T) {
} }
` `
fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "lure.sh") fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "alr.sh")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }
@ -191,7 +191,7 @@ func TestDecodeVarsMissing(t *testing.T) {
func TestGetFunc(t *testing.T) { func TestGetFunc(t *testing.T) {
ctx := context.Background() ctx := context.Background()
fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "lure.sh") fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "alr.sh")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,9 +23,9 @@ import (
"strings" "strings"
"testing" "testing"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"lure.sh/lure/internal/shutils/decoder" "plemya-x.ru/alr/internal/shutils/decoder"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
) )
@ -36,8 +36,8 @@ const testScript = `
release=1 release=1
epoch=2 epoch=2
desc="Test package" desc="Test package"
homepage='https://lure.sh' homepage='https://gitflic.ru/project/xpamych/alr'
maintainer='Elara Musayelyan <elara@elara.ws>' maintainer='Евгений Храмов <xpamych@yandex.ru>'
architectures=('arm64' 'amd64') architectures=('arm64' 'amd64')
license=('GPL-3.0-or-later') license=('GPL-3.0-or-later')
provides=('test') provides=('test')
@ -68,7 +68,7 @@ var osRelease = &distro.OSRelease{
func TestExecFuncs(t *testing.T) { func TestExecFuncs(t *testing.T) {
ctx := context.Background() ctx := context.Background()
fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "lure.sh") fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "alr.sh")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -25,7 +25,7 @@ import (
"strings" "strings"
"testing" "testing"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
) )
@ -33,7 +33,7 @@ import (
func TestNopExec(t *testing.T) { func TestNopExec(t *testing.T) {
ctx := context.Background() ctx := context.Background()
fl, err := syntax.NewParser().Parse(strings.NewReader(`/bin/echo test`), "lure.sh") fl, err := syntax.NewParser().Parse(strings.NewReader(`/bin/echo test`), "alr.sh")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -31,7 +31,7 @@ import (
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object" "github.com/go-git/go-git/v5/plumbing/object"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
) )
@ -186,7 +186,7 @@ var usrLibDistros = []string{
// Based on CMake's GNUInstallDirs // Based on CMake's GNUInstallDirs
func getLibPrefix(hc interp.HandlerContext) string { func getLibPrefix(hc interp.HandlerContext) string {
if dir, ok := os.LookupEnv("LURE_LIB_DIR"); ok { if dir, ok := os.LookupEnv("ALR_LIB_DIR"); ok {
return dir return dir
} }

View file

@ -120,7 +120,7 @@ value = 'Building package metadata'
[[translation]] [[translation]]
id = 3121791194 id = 3121791194
value = 'Running LURE as root is forbidden as it may cause catastrophic damage to your system' value = 'Running ALR as root is forbidden as it may cause catastrophic damage to your system'
[[translation]] [[translation]]
id = 1256604213 id = 1256604213

View file

@ -116,7 +116,7 @@ value = 'Создание метаданных пакета'
[[translation]] [[translation]]
id = 3121791194 id = 3121791194
value = 'Запуск LURE от имени root запрещен, так как это может привести к катастрофическому повреждению вашей системы' value = 'Запуск ALR от имени root запрещен, так как это может привести к катастрофическому повреждению вашей системы'
[[translation]] [[translation]]
id = 1256604213 id = 1256604213

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@ import (
"sync" "sync"
"go.elara.ws/logger" "go.elara.ws/logger"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"go.elara.ws/translate" "go.elara.ws/translate"
"golang.org/x/text/language" "golang.org/x/text/language"
) )

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -18,7 +18,7 @@
package types package types
import "lure.sh/lure/pkg/manager" import "plemya-x.ru/alr/pkg/manager"
type BuildOpts struct { type BuildOpts struct {
Script string Script string

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -18,7 +18,7 @@
package types package types
// Config represents the LURE configuration file // Config represents the ALR configuration file
type Config struct { type Config struct {
RootCmd string `toml:"rootCmd"` RootCmd string `toml:"rootCmd"`
PagerStyle string `toml:"pagerStyle"` PagerStyle string `toml:"pagerStyle"`
@ -27,7 +27,7 @@ type Config struct {
Unsafe Unsafe `toml:"unsafe"` Unsafe Unsafe `toml:"unsafe"`
} }
// Repo represents a LURE repo within a configuration file // Repo represents a ALR repo within a configuration file
type Repo struct { type Repo struct {
Name string `toml:"name"` Name string `toml:"name"`
URL string `toml:"url"` URL string `toml:"url"`

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -18,7 +18,7 @@
package types package types
// RepoConfig represents a LURE repo's lure-repo.toml file. // RepoConfig represents a ALR repo's alr-repo.toml file.
type RepoConfig struct { type RepoConfig struct {
Repo struct { Repo struct {
MinVersion string `toml:"minVersion"` MinVersion string `toml:"minVersion"`

16
list.go
View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -22,17 +22,17 @@ import (
"fmt" "fmt"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
) )
var listCmd = &cli.Command{ var listCmd = &cli.Command{
Name: "list", Name: "list",
Usage: "List LURE repo packages", Usage: "List ALR repo packages",
Aliases: []string{"ls"}, Aliases: []string{"ls"},
Flags: []cli.Flag{ Flags: []cli.Flag{
&cli.BoolFlag{ &cli.BoolFlag{

24
main.go
View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -28,16 +28,16 @@ import (
"github.com/mattn/go-isatty" "github.com/mattn/go-isatty"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"go.elara.ws/logger" "go.elara.ws/logger"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/translations" "plemya-x.ru/alr/internal/translations"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
) )
var app = &cli.App{ var app = &cli.App{
Name: "lure", Name: "alr",
Usage: "Linux User REpository", Usage: "Any Linux Repository",
Flags: []cli.Flag{ Flags: []cli.Flag{
&cli.StringFlag{ &cli.StringFlag{
Name: "pm-args", Name: "pm-args",
@ -72,7 +72,7 @@ var app = &cli.App{
cmd := c.Args().First() cmd := c.Args().First()
if cmd != "helper" && !config.Config(ctx).Unsafe.AllowRunAsRoot && os.Geteuid() == 0 { if cmd != "helper" && !config.Config(ctx).Unsafe.AllowRunAsRoot && os.Geteuid() == 0 {
log.Fatal("Running LURE as root is forbidden as it may cause catastrophic damage to your system").Send() log.Fatal("Running ALR as root is forbidden as it may cause catastrophic damage to your system").Send()
} }
if trimmed := strings.TrimSpace(c.String("pm-args")); trimmed != "" { if trimmed := strings.TrimSpace(c.String("pm-args")); trimmed != "" {
@ -90,7 +90,7 @@ var app = &cli.App{
var versionCmd = &cli.Command{ var versionCmd = &cli.Command{
Name: "version", Name: "version",
Usage: "Print the current LURE version and exit", Usage: "Print the current ALR version and exit",
Action: func(ctx *cli.Context) error { Action: func(ctx *cli.Context) error {
println(config.Version) println(config.Version)
return nil return nil
@ -102,7 +102,7 @@ func main() {
log := translations.NewLogger(ctx, logger.NewCLI(os.Stderr), config.Language(ctx)) log := translations.NewLogger(ctx, logger.NewCLI(os.Stderr), config.Language(ctx))
ctx = loggerctx.With(ctx, log) ctx = loggerctx.With(ctx, log)
// Set the root command to the one set in the LURE config // Set the root command to the one set in the ALR config
manager.DefaultRootCmd = config.Config(ctx).RootCmd manager.DefaultRootCmd = config.Config(ctx).RootCmd
ctx, cancel := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM) ctx, cancel := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM)

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -39,19 +39,19 @@ import (
"github.com/goreleaser/nfpm/v2" "github.com/goreleaser/nfpm/v2"
"github.com/goreleaser/nfpm/v2/files" "github.com/goreleaser/nfpm/v2/files"
"lure.sh/lure/internal/cliutils" "plemya-x.ru/alr/internal/cliutils"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/cpu" "plemya-x.ru/alr/internal/cpu"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/dl" "plemya-x.ru/alr/internal/dl"
"lure.sh/lure/internal/shutils/decoder" "plemya-x.ru/alr/internal/shutils/decoder"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"lure.sh/lure/internal/shutils/helpers" "plemya-x.ru/alr/internal/shutils/helpers"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
@ -140,7 +140,7 @@ func BuildPackage(ctx context.Context, opts types.BuildOpts) ([]string, []string
return nil, nil, err return nil, nil, err
} }
builtPaths, builtNames, repoDeps, err := buildLUREDeps(ctx, opts, vars) builtPaths, builtNames, repoDeps, err := buildALRDeps(ctx, opts, vars)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -213,7 +213,7 @@ func parseScript(info *distro.OSRelease, script string) (*syntax.File, error) {
} }
defer fl.Close() defer fl.Close()
file, err := syntax.NewParser().Parse(fl, "lure.sh") file, err := syntax.NewParser().Parse(fl, "alr.sh")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -373,10 +373,10 @@ func installOptDeps(ctx context.Context, vars *types.BuildVars, opts types.Build
return nil return nil
} }
// buildLUREDeps builds all the LURE dependencies of the package. It returns the paths and names // buildALRDeps builds all the ALR dependencies of the package. It returns the paths and names
// of the packages it built, as well as all the dependencies it didn't find in the LURE repo so // of the packages it built, as well as all the dependencies it didn't find in the ALR repo so
// they can be installed from the system repos. // they can be installed from the system repos.
func buildLUREDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVars) (builtPaths, builtNames, repoDeps []string, err error) { func buildALRDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildVars) (builtPaths, builtNames, repoDeps []string, err error) {
log := loggerctx.From(ctx) log := loggerctx.From(ctx)
if len(vars.Depends) > 0 { if len(vars.Depends) > 0 {
log.Info("Installing dependencies").Send() log.Info("Installing dependencies").Send()
@ -417,7 +417,7 @@ func buildLUREDeps(ctx context.Context, opts types.BuildOpts, vars *types.BuildV
return builtPaths, builtNames, repoDeps, nil return builtPaths, builtNames, repoDeps, nil
} }
// executeFunctions executes the special LURE functions, such as version(), prepare(), etc. // executeFunctions executes the special ALR functions, such as version(), prepare(), etc.
func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Directories, vars *types.BuildVars) (err error) { func executeFunctions(ctx context.Context, dec *decoder.Decoder, dirs types.Directories, vars *types.BuildVars) (err error) {
log := loggerctx.From(ctx) log := loggerctx.From(ctx)
version, ok := dec.GetFunc("version") version, ok := dec.GetFunc("version")
@ -663,10 +663,10 @@ func pkgFileName(vars *types.BuildVars, pkgFormat string) (string, error) {
} }
// getPkgFormat returns the package format of the package manager, // getPkgFormat returns the package format of the package manager,
// or LURE_PKG_FORMAT if that's set. // or ALR_PKG_FORMAT if that's set.
func getPkgFormat(mgr manager.Manager) string { func getPkgFormat(mgr manager.Manager) string {
pkgFormat := mgr.Format() pkgFormat := mgr.Format()
if format, ok := os.LookupEnv("LURE_PKG_FORMAT"); ok { if format, ok := os.LookupEnv("ALR_PKG_FORMAT"); ok {
pkgFormat = format pkgFormat = format
} }
return pkgFormat return pkgFormat

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -22,15 +22,15 @@ import (
"context" "context"
"path/filepath" "path/filepath"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
) )
// InstallPkgs installs native packages via the package manager, // InstallPkgs installs native packages via the package manager,
// then builds and installs the LURE packages // then builds and installs the ALR packages
func InstallPkgs(ctx context.Context, lurePkgs []db.Package, nativePkgs []string, opts types.BuildOpts) { func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
log := loggerctx.From(ctx) log := loggerctx.From(ctx)
if len(nativePkgs) > 0 { if len(nativePkgs) > 0 {
@ -40,7 +40,7 @@ func InstallPkgs(ctx context.Context, lurePkgs []db.Package, nativePkgs []string
} }
} }
InstallScripts(ctx, GetScriptPaths(ctx, lurePkgs), opts) InstallScripts(ctx, GetScriptPaths(ctx, alrPkgs), opts)
} }
// GetScriptPaths returns a slice of script paths corresponding to the // GetScriptPaths returns a slice of script paths corresponding to the
@ -48,13 +48,13 @@ func InstallPkgs(ctx context.Context, lurePkgs []db.Package, nativePkgs []string
func GetScriptPaths(ctx context.Context, pkgs []db.Package) []string { func GetScriptPaths(ctx context.Context, pkgs []db.Package) []string {
var scripts []string var scripts []string
for _, pkg := range pkgs { for _, pkg := range pkgs {
scriptPath := filepath.Join(config.GetPaths(ctx).RepoDir, pkg.Repository, pkg.Name, "lure.sh") scriptPath := filepath.Join(config.GetPaths(ctx).RepoDir, pkg.Repository, pkg.Name, "alr.sh")
scripts = append(scripts, scriptPath) scripts = append(scripts, scriptPath)
} }
return scripts return scripts
} }
// InstallScripts builds and installs the given LURE build scripts // InstallScripts builds and installs the given alr build scripts
func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) { func InstallScripts(ctx context.Context, scripts []string, opts types.BuildOpts) {
log := loggerctx.From(ctx) log := loggerctx.From(ctx)
for _, script := range scripts { for _, script := range scripts {

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,7 +23,7 @@ import (
"os" "os"
"strings" "strings"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
@ -103,11 +103,11 @@ func ParseOSRelease(ctx context.Context) (*OSRelease, error) {
} }
distroUpdated := false distroUpdated := false
if distID, ok := os.LookupEnv("LURE_DISTRO"); ok { if distID, ok := os.LookupEnv("ALR_DISTRO"); ok {
out.ID = distID out.ID = distID
} }
if distLike, ok := os.LookupEnv("LURE_DISTRO_LIKE"); ok { if distLike, ok := os.LookupEnv("ALR_DISTRO_LIKE"); ok {
out.Like = strings.Split(distLike, " ") out.Like = strings.Split(distLike, " ")
} else if runner.Vars["ID_LIKE"].IsSet() && !distroUpdated { } else if runner.Vars["ID_LIKE"].IsSet() && !distroUpdated {
out.Like = strings.Split(runner.Vars["ID_LIKE"].Str, " ") out.Like = strings.Split(runner.Vars["ID_LIKE"].Str, " ")

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -21,7 +21,7 @@ package repos
import ( import (
"context" "context"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
) )
// FindPkgs looks for packages matching the inputs inside the database. // FindPkgs looks for packages matching the inputs inside the database.

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,9 +24,9 @@ import (
"strings" "strings"
"testing" "testing"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
) )
func TestFindPkgs(t *testing.T) { func TestFindPkgs(t *testing.T) {
@ -44,7 +44,7 @@ func TestFindPkgs(t *testing.T) {
err = repos.Pull(ctx, []types.Repo{ err = repos.Pull(ctx, []types.Repo{
{ {
Name: "default", Name: "default",
URL: "https://github.com/Arsen6331/lure-repo.git", URL: "https://gitflic.ru/project/xpamych/xpamych-alr-repo.git",
}, },
}) })
if err != nil { if err != nil {

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -35,13 +35,13 @@ import (
"github.com/go-git/go-git/v5/plumbing/format/diff" "github.com/go-git/go-git/v5/plumbing/format/diff"
"github.com/pelletier/go-toml/v2" "github.com/pelletier/go-toml/v2"
"go.elara.ws/vercmp" "go.elara.ws/vercmp"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/shutils/decoder" "plemya-x.ru/alr/internal/shutils/decoder"
"lure.sh/lure/internal/shutils/handlers" "plemya-x.ru/alr/internal/shutils/handlers"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/expand"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
@ -50,7 +50,7 @@ import (
// Pull pulls the provided repositories. If a repo doesn't exist, it will be cloned // Pull pulls the provided repositories. If a repo doesn't exist, it will be cloned
// and its packages will be written to the DB. If it does exist, it will be pulled. // and its packages will be written to the DB. If it does exist, it will be pulled.
// In this case, only changed packages will be processed if possible. // In this case, only changed packages will be processed if possible.
// If repos is set to nil, the repos in the LURE config will be used. // If repos is set to nil, the repos in the ALR config will be used.
func Pull(ctx context.Context, repos []types.Repo) error { func Pull(ctx context.Context, repos []types.Repo) error {
log := loggerctx.From(ctx) log := loggerctx.From(ctx)
@ -143,9 +143,9 @@ func Pull(ctx context.Context, repos []types.Repo) error {
repoFS = osfs.New(repoDir) repoFS = osfs.New(repoDir)
} }
fl, err := repoFS.Open("lure-repo.toml") fl, err := repoFS.Open("alr-repo.toml")
if err != nil { if err != nil {
log.Warn("Git repository does not appear to be a valid LURE repo").Str("repo", repo.Name).Send() log.Warn("Git repository does not appear to be a valid ALR repo").Str("repo", repo.Name).Send()
continue continue
} }
@ -161,7 +161,7 @@ func Pull(ctx context.Context, repos []types.Repo) error {
// to compare it to the repo version, so only compare versions with the "v". // to compare it to the repo version, so only compare versions with the "v".
if strings.HasPrefix(config.Version, "v") { if strings.HasPrefix(config.Version, "v") {
if vercmp.Compare(config.Version, repoCfg.Repo.MinVersion) == -1 { if vercmp.Compare(config.Version, repoCfg.Repo.MinVersion) == -1 {
log.Warn("LURE repo's minumum LURE version is greater than the current version. Try updating LURE if something doesn't work.").Str("repo", repo.Name).Send() 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()
} }
} }
} }
@ -255,7 +255,7 @@ func processRepoChanges(ctx context.Context, repo types.Repo, r *git.Repository,
switch action.Type { switch action.Type {
case actionDelete: case actionDelete:
if filepath.Base(action.File) != "lure.sh" { if filepath.Base(action.File) != "alr.sh" {
continue continue
} }
@ -280,8 +280,8 @@ func processRepoChanges(ctx context.Context, repo types.Repo, r *git.Repository,
return err return err
} }
case actionUpdate: case actionUpdate:
if filepath.Base(action.File) != "lure.sh" { if filepath.Base(action.File) != "alr.sh" {
action.File = filepath.Join(filepath.Dir(action.File), "lure.sh") action.File = filepath.Join(filepath.Dir(action.File), "alr.sh")
} }
scriptFl, err := newCommit.File(action.File) scriptFl, err := newCommit.File(action.File)
@ -322,7 +322,7 @@ func processRepoChanges(ctx context.Context, repo types.Repo, r *git.Repository,
// isValid makes sure the path of the file being updated is valid. // isValid makes sure the path of the file being updated is valid.
// It checks to make sure the file is not within a nested directory // It checks to make sure the file is not within a nested directory
// and that it is called lure.sh. // and that it is called alr.sh.
func isValid(from, to diff.File) bool { func isValid(from, to diff.File) bool {
var path string var path string
if from != nil { if from != nil {
@ -337,7 +337,7 @@ func isValid(from, to diff.File) bool {
} }
func processRepoFull(ctx context.Context, repo types.Repo, repoDir string) error { func processRepoFull(ctx context.Context, repo types.Repo, repoDir string) error {
glob := filepath.Join(repoDir, "/*/lure.sh") glob := filepath.Join(repoDir, "/*/alr.sh")
matches, err := filepath.Glob(glob) matches, err := filepath.Glob(glob)
if err != nil { if err != nil {
return err return err
@ -391,7 +391,7 @@ func processRepoFull(ctx context.Context, repo types.Repo, repoDir string) error
func parseScript(ctx context.Context, parser *syntax.Parser, runner *interp.Runner, r io.ReadCloser, pkg *db.Package) error { func parseScript(ctx context.Context, parser *syntax.Parser, runner *interp.Runner, r io.ReadCloser, pkg *db.Package) error {
defer r.Close() defer r.Close()
fl, err := parser.Parse(r, "lure.sh") fl, err := parser.Parse(r, "alr.sh")
if err != nil { if err != nil {
return err return err
} }

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * alr - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,10 +24,10 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
) )
func setCfgDirs(t *testing.T) { func setCfgDirs(t *testing.T) {
@ -36,7 +36,7 @@ func setCfgDirs(t *testing.T) {
paths := config.GetPaths() paths := config.GetPaths()
var err error var err error
paths.CacheDir, err = os.MkdirTemp("/tmp", "lure-pull-test.*") paths.CacheDir, err = os.MkdirTemp("/tmp", "alr-pull-test.*")
if err != nil { if err != nil {
t.Fatalf("Expected no error, got %s", err) t.Fatalf("Expected no error, got %s", err)
} }
@ -81,7 +81,7 @@ func TestPull(t *testing.T) {
err = repos.Pull(ctx, []types.Repo{ err = repos.Pull(ctx, []types.Repo{
{ {
Name: "default", Name: "default",
URL: "https://github.com/Arsen6331/lure-repo.git", URL: "https://gitflic.ru/project/xpamych/xpamych-alr-repo.git",
}, },
}) })
if err != nil { if err != nil {

View file

@ -10,8 +10,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
) )
// Filter represents search filters. // Filter represents search filters.
@ -35,7 +35,7 @@ const (
SortByVersion SortByVersion
) )
// Package represents a package from LURE's database // Package represents a package from ALR's database
type Package struct { type Package struct {
Name string Name string
Version string Version string
@ -155,7 +155,7 @@ func GetScript(ctx context.Context, repo, name string) (io.ReadCloser, error) {
return nil, ErrInvalidArgument return nil, ErrInvalidArgument
} }
scriptPath := filepath.Join(config.GetPaths(ctx).RepoDir, repo, name, "lure.sh") scriptPath := filepath.Join(config.GetPaths(ctx).RepoDir, repo, name, "alr.sh")
fl, err := os.Open(scriptPath) fl, err := os.Open(scriptPath)
if errors.Is(err, fs.ErrNotExist) { if errors.Is(err, fs.ErrNotExist) {
return nil, ErrScriptNotFound return nil, ErrScriptNotFound

14
repo.go
View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -24,11 +24,11 @@ import (
"github.com/pelletier/go-toml/v2" "github.com/pelletier/go-toml/v2"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
) )

View file

@ -1,4 +1,4 @@
#compdef lure #compdef alr
_cli_zsh_autocomplete() { _cli_zsh_autocomplete() {
local -a opts local -a opts
@ -17,4 +17,4 @@ _cli_zsh_autocomplete() {
fi fi
} }
compdef _cli_zsh_autocomplete lure compdef _cli_zsh_autocomplete alr

39
scripts/install.sh Normal file → Executable file
View file

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# LURE - Linux User REpository # ALR - Any Linux Repository
# Copyright (C) 2023 Elara Musayelyan # Copyright (C) 2024 Евгений Храмов
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -36,7 +36,7 @@ installPkg() {
elif command -v sudo &>/dev/null; then elif command -v sudo &>/dev/null; then
rootCmd="sudo" rootCmd="sudo"
else else
warn "No privilege elevation command (e.g. sudo, doas) detected" warn "Команда повышения привилегий (например, sudo, do as) не обнаружена"
fi fi
case $1 in case $1 in
@ -48,52 +48,53 @@ installPkg() {
} }
if ! command -v curl &>/dev/null; then if ! command -v curl &>/dev/null; then
error "This script requires the curl command. Please install it and run again." error "Для этого скрипта требуется команда curl. Пожалуйста, установите его и запустите снова."
fi fi
pkgFormat="" pkgFormat=""
pkgMgr="" pkgMgr=""
if command -v pacman &>/dev/null; then if command -v pacman &>/dev/null; then
info "Detected pacman" info "Обнаружен pacman"
pkgFormat="pkg.tar.zst" pkgFormat="pkg.tar.zst"
pkgMgr="pacman" pkgMgr="pacman"
elif command -v apt &>/dev/null; then elif command -v apt &>/dev/null; then
info "Detected apt" info "Обнаружен apt"
pkgFormat="deb" pkgFormat="deb"
pkgMgr="apt" pkgMgr="apt"
elif command -v dnf &>/dev/null; then elif command -v dnf &>/dev/null; then
info "Detected dnf" info "Обнаружен dnf"
pkgFormat="rpm" pkgFormat="rpm"
pkgMgr="dnf" pkgMgr="dnf"
elif command -v yum &>/dev/null; then elif command -v yum &>/dev/null; then
info "Detected yum" info "Обнаружен yum"
pkgFormat="rpm" pkgFormat="rpm"
pkgMgr="yum" pkgMgr="yum"
elif command -v zypper &>/dev/null; then elif command -v zypper &>/dev/null; then
info "Detected zypper" info "Обнаружен zypper"
pkgFormat="rpm" pkgFormat="rpm"
pkgMgr="zypper" pkgMgr="zypper"
elif command -v apk &>/dev/null; then elif command -v apk &>/dev/null; then
info "Detected apk" info "Обнаружен apk"
pkgFormat="apk" pkgFormat="apk"
pkgMgr="apk" pkgMgr="apk"
else else
error "No supported package manager detected!" error "Не обнаружен поддерживаемый пакетный менеджер!"
fi fi
latestVersion=$(curl -sI 'https://gitea.elara.ws/lure/lure/releases/latest' | grep -io 'location: .*' | rev | cut -d '/' -f1 | rev | tr -d '[:space:]') latestVersion=$(curl -sI 'https://gitflic.ru/project/xpamych/alr/release/latest' | grep -io 'location: .*' | rev | cut -d '/' -f1 | rev | tr -d '[:space:]')
info "Found latest LURE version:" $latestVersion info "Найдена последняя версия ALR:" $latestVersion
fname="$(mktemp -u -p /tmp "lure.XXXXXXXXXX").${pkgFormat}" fname="$(mktemp -u -p /tmp "alr.XXXXXXXXXX").${pkgFormat}"
url="https://gitea.elara.ws/lure/lure/releases/download/${latestVersion}/linux-user-repository-${latestVersion#v}-linux-$(uname -m).${pkgFormat}" url="https://registry.gitflic.ru/project/xpamych/alr/package/-/generic/alr-linux-x86-64/{version}/{file}"
https://gitflic.ru/project/xpamych/alr/releases/download/${latestVersion}/linux-user-repository-${latestVersion#v}-linux-$(uname -m).${pkgFormat}"
info "Downloading LURE package" info "Скачивается пакет ALR"
curl -L $url -o $fname curl -L $url -o $fname
info "Installing LURE package" info "Устанавливается ALR"
installPkg $pkgMgr $fname installPkg $pkgMgr $fname
info "Cleaning up" info "Очистка"
rm $fname rm $fname
info "Done!" info "Готово!"

View file

@ -1,6 +1,6 @@
/* /*
* LURE - Linux User REpository * ALR - Any Linux Repository
* Copyright (C) 2023 Elara Musayelyan * Copyright (C) 2024 Евгений Храмов
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -23,14 +23,14 @@ import (
"fmt" "fmt"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"lure.sh/lure/internal/config" "plemya-x.ru/alr/internal/config"
"lure.sh/lure/internal/db" "plemya-x.ru/alr/internal/db"
"lure.sh/lure/internal/types" "plemya-x.ru/alr/internal/types"
"lure.sh/lure/pkg/build" "plemya-x.ru/alr/pkg/build"
"lure.sh/lure/pkg/distro" "plemya-x.ru/alr/pkg/distro"
"lure.sh/lure/pkg/loggerctx" "plemya-x.ru/alr/pkg/loggerctx"
"lure.sh/lure/pkg/manager" "plemya-x.ru/alr/pkg/manager"
"lure.sh/lure/pkg/repos" "plemya-x.ru/alr/pkg/repos"
"go.elara.ws/vercmp" "go.elara.ws/vercmp"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"