mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 23:37:18 +00:00
add ability to override pacman mirror in devtools configuration
This commit also extends configuration of the multilib option, adding the ability to exlcude multilib repository from repositories list Note, that in order to support repository list and mirror correctly, alpm configuration section is now architectture specific
This commit is contained in:
parent
30b9bcb45a
commit
616a1950ae
@ -5,8 +5,10 @@ ENV AHRIMAN_ARCHITECTURE="x86_64"
|
|||||||
ENV AHRIMAN_DEBUG=""
|
ENV AHRIMAN_DEBUG=""
|
||||||
ENV AHRIMAN_FORCE_ROOT=""
|
ENV AHRIMAN_FORCE_ROOT=""
|
||||||
ENV AHRIMAN_HOST="0.0.0.0"
|
ENV AHRIMAN_HOST="0.0.0.0"
|
||||||
|
ENV AHRIMAN_MULTILIB="yes"
|
||||||
ENV AHRIMAN_OUTPUT="syslog"
|
ENV AHRIMAN_OUTPUT="syslog"
|
||||||
ENV AHRIMAN_PACKAGER="ahriman bot <ahriman@example.com>"
|
ENV AHRIMAN_PACKAGER="ahriman bot <ahriman@example.com>"
|
||||||
|
ENV AHRIMAN_PACMAN_MIRROR=""
|
||||||
ENV AHRIMAN_PORT=""
|
ENV AHRIMAN_PORT=""
|
||||||
ENV AHRIMAN_REPOSITORY="aur-clone"
|
ENV AHRIMAN_REPOSITORY="aur-clone"
|
||||||
ENV AHRIMAN_REPOSITORY_ROOT="/var/lib/ahriman/ahriman"
|
ENV AHRIMAN_REPOSITORY_ROOT="/var/lib/ahriman/ahriman"
|
||||||
|
@ -39,6 +39,12 @@ chown "$AHRIMAN_USER":"$AHRIMAN_USER" "$AHRIMAN_GNUPG_HOME"
|
|||||||
AHRIMAN_SETUP_ARGS=("--build-as-user" "$AHRIMAN_USER")
|
AHRIMAN_SETUP_ARGS=("--build-as-user" "$AHRIMAN_USER")
|
||||||
AHRIMAN_SETUP_ARGS+=("--packager" "$AHRIMAN_PACKAGER")
|
AHRIMAN_SETUP_ARGS+=("--packager" "$AHRIMAN_PACKAGER")
|
||||||
AHRIMAN_SETUP_ARGS+=("--repository" "$AHRIMAN_REPOSITORY")
|
AHRIMAN_SETUP_ARGS+=("--repository" "$AHRIMAN_REPOSITORY")
|
||||||
|
if [ -z "$AHRIMAN_MULTILIB" ]; then
|
||||||
|
AHRIMAN_SETUP_ARGS+=("--no-multilib")
|
||||||
|
fi
|
||||||
|
if [ -n "$AHRIMAN_PACMAN_MIRROR" ]; then
|
||||||
|
AHRIMAN_SETUP_ARGS+=("--mirror" "$AHRIMAN_PACMAN_MIRROR")
|
||||||
|
fi
|
||||||
if [ -n "$AHRIMAN_PORT" ]; then
|
if [ -n "$AHRIMAN_PORT" ]; then
|
||||||
AHRIMAN_SETUP_ARGS+=("--web-port" "$AHRIMAN_PORT")
|
AHRIMAN_SETUP_ARGS+=("--web-port" "$AHRIMAN_PORT")
|
||||||
fi
|
fi
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.TH AHRIMAN "1" "2023\-01\-11" "ahriman" "Generated Python Manual"
|
.TH AHRIMAN "1" "2023\-01\-13" "ahriman" "Generated Python Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ahriman
|
ahriman
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -621,7 +621,7 @@ key server for key import
|
|||||||
.SH COMMAND \fI\,'ahriman service\-setup'\/\fR
|
.SH COMMAND \fI\,'ahriman service\-setup'\/\fR
|
||||||
usage: ahriman service\-setup [\-h] [\-\-build\-as\-user BUILD_AS_USER] [\-\-build\-command BUILD_COMMAND]
|
usage: ahriman service\-setup [\-h] [\-\-build\-as\-user BUILD_AS_USER] [\-\-build\-command BUILD_COMMAND]
|
||||||
[\-\-from\-configuration FROM_CONFIGURATION] [\-\-makeflags\-jobs | \-\-no\-makeflags\-jobs]
|
[\-\-from\-configuration FROM_CONFIGURATION] [\-\-makeflags\-jobs | \-\-no\-makeflags\-jobs]
|
||||||
[\-\-multilib | \-\-no\-multilib] \-\-packager PACKAGER \-\-repository REPOSITORY
|
[\-\-mirror MIRROR] [\-\-multilib | \-\-no\-multilib] \-\-packager PACKAGER \-\-repository REPOSITORY
|
||||||
[\-\-sign\-key SIGN_KEY] [\-\-sign\-target {disabled,packages,repository}] [\-\-web\-port WEB_PORT]
|
[\-\-sign\-key SIGN_KEY] [\-\-sign\-target {disabled,packages,repository}] [\-\-web\-port WEB_PORT]
|
||||||
[\-\-web\-unix\-socket WEB_UNIX_SOCKET]
|
[\-\-web\-unix\-socket WEB_UNIX_SOCKET]
|
||||||
|
|
||||||
@ -644,6 +644,10 @@ path to default devtools pacman configuration
|
|||||||
\fB\-\-makeflags\-jobs\fR, \fB\-\-no\-makeflags\-jobs\fR
|
\fB\-\-makeflags\-jobs\fR, \fB\-\-no\-makeflags\-jobs\fR
|
||||||
append MAKEFLAGS variable with parallelism set to number of cores (default: True)
|
append MAKEFLAGS variable with parallelism set to number of cores (default: True)
|
||||||
|
|
||||||
|
.TP
|
||||||
|
\fB\-\-mirror\fR \fI\,MIRROR\/\fR
|
||||||
|
use the specified explicitly mirror instead of including mirrorlist
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-multilib\fR, \fB\-\-no\-multilib\fR
|
\fB\-\-multilib\fR, \fB\-\-no\-multilib\fR
|
||||||
add or do not multilib repository (default: True)
|
add or do not multilib repository (default: True)
|
||||||
|
@ -56,11 +56,11 @@ _shtab_ahriman_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
|
|||||||
_shtab_ahriman_repo_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
|
_shtab_ahriman_repo_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
|
||||||
_shtab_ahriman_service_key_import_option_strings=('-h' '--help' '--key-server')
|
_shtab_ahriman_service_key_import_option_strings=('-h' '--help' '--key-server')
|
||||||
_shtab_ahriman_key_import_option_strings=('-h' '--help' '--key-server')
|
_shtab_ahriman_key_import_option_strings=('-h' '--help' '--key-server')
|
||||||
_shtab_ahriman_service_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
_shtab_ahriman_service_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--mirror' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
||||||
_shtab_ahriman_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
_shtab_ahriman_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--mirror' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
||||||
_shtab_ahriman_repo_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
_shtab_ahriman_repo_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--mirror' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
||||||
_shtab_ahriman_repo_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
_shtab_ahriman_repo_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--mirror' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
||||||
_shtab_ahriman_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
_shtab_ahriman_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--mirror' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
|
||||||
_shtab_ahriman_service_shell_option_strings=('-h' '--help')
|
_shtab_ahriman_service_shell_option_strings=('-h' '--help')
|
||||||
_shtab_ahriman_shell_option_strings=('-h' '--help')
|
_shtab_ahriman_shell_option_strings=('-h' '--help')
|
||||||
_shtab_ahriman_user_add_option_strings=('-h' '--help' '-p' '--password' '-r' '--role' '-s' '--secure')
|
_shtab_ahriman_user_add_option_strings=('-h' '--help' '-p' '--password' '-r' '--role' '-s' '--secure')
|
||||||
|
@ -164,6 +164,7 @@ _shtab_ahriman_init_options=(
|
|||||||
"--build-command[build command prefix]:build_command:"
|
"--build-command[build command prefix]:build_command:"
|
||||||
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
||||||
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
||||||
|
"--mirror[use the specified explicitly mirror instead of including mirrorlist]:mirror:"
|
||||||
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
||||||
"--packager[packager name and email]:packager:"
|
"--packager[packager name and email]:packager:"
|
||||||
"--repository[repository name]:repository:"
|
"--repository[repository name]:repository:"
|
||||||
@ -315,6 +316,7 @@ _shtab_ahriman_repo_init_options=(
|
|||||||
"--build-command[build command prefix]:build_command:"
|
"--build-command[build command prefix]:build_command:"
|
||||||
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
||||||
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
||||||
|
"--mirror[use the specified explicitly mirror instead of including mirrorlist]:mirror:"
|
||||||
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
||||||
"--packager[packager name and email]:packager:"
|
"--packager[packager name and email]:packager:"
|
||||||
"--repository[repository name]:repository:"
|
"--repository[repository name]:repository:"
|
||||||
@ -353,6 +355,7 @@ _shtab_ahriman_repo_setup_options=(
|
|||||||
"--build-command[build command prefix]:build_command:"
|
"--build-command[build command prefix]:build_command:"
|
||||||
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
||||||
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
||||||
|
"--mirror[use the specified explicitly mirror instead of including mirrorlist]:mirror:"
|
||||||
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
||||||
"--packager[packager name and email]:packager:"
|
"--packager[packager name and email]:packager:"
|
||||||
"--repository[repository name]:repository:"
|
"--repository[repository name]:repository:"
|
||||||
@ -439,6 +442,7 @@ _shtab_ahriman_service_setup_options=(
|
|||||||
"--build-command[build command prefix]:build_command:"
|
"--build-command[build command prefix]:build_command:"
|
||||||
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
||||||
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
||||||
|
"--mirror[use the specified explicitly mirror instead of including mirrorlist]:mirror:"
|
||||||
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
||||||
"--packager[packager name and email]:packager:"
|
"--packager[packager name and email]:packager:"
|
||||||
"--repository[repository name]:repository:"
|
"--repository[repository name]:repository:"
|
||||||
@ -459,6 +463,7 @@ _shtab_ahriman_setup_options=(
|
|||||||
"--build-command[build command prefix]:build_command:"
|
"--build-command[build command prefix]:build_command:"
|
||||||
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
|
||||||
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
|
||||||
|
"--mirror[use the specified explicitly mirror instead of including mirrorlist]:mirror:"
|
||||||
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
|
||||||
"--packager[packager name and email]:packager:"
|
"--packager[packager name and email]:packager:"
|
||||||
"--repository[repository name]:repository:"
|
"--repository[repository name]:repository:"
|
||||||
|
@ -32,7 +32,7 @@ Base configuration settings.
|
|||||||
``alpm`` group
|
``alpm`` group
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
libalpm and AUR related configuration.
|
libalpm and AUR related configuration. Group name can refer to architecture, e.g. ``alpm:x86_64`` can be used for x86_64 architecture specific settings.
|
||||||
|
|
||||||
* ``database`` - path to pacman system database cache, string, required.
|
* ``database`` - path to pacman system database cache, string, required.
|
||||||
* ``mirror`` - package database mirror used by pacman for syncronization, string, required. This option supports standard pacman substitutions with ``$arch`` and ``$repo``. Note that the mentioned mirror should contain all repositories which are set by ``alpm.repositories`` option.
|
* ``mirror`` - package database mirror used by pacman for syncronization, string, required. This option supports standard pacman substitutions with ``$arch`` and ``$repo``. Note that the mentioned mirror should contain all repositories which are set by ``alpm.repositories`` option.
|
||||||
|
@ -393,6 +393,7 @@ The following environment variables are supported:
|
|||||||
* ``AHRIMAN_HOST`` - host for the web interface, default is ``0.0.0.0``.
|
* ``AHRIMAN_HOST`` - host for the web interface, default is ``0.0.0.0``.
|
||||||
* ``AHRIMAN_OUTPUT`` - controls logging handler, e.g. ``syslog``, ``console``. The name must be found in logging configuration. Note that if ``syslog`` (the default) handler is used you will need to mount ``/dev/log`` inside container because it is not available there.
|
* ``AHRIMAN_OUTPUT`` - controls logging handler, e.g. ``syslog``, ``console``. The name must be found in logging configuration. Note that if ``syslog`` (the default) handler is used you will need to mount ``/dev/log`` inside container because it is not available there.
|
||||||
* ``AHRIMAN_PACKAGER`` - packager name from which packages will be built, default is ``ahriman bot <ahriman@example.com>``.
|
* ``AHRIMAN_PACKAGER`` - packager name from which packages will be built, default is ``ahriman bot <ahriman@example.com>``.
|
||||||
|
* ``AHRIMAN_PACMAN_MIRROR`` - override pacman mirror server if set.
|
||||||
* ``AHRIMAN_PORT`` - HTTP server port if any, default is empty.
|
* ``AHRIMAN_PORT`` - HTTP server port if any, default is empty.
|
||||||
* ``AHRIMAN_REPOSITORY`` - repository name, default is ``aur-clone``.
|
* ``AHRIMAN_REPOSITORY`` - repository name, default is ``aur-clone``.
|
||||||
* ``AHRIMAN_REPOSITORY_ROOT`` - repository root. Because of filesystem rights it is required to override default repository root. By default, it uses ``ahriman`` directory inside ahriman's home, which can be passed as mount volume.
|
* ``AHRIMAN_REPOSITORY_ROOT`` - repository root. Because of filesystem rights it is required to override default repository root. By default, it uses ``ahriman`` directory inside ahriman's home, which can be passed as mount volume.
|
||||||
|
@ -818,6 +818,7 @@ def _set_service_setup_parser(root: SubParserAction) -> argparse.ArgumentParser:
|
|||||||
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
|
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
|
||||||
parser.add_argument("--makeflags-jobs", help="append MAKEFLAGS variable with parallelism set to number of cores",
|
parser.add_argument("--makeflags-jobs", help="append MAKEFLAGS variable with parallelism set to number of cores",
|
||||||
action=argparse.BooleanOptionalAction, default=True)
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
|
parser.add_argument("--mirror", help="use the specified explicitly mirror instead of including mirrorlist")
|
||||||
parser.add_argument("--multilib", help="add or do not multilib repository",
|
parser.add_argument("--multilib", help="add or do not multilib repository",
|
||||||
action=argparse.BooleanOptionalAction, default=True)
|
action=argparse.BooleanOptionalAction, default=True)
|
||||||
parser.add_argument("--packager", help="packager name and email", required=True)
|
parser.add_argument("--packager", help="packager name and email", required=True)
|
||||||
|
@ -21,7 +21,7 @@ import argparse
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pwd import getpwuid
|
from pwd import getpwuid
|
||||||
from typing import Type
|
from typing import Optional, Type
|
||||||
|
|
||||||
from ahriman.application.application import Application
|
from ahriman.application.application import Application
|
||||||
from ahriman.application.handlers import Handler
|
from ahriman.application.handlers import Handler
|
||||||
@ -58,15 +58,14 @@ class Setup(Handler):
|
|||||||
report(bool): force enable or disable reporting
|
report(bool): force enable or disable reporting
|
||||||
unsafe(bool): if set no user check will be performed before path creation
|
unsafe(bool): if set no user check will be performed before path creation
|
||||||
"""
|
"""
|
||||||
Setup.configuration_create_ahriman(args, architecture, args.repository, configuration.include,
|
Setup.configuration_create_ahriman(args, architecture, args.repository, configuration)
|
||||||
configuration.repository_paths)
|
|
||||||
configuration.reload()
|
configuration.reload()
|
||||||
|
|
||||||
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
|
|
||||||
Setup.configuration_create_makepkg(args.packager, args.makeflags_jobs, application.repository.paths)
|
Setup.configuration_create_makepkg(args.packager, args.makeflags_jobs, application.repository.paths)
|
||||||
Setup.executable_create(application.repository.paths, args.build_command, architecture)
|
Setup.executable_create(application.repository.paths, args.build_command, architecture)
|
||||||
Setup.configuration_create_devtools(args.build_command, architecture, args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, architecture, args.from_configuration, args.mirror,
|
||||||
args.multilib, args.repository, application.repository.paths)
|
args.multilib, args.repository, application.repository.paths)
|
||||||
Setup.configuration_create_sudo(application.repository.paths, args.build_command, architecture)
|
Setup.configuration_create_sudo(application.repository.paths, args.build_command, architecture)
|
||||||
|
|
||||||
@ -91,7 +90,7 @@ class Setup(Handler):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def configuration_create_ahriman(args: argparse.Namespace, architecture: str, repository: str,
|
def configuration_create_ahriman(args: argparse.Namespace, architecture: str, repository: str,
|
||||||
include_path: Path, paths: RepositoryPaths) -> None:
|
root: Configuration) -> None:
|
||||||
"""
|
"""
|
||||||
create service specific configuration
|
create service specific configuration
|
||||||
|
|
||||||
@ -99,37 +98,41 @@ class Setup(Handler):
|
|||||||
args(argparse.Namespace): command line args
|
args(argparse.Namespace): command line args
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
repository(str): repository name
|
repository(str): repository name
|
||||||
include_path(Path): path to directory with configuration includes
|
root(Configuration): root configuration instance
|
||||||
paths(RepositoryPaths): repository paths instance
|
|
||||||
"""
|
"""
|
||||||
configuration = Configuration()
|
configuration = Configuration()
|
||||||
|
|
||||||
section = Configuration.section_name("build", architecture)
|
section = Configuration.section_name("build", architecture)
|
||||||
build_command = Setup.build_command(paths.root, args.build_command, architecture)
|
build_command = Setup.build_command(root.repository_paths.root, args.build_command, architecture)
|
||||||
configuration.set_option(section, "build_command", str(build_command))
|
configuration.set_option(section, "build_command", str(build_command))
|
||||||
configuration.set_option("repository", "name", repository)
|
configuration.set_option("repository", "name", repository)
|
||||||
if args.build_as_user is not None:
|
if args.build_as_user is not None:
|
||||||
configuration.set_option(section, "makechrootpkg_flags", f"-U {args.build_as_user}")
|
configuration.set_option(section, "makechrootpkg_flags", f"-U {args.build_as_user}")
|
||||||
|
|
||||||
if args.sign_key is not None:
|
section = Configuration.section_name("alpm", architecture)
|
||||||
|
if args.mirror is not None:
|
||||||
|
configuration.set_option(section, "mirror", args.mirror)
|
||||||
|
if not args.multilib:
|
||||||
|
repositories = filter(lambda r: r != "multilib", root.getlist("alpm", "repositories"))
|
||||||
|
configuration.set_option(section, "repositories", " ".join(repositories))
|
||||||
|
|
||||||
section = Configuration.section_name("sign", architecture)
|
section = Configuration.section_name("sign", architecture)
|
||||||
|
if args.sign_key is not None:
|
||||||
configuration.set_option(section, "target", " ".join([target.name.lower() for target in args.sign_target]))
|
configuration.set_option(section, "target", " ".join([target.name.lower() for target in args.sign_target]))
|
||||||
configuration.set_option(section, "key", args.sign_key)
|
configuration.set_option(section, "key", args.sign_key)
|
||||||
|
|
||||||
|
section = Configuration.section_name("web", architecture)
|
||||||
if args.web_port is not None:
|
if args.web_port is not None:
|
||||||
section = Configuration.section_name("web", architecture)
|
|
||||||
configuration.set_option(section, "port", str(args.web_port))
|
configuration.set_option(section, "port", str(args.web_port))
|
||||||
|
|
||||||
if args.web_unix_socket is not None:
|
if args.web_unix_socket is not None:
|
||||||
section = Configuration.section_name("web", architecture)
|
|
||||||
configuration.set_option(section, "unix_socket", str(args.web_unix_socket))
|
configuration.set_option(section, "unix_socket", str(args.web_unix_socket))
|
||||||
|
|
||||||
target = include_path / "00-setup-overrides.ini"
|
target = root.include / "00-setup-overrides.ini"
|
||||||
with target.open("w") as ahriman_configuration:
|
with target.open("w") as ahriman_configuration:
|
||||||
configuration.write(ahriman_configuration)
|
configuration.write(ahriman_configuration)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def configuration_create_devtools(prefix: str, architecture: str, source: Path,
|
def configuration_create_devtools(prefix: str, architecture: str, source: Path, mirror: Optional[str],
|
||||||
multilib: bool, repository: str, paths: RepositoryPaths) -> None:
|
multilib: bool, repository: str, paths: RepositoryPaths) -> None:
|
||||||
"""
|
"""
|
||||||
create configuration for devtools based on ``source`` configuration
|
create configuration for devtools based on ``source`` configuration
|
||||||
@ -141,6 +144,7 @@ class Setup(Handler):
|
|||||||
prefix(str): command prefix in {prefix}-{architecture}-build
|
prefix(str): command prefix in {prefix}-{architecture}-build
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
source(Path): path to source configuration file
|
source(Path): path to source configuration file
|
||||||
|
mirror(Optional[str]): link to package server mirror
|
||||||
multilib(bool): add or do not multilib repository to the configuration
|
multilib(bool): add or do not multilib repository to the configuration
|
||||||
repository(str): repository name
|
repository(str): repository name
|
||||||
paths(RepositoryPaths): repository paths instance
|
paths(RepositoryPaths): repository paths instance
|
||||||
@ -163,6 +167,14 @@ class Setup(Handler):
|
|||||||
if multilib:
|
if multilib:
|
||||||
configuration.set_option("multilib", "Include", str(Setup.MIRRORLIST_PATH))
|
configuration.set_option("multilib", "Include", str(Setup.MIRRORLIST_PATH))
|
||||||
|
|
||||||
|
# override Include option to Server in case if mirror option set
|
||||||
|
if mirror is not None:
|
||||||
|
for section in filter(lambda s: s != "options", configuration.sections()):
|
||||||
|
if configuration.get(section, "Include", fallback=None) != str(Setup.MIRRORLIST_PATH):
|
||||||
|
continue
|
||||||
|
configuration.remove_option(section, "Include")
|
||||||
|
configuration.set_option(section, "Server", mirror)
|
||||||
|
|
||||||
# add repository itself
|
# add repository itself
|
||||||
configuration.set_option(repository, "SigLevel", "Optional TrustAll") # we don't care
|
configuration.set_option(repository, "SigLevel", "Optional TrustAll") # we don't care
|
||||||
configuration.set_option(repository, "Server", f"file://{paths.repository}")
|
configuration.set_option(repository, "Server", f"file://{paths.repository}")
|
||||||
|
@ -45,8 +45,8 @@ class Pacman(LazyLogging):
|
|||||||
Args:
|
Args:
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
refresh_database(int): synchronize local cache to remote. If set to ``0``, no syncronization will be
|
refresh_database(int): synchronize local cache to remote. If set to ``0``, no synchronization will be
|
||||||
enabled, if set to ``1`` - normal syncronization, if set to ``2`` - force syncronization
|
enabled, if set to ``1`` - normal synchronization, if set to ``2`` - force synchronization
|
||||||
"""
|
"""
|
||||||
self.__create_handle_fn: Callable[[], Handle] = lambda: self.__create_handle(
|
self.__create_handle_fn: Callable[[], Handle] = lambda: self.__create_handle(
|
||||||
architecture, configuration, refresh_database=refresh_database)
|
architecture, configuration, refresh_database=refresh_database)
|
||||||
@ -58,8 +58,8 @@ class Pacman(LazyLogging):
|
|||||||
Args:
|
Args:
|
||||||
architecture(str): repository architecture
|
architecture(str): repository architecture
|
||||||
configuration(Configuration): configuration instance
|
configuration(Configuration): configuration instance
|
||||||
refresh_database(int): synchronize local cache to remote. If set to ``0``, no syncronization will be
|
refresh_database(int): synchronize local cache to remote. If set to ``0``, no synchronization will be
|
||||||
enabled, if set to ``1`` - normal syncronization, if set to ``2`` - force syncronization
|
enabled, if set to ``1`` - normal synchronization, if set to ``2`` - force synchronization
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Handle: fully initialized pacman handle
|
Handle: fully initialized pacman handle
|
||||||
@ -126,7 +126,7 @@ class Pacman(LazyLogging):
|
|||||||
Returns:
|
Returns:
|
||||||
DB: loaded pacman database instance
|
DB: loaded pacman database instance
|
||||||
"""
|
"""
|
||||||
self.logger.info("loading pacman databases")
|
self.logger.info("loading pacman database %s", repository)
|
||||||
database: DB = handle.register_syncdb(repository, SIG_PACKAGE)
|
database: DB = handle.register_syncdb(repository, SIG_PACKAGE)
|
||||||
# replace variables in mirror address
|
# replace variables in mirror address
|
||||||
database.servers = [mirror.replace("$repo", repository).replace("$arch", architecture)]
|
database.servers = [mirror.replace("$repo", repository).replace("$arch", architecture)]
|
||||||
@ -138,7 +138,7 @@ class Pacman(LazyLogging):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
handle(Handle): pacman handle which will be used for database sync
|
handle(Handle): pacman handle which will be used for database sync
|
||||||
force(bool): force database syncronization (same as ``pacman -Syy``)
|
force(bool): force database synchronization (same as ``pacman -Syy``)
|
||||||
"""
|
"""
|
||||||
self.logger.info("refresh ahriman's home pacman database (force refresh %s)", force)
|
self.logger.info("refresh ahriman's home pacman database (force refresh %s)", force)
|
||||||
transaction = handle.init_transaction()
|
transaction = handle.init_transaction()
|
||||||
|
@ -61,7 +61,7 @@ class Configuration(configparser.RawConfigParser):
|
|||||||
>>> path, architecture = configuration.check_loaded()
|
>>> path, architecture = configuration.check_loaded()
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ARCHITECTURE_SPECIFIC_SECTIONS = ["build", "sign", "web"]
|
ARCHITECTURE_SPECIFIC_SECTIONS = ["alpm", "build", "sign", "web"]
|
||||||
SYSTEM_CONFIGURATION_PATH = Path(sys.prefix) / "share" / "ahriman" / "settings" / "ahriman.ini"
|
SYSTEM_CONFIGURATION_PATH = Path(sys.prefix) / "share" / "ahriman" / "settings" / "ahriman.ini"
|
||||||
converters: Dict[str, Callable[[str], Any]] # typing guard
|
converters: Dict[str, Callable[[str], Any]] # typing guard
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace:
|
|||||||
args.build_command = "ahriman"
|
args.build_command = "ahriman"
|
||||||
args.from_configuration = Path("/usr/share/devtools/pacman-extra.conf")
|
args.from_configuration = Path("/usr/share/devtools/pacman-extra.conf")
|
||||||
args.makeflags_jobs = True
|
args.makeflags_jobs = True
|
||||||
|
args.mirror = "mirror"
|
||||||
args.multilib = True
|
args.multilib = True
|
||||||
args.packager = "John Doe <john@doe.com>"
|
args.packager = "John Doe <john@doe.com>"
|
||||||
args.repository = "aur-clone"
|
args.repository = "aur-clone"
|
||||||
@ -52,10 +53,10 @@ def test_run(args: argparse.Namespace, configuration: Configuration, repository:
|
|||||||
init_mock = mocker.patch("ahriman.core.alpm.repo.Repo.init")
|
init_mock = mocker.patch("ahriman.core.alpm.repo.Repo.init")
|
||||||
|
|
||||||
Setup.run(args, "x86_64", configuration, report=False, unsafe=False)
|
Setup.run(args, "x86_64", configuration, report=False, unsafe=False)
|
||||||
ahriman_configuration_mock.assert_called_once_with(
|
ahriman_configuration_mock.assert_called_once_with(args, "x86_64", args.repository, configuration)
|
||||||
args, "x86_64", args.repository, configuration.include, repository_paths)
|
|
||||||
devtools_configuration_mock.assert_called_once_with(
|
devtools_configuration_mock.assert_called_once_with(
|
||||||
args.build_command, "x86_64", args.from_configuration, args.multilib, args.repository, repository_paths)
|
args.build_command, "x86_64", args.from_configuration, args.mirror, args.multilib, args.repository,
|
||||||
|
repository_paths)
|
||||||
makepkg_configuration_mock.assert_called_once_with(args.packager, args.makeflags_jobs, repository_paths)
|
makepkg_configuration_mock.assert_called_once_with(args.packager, args.makeflags_jobs, repository_paths)
|
||||||
sudo_configuration_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
sudo_configuration_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
||||||
executable_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
executable_mock.assert_called_once_with(repository_paths, args.build_command, "x86_64")
|
||||||
@ -85,11 +86,12 @@ def test_configuration_create_ahriman(args: argparse.Namespace, configuration: C
|
|||||||
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
command = Setup.build_command(repository_paths.root, args.build_command, "x86_64")
|
command = Setup.build_command(repository_paths.root, args.build_command, "x86_64")
|
||||||
|
|
||||||
Setup.configuration_create_ahriman(args, "x86_64", args.repository, configuration.include, repository_paths)
|
Setup.configuration_create_ahriman(args, "x86_64", args.repository, configuration)
|
||||||
set_option_mock.assert_has_calls([
|
set_option_mock.assert_has_calls([
|
||||||
MockCall(Configuration.section_name("build", "x86_64"), "build_command", str(command)),
|
MockCall(Configuration.section_name("build", "x86_64"), "build_command", str(command)),
|
||||||
MockCall("repository", "name", args.repository),
|
MockCall("repository", "name", args.repository),
|
||||||
MockCall(Configuration.section_name("build", "x86_64"), "makechrootpkg_flags", f"-U {args.build_as_user}"),
|
MockCall(Configuration.section_name("build", "x86_64"), "makechrootpkg_flags", f"-U {args.build_as_user}"),
|
||||||
|
MockCall(Configuration.section_name("alpm", "x86_64"), "mirror", args.mirror),
|
||||||
MockCall(Configuration.section_name("sign", "x86_64"), "target",
|
MockCall(Configuration.section_name("sign", "x86_64"), "target",
|
||||||
" ".join([target.name.lower() for target in args.sign_target])),
|
" ".join([target.name.lower() for target in args.sign_target])),
|
||||||
MockCall(Configuration.section_name("sign", "x86_64"), "key", args.sign_key),
|
MockCall(Configuration.section_name("sign", "x86_64"), "key", args.sign_key),
|
||||||
@ -99,6 +101,23 @@ def test_configuration_create_ahriman(args: argparse.Namespace, configuration: C
|
|||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
|
def test_configuration_create_ahriman_no_multilib(args: argparse.Namespace, configuration: Configuration,
|
||||||
|
repository_paths: RepositoryPaths, mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must create configuration for the service without multilib repository
|
||||||
|
"""
|
||||||
|
args = _default_args(args)
|
||||||
|
args.multilib = False
|
||||||
|
mocker.patch("pathlib.Path.open")
|
||||||
|
mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
set_option_mock = mocker.patch("ahriman.core.configuration.Configuration.set_option")
|
||||||
|
|
||||||
|
Setup.configuration_create_ahriman(args, "x86_64", args.repository, configuration)
|
||||||
|
set_option_mock.assert_has_calls([
|
||||||
|
MockCall(Configuration.section_name("alpm", "x86_64"), "mirror", args.mirror),
|
||||||
|
]) # non-strict check called intentionally
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_create_devtools(args: argparse.Namespace, repository_paths: RepositoryPaths,
|
def test_configuration_create_devtools(args: argparse.Namespace, repository_paths: RepositoryPaths,
|
||||||
mocker: MockerFixture) -> None:
|
mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
@ -111,11 +130,38 @@ def test_configuration_create_devtools(args: argparse.Namespace, repository_path
|
|||||||
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
|
||||||
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
||||||
args.multilib, args.repository, repository_paths)
|
None, args.multilib, args.repository, repository_paths)
|
||||||
add_section_mock.assert_has_calls([MockCall("multilib"), MockCall(args.repository)])
|
add_section_mock.assert_has_calls([MockCall("multilib"), MockCall(args.repository)])
|
||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
|
def test_configuration_create_devtools_mirror(args: argparse.Namespace, repository_paths: RepositoryPaths,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must create configuration for the devtools with mirror set explicitly
|
||||||
|
"""
|
||||||
|
def get(section: str, key: str, *args: Any, **kwargs: Any) -> Any:
|
||||||
|
del args
|
||||||
|
if section == "core" and key == "Include":
|
||||||
|
return str(Setup.MIRRORLIST_PATH)
|
||||||
|
return kwargs["fallback"]
|
||||||
|
|
||||||
|
args = _default_args(args)
|
||||||
|
mocker.patch("pathlib.Path.open")
|
||||||
|
mocker.patch("ahriman.core.configuration.Configuration.set")
|
||||||
|
mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
mocker.patch("ahriman.core.configuration.Configuration.sections", return_value=["core", "extra"])
|
||||||
|
get_mock = mocker.patch("ahriman.core.configuration.Configuration.get", side_effect=get)
|
||||||
|
remove_option_mock = mocker.patch("ahriman.core.configuration.Configuration.remove_option")
|
||||||
|
set_option_mock = mocker.patch("ahriman.core.configuration.Configuration.set_option")
|
||||||
|
|
||||||
|
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
||||||
|
args.mirror, False, args.repository, repository_paths)
|
||||||
|
get_mock.assert_has_calls([MockCall("core", "Include", fallback=None), MockCall("extra", "Include", fallback=None)])
|
||||||
|
remove_option_mock.assert_called_once_with("core", "Include")
|
||||||
|
set_option_mock.assert_has_calls([MockCall("core", "Server", args.mirror)]) # non-strict check called intentionally
|
||||||
|
|
||||||
|
|
||||||
def test_configuration_create_devtools_no_multilib(args: argparse.Namespace, repository_paths: RepositoryPaths,
|
def test_configuration_create_devtools_no_multilib(args: argparse.Namespace, repository_paths: RepositoryPaths,
|
||||||
mocker: MockerFixture) -> None:
|
mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
@ -127,7 +173,7 @@ def test_configuration_create_devtools_no_multilib(args: argparse.Namespace, rep
|
|||||||
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
|
||||||
|
|
||||||
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
Setup.configuration_create_devtools(args.build_command, "x86_64", args.from_configuration,
|
||||||
False, args.repository, repository_paths)
|
None, False, args.repository, repository_paths)
|
||||||
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user