Compare commits

..

1 Commits

Author SHA1 Message Date
87f7efa2f7 modify(makepkg.conf): Flags. Use comma separated list 2024-01-23 05:02:17 +00:00
50 changed files with 460 additions and 1726 deletions

View File

@@ -3,7 +3,7 @@ run-name: ${{ gitea.actor }}
on:
push:
branches:
- artools/0.33.x
- artools/0.32.x
- master
tags:
- 0.*
@@ -16,15 +16,13 @@ jobs:
steps:
- name: checkout repo
uses: actions/checkout@main
- name: build
- name: build artools
run: make
- name: shellcheck
- name: shellcheck artools
uses: ludeeus/action-shellcheck@master
env:
SHELLCHECK_OPTS: -x -e SC2034
with:
scandir: './build/bin'
format: tty
severity: error
additional_files: 'contrib/completion/bash/artools'

View File

@@ -1,6 +1,6 @@
SHELL=/bin/bash
V=0.33
V=0.32
BUILDTOOLVER ?= $(V)
CHROOTVER=0.12
@@ -35,16 +35,13 @@ SETARCH_ALIASES = $(wildcard config/setarch-aliases.d/*)
TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*)
TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*)
COMPLETIONS = $(addprefix $(BUILDDIR)/,$(patsubst %.in,%,$(wildcard contrib/completion/*/*)))
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso completion
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso
binprogs_base: $(BINPROGS_BASE)
binprogs_pkg: $(BINPROGS_PKG)
binprogs_iso: $(BINPROGS_ISO)
library_base: $(LIBRARY_BASE)
library_pkg: $(LIBRARY_PKG)
library_iso: $(LIBRARY_ISO)
completion: $(COMPLETIONS)
edit = sed -e "s|@datadir[@]|$(DATADIR)|g" \
-e "s|@libdir[@]|$(LIBDIR)|g" \
@@ -72,8 +69,6 @@ $(eval $(call buildInScript,build/bin,src/pkg/,.in,755))
$(eval $(call buildInScript,build/bin,src/iso/,.in,755))
$(eval $(call buildInScript,build/lib,src/lib/,,644))
$(foreach completion,$(wildcard contrib/completion/*),$(eval $(call buildInScript,build/$(completion),$(completion)/,.in,444)))
conf_base:
@install -d $(BUILDDIR)/pacman.conf.d $(BUILDDIR)/artools
@cp -a $(PACMAN_CONFIGS) $(BUILDDIR)/pacman.conf.d
@@ -115,9 +110,6 @@ install_pkg: binprogs_pkg
for a in $(SETARCH_ALIASES); do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done
ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
install -Dm0644 $(BUILDDIR)/contrib/completion/bash/artixpkg $(DESTDIR)$(PREFIX)/share/bash-completion/completions/artixpkg
install -Dm0644 $(BUILDDIR)/contrib/completion/zsh/_artixpkg $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_artixpkg
install_iso: binprogs_iso
install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install -dm0755 $(DESTDIR)$(PREFIX)/bin
@@ -152,5 +144,5 @@ dist:
check: $(BINPROGS_SRC_BASE) $(BINPROGS_SRC_PKG) $(BINPROGS_SRC_ISO) config/makepkg/x86_64.conf contrib/makepkg/PKGBUILD.proto
shellcheck -x $^
.PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check contrib
.PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check
.DELETE_ON_ERROR:

View File

@@ -32,15 +32,3 @@
# default packaging org
# GIT_ORG='packages'
# default archiving org
# GIT_ORG_ARCHIVE='landfill'
# default jenkins agents
# AGENTS=(orion taurus)
# whether to include custom maintainer line when importing from arch
# PATCH_MAINTAINER=false
# override the default git url for patches repo
# PATCH_URL=${GIT_SSH}:artix/artix-patches.git

View File

@@ -25,7 +25,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::breezy'
VCSCLIENTS=('bzr::bzr'
'fossil::fossil'
'git::git'
'hg::mercurial'
@@ -41,18 +41,18 @@ CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection"
# -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
-Wl,-z,pack-relative-relocs"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now,-z,pack-relative-relocs"
LTOFLAGS="-flto=auto"
RUSTFLAGS=""
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#-- Debugging flags
DEBUG_CFLAGS="-g"
DEBUG_CXXFLAGS="$DEBUG_CFLAGS"
DEBUG_RUSTFLAGS="-C debuginfo=2"
#########################################################################
# BUILD ENVIRONMENT
@@ -81,7 +81,7 @@ BUILDENV=(!distcc color !ccache check !sign)
# These are default values for the options=() settings
#########################################################################
#
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
@@ -93,7 +93,6 @@ BUILDENV=(!distcc color !ccache check !sign)
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#-- lto: Add compile flags for building with link time optimization
#-- autodeps: Automatically add depends/provides
#
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
@@ -113,8 +112,6 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#-- Prefix and directories for library autodeps
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
#########################################################################
# PACKAGE OUTPUT

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -35,8 +35,6 @@ Color
CheckSpace
VerbosePkgLists
ParallelDownloads = 10
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -35,8 +35,6 @@ Color
CheckSpace
VerbosePkgLists
ParallelDownloads = 10
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -35,8 +35,6 @@ Color
CheckSpace
VerbosePkgLists
ParallelDownloads = 10
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -36,8 +36,6 @@ NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
DownloadUser = alpm
#DisableSandbox
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.

View File

@@ -1,295 +0,0 @@
#/usr/bin/env bash
LIBDIR=${LIBDIR:-'@libdir@'}
_artixpkg_pkgbase() {
source "${LIBDIR}"/pkg/git/config.sh
source "${LIBDIR}"/pkg/util.sh
ls -1 "${TREE_DIR_ARTIX}" | tr '\n' ' '
}
_artixpkg_remotepkgbase() {
curl -s "https://checkupdates.artixlinux.org/api/1.0/packages?startswith=$1"
}
_artixpkg_maintainers() {
curl -s "https://checkupdates.artixlinux.org/api/1.0/maintainers"
}
_artixpkg_completion() {
local cur prev comps comps_all repos autorepos teams agents cwords comp_cword_exflag
source "${LIBDIR}"/pkg/db/db.sh 2>/dev/null
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
for ((i = COMP_CWORD - 1; i >= 0; i--)); do
if [[ ${COMP_WORDS[i]} != -* ]]; then
last_non_flag_word="${COMP_WORDS[i]}"
break
fi
done
comps=""
comps_all=""
comp_cword_exflag=0
comp_cword_all=0
for ((i = 0; i < ${#COMP_WORDS[@]} - 1; i++)); do
word="${COMP_WORDS[i]}"
comps_all+=" $word"
((comp_cword_all++))
if [[ $word != -* ]]; then
comps+=" $word"
((comp_cword_exflag++))
fi
done
comps="${comps:1}"
comps_all="${comps_all:1}"
repos=""
for word in "${ARTIX_DB[@]}"; do
if [[ $word != -* ]]; then
repos+=" $word"
fi
done
repos="${repos:1}"
autorepos=""
for word in "${ARTIX_DB_MAP[@]}"; do
if [[ $word != -* ]]; then
autorepos+=" $word"
fi
done
autorepos="${autorepos:1}"
teams=""
for word in "${ARTIX_TEAMS[@]}"; do
if [[ $word != -* ]]; then
teams+=" $word"
fi
done
teams="${teams:1}"
agents=""
for word in "${AGENTS[@]}"; do
if [[ $word != -* ]]; then
agents+=" $word"
fi
done
agents="${agents:1}"
case "${comp_cword_exflag}" in
1)
COMPREPLY=($(compgen -W "admin git repo version -h --help" -- "${cur}"))
return 0
;;
2)
case ${prev} in
admin)
COMPREPLY=($(compgen -W "maintainer query team topic transfer -h --help" -- ${cur}))
;;
git)
COMPREPLY=($(compgen -W "ci clone config create pull push -h --help" -- ${cur}))
;;
repo)
COMPREPLY=($(compgen -W "add remove move import show -h --help" -- ${cur}))
;;
version)
COMPREPLY=($(compgen -W "-h --help" -- ${cur}))
;;
esac
;;
*)
case "${comps}" in
"artixpkg repo add"*)
local repoAddCommon="-p --push -r --rebuild -n --nocheck -h --help"
case "${comp_cword_exflag}" in
3)
COMPREPLY=($(compgen -W "$repoAddCommon $autorepos $repos" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "$repoAddCommon $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg repo remove"*)
case "${comp_cword_exflag}" in
3)
COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg repo move"*)
case "${comp_cword_exflag}" in
3|4)
COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg repo import"*)
case "${prev}" in
"--tag")
# this flag expects a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "--del -h --help --tag $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg repo show")
COMPREPLY=($(compgen -W "-b --base -p --pkgs -h --help" -- ${cur}))
;;
"artixpkg git clone"*)
case "${prev}" in
"-a"|"--agent")
COMPREPLY=($(compgen -W "$agents" -- ${cur}))
;;
"--protocol")
COMPREPLY=($(compgen -W "https" -- ${cur}))
;;
"-t"|"--team")
COMPREPLY=($(compgen -W "$teams" -- ${cur}))
;;
"-m"|"--maintainer")
COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur}))
;;
"-s"|"--search"|"-j"|"--jobs")
# these flags expect a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "-m --maintainer --protocol -s --search -t --team -a --agent -j --jobs --all -h --help $(_artixpkg_remotepkgbase ${cur})" -- ${cur}))
;;
esac
;;
"artixpkg git config"*)
case "${prev}" in
"--protocol")
COMPREPLY=($(compgen -W "https" -- ${cur}))
;;
"-j"|"--jobs")
# these flags expect a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "--protocol -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg git create"*)
case "${prev}" in
"-a"|"--agent")
COMPREPLY=($(compgen -W "$agents" -- ${cur}))
;;
"-t"|"--team")
COMPREPLY=($(compgen -W "$teams" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-c --clone -a --agent -t --team -h --help" -- ${cur}))
;;
esac
;;
"artixpkg git pull"*)
case "${prev}" in
"-m"|"--maintainer")
COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur}))
;;
"-t"|"--topic"|"-j"|"--jobs")
# these flags expect a parameter
COMPREPLY=()
;;
*)
case "${comps_all}" in
*--all*)
COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs --all -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
esac
;;
"artixpkg git push"*)
case "${prev}" in
"-m"|"--maintainer")
COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur}))
;;
"-t"|"--topic"|"-j"|"--jobs")
# this flag expects a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg git ci"*)
case "${prev}" in
"-a"|"--agent")
COMPREPLY=($(compgen -W "$agents" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-a --agent -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg admin maintainer"*)
case "${comp_cword_all}" in
3)
COMPREPLY=($(compgen -W "-a --adopt --o --orphan -h --help" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg admin query"*)
case "${prev}" in
"-m"|"--maintainer")
COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur}))
;;
"-t"|"--topic")
# this flag expects a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "-m --maintainer -t --topic -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg admin team"*)
case "${prev}" in
"-a"|"--add"|"-r"|"--remove")
COMPREPLY=($(compgen -W "$teams" -- ${cur}))
;;
*)
COMPREPLY=($(compgen -W "-a --add -c --check -l --list -r --remove -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg admin topic"*)
case "${prev}" in
"-a"|"--add"|"-r"|"--remove"|"-j"|"--jobs")
# this flag expects a parameter
COMPREPLY=()
;;
*)
COMPREPLY=($(compgen -W "-a --add -r --remove -d --del -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
"artixpkg admin transfer"*)
COMPREPLY=($(compgen -W "-h --help $(_artixpkg_pkgbase)" -- ${cur}))
;;
esac
;;
esac
}
complete -F _artixpkg_completion artixpkg

View File

@@ -1,205 +0,0 @@
#compdef artixpkg
local -a addcmd admincmd cicmd clonecmd configcmd createcmd gitcmd importcmd \
initialcmd maintainercmd movecmd querycmd pullcmd pushcmd removecmd \
repocmd showcmd teamcmd topiccmd transfercmd versioncmd
_regex_words maintainer '' \
'-a' \
'--adopt' \
'-h' \
'--help' \
'-o' \
'--orphan'
maintainercmd=("$reply[@]")
_regex_words query '' \
'-h' \
'--help' \
'-m' \
'-t'
querycmd=("$reply[@]")
_regex_words team '' \
'-a' \
'--add' \
'-c' \
'--check' \
'-h' \
'--help' \
'-r' \
'--remove'
teamcmd=("$reply[@]")
_regex_words topic '' \
'-a' \
'--add' \
'-d' \
'--delete' \
'-h' \
'--help' \
'-j' \
'--jobs' \
'-r' \
'--remove'
topiccmd=("$reply[@]")
_regex_words transfer '' \
'-h' \
'--help'
transfercmd=("$reply[@]")
_regex_words admin '' \
'-h:Help text' \
'--help:Help text' \
'maintainer:Manage repo maintainer:$maintainercmd' \
'query:Query maintainers and topics:$querycmd' \
'team:Manage repo team:$teamcmd' \
'topic:Manage topics:$topiccmd' \
'transfer:Transfer obsolete repositories to landfill:$transfercmd'
admincmd=("$reply[@]")
_regex_words ci '' \
'-a' \
'--agent' \
'-h' \
'--help'
cicmd=("$reply[@]")
_regex_words clone '' \
'-a' \
'--agent' \
'--all' \
'-h' \
'--help' \
'-j' \
'--jobs' \
'-m' \
'--maintainer' \
'--protocol' \
'-s' \
'--search' \
'-t' \
'--team'
clonecmd=("$reply[@]")
_regex_words config '' \
'-h' \
'--help' \
'-j' \
'--jobs' \
'--protocol'
configcmd=("$reply[@]")
_regex_words create '' \
'-a' \
'--agent' \
'-c' \
'--create' \
'-h' \
'--help' \
'-t' \
'--team'
createcmd=("$reply[@]")
_regex_words pull '' \
'--all' \
'-h' \
'--help' \
'-j' \
'--jobs' \
'-m' \
'--maintainer' \
'-t' \
'--topic'
pullcmd=("$reply[@]")
_regex_words push '' \
'-h' \
'--help' \
'-j' \
'--jobs' \
'-m' \
'--maintainer' \
'-t' \
'--topic'
pushcmd=("$reply[@]")
_regex_words git '' \
'ci:Configure CI agent:$cicmd' \
'clone:Clone a package:$clonecmd' \
'config:Configure a clone:$configcmd' \
'create:Create a new gitea package repository:$createcmd' \
'-h:Help text' \
'--help:Help text' \
'pull:Pull a package repository:$pullcmd' \
'push:Push a package repository:$pushcmd'
gitcmd=("$reply[@]")
_regex_words add '' \
'-h' \
'--help' \
'-n' \
'--nocheck' \
'-p' \
'--push' \
'-r' \
'--rebuild'
addcmd=("$reply[@]")
_regex_words import '' \
'--del' \
'-h' \
'--help' \
'--tag'
importcmd=("$reply[@]")
_regex_words move '' \
'-h' \
'--help' \
'-p' \
'--push'
movecmd=("$reply[@]")
_regex_words remove '' \
'-h' \
'--help' \
'-p' \
'--push'
removecmd=("$reply[@]")
_regex_words show '' \
'-b' \
'--base' \
'-h' \
'--help' \
'-p' \
'--pkgs'
showcmd=("$reply[@]")
_regex_words repo '' \
'add:Add pkgbase to repo:$addcmd' \
'-h:Help text' \
'--help:Help text' \
'import:Import latest tag from arch upstream:$importcmd' \
'move:Move pkgbase between repos:$movecmd' \
'remove:Remove pkgbase from repo:$removecmd' \
'show:Show pkgbase repo db:$showcmd'
repocmd=("$reply[@]")
_regex_words version '' \
'-h' \
'--help'
versioncmd=("$reply[@]")
_regex_words initial '' \
'admin:Manage topics:$admincmd' \
'git:Manage git:$gitcmd' \
'-h:Help text' \
'--help:Help text' \
'repo:Pacman database modification:$repocmd' \
'version:Show artixpkg version:$versioncmd'
initialcmd=("$reply[@]")
_regex_arguments _artixpkg /$'[^\0]##\0'/ "${initialcmd[@]}"
_artixpkg "$@"

View File

@@ -8,30 +8,25 @@ yaml_array() {
local array yaml
for entry in "$@"; do
yaml="{name: ${entry}, action: enable}"
yaml="{name: ${entry}, action: enable, alias: add, target: default}"
array="${array:-}${array:+,} ${yaml}"
done
printf "%s\n" "[${array}]"
}
configure_calamares(){
for config in online offline; do
local mods="$1/etc/calamares-$config/modules"
if [[ -d "$mods" ]];then
msg2 "Configuring: Calamares %s" "$config"
local mods="$1/etc/calamares/modules"
if [[ -d "$mods" ]];then
msg2 "Configuring: Calamares"
if [[ -f "$mods"/services-artix.conf ]]; then
local svc
svc=$(yaml_array "${SERVICES[@]}") \
yq -P 'with(.;
.command = "artix-service" |
.services = env(svc) )' \
-i "$mods"/services-artix.conf
fi
if [[ -f "$mods"/services-artix.conf ]]; then
local svc init
init="${INITSYS}" svc=$(yaml_array "${SERVICES[@]}") \
yq -P 'with(.;
.manager = env(init) |
.services = env(svc) )' \
-i "$mods"/services-artix.conf
fi
done
if [[ -d "$1"/etc/calamares-offline ]]; then
ln -sf calamares-offline "$1"/etc/calamares
fi
}

View File

@@ -5,10 +5,6 @@
[[ -z ${ARTOOLS_INCLUDE_ADMIN_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_SH=1
# shellcheck source=src/lib/pkg/db/db.sh
source "${LIBDIR}"/pkg/db/db.sh
set -e
artixpkg_admin_usage() {
@@ -17,21 +13,17 @@ artixpkg_admin_usage() {
Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS
maintainer Manage repo maintainer
query Query maintainers and topics
team Manage repo team
topic Manage topics
transfer Transfer obsolete repository to landfill
query Query maintainers and topics
topic Manage topics
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} transfer libfoo libbar
$ ${COMMAND} query --topic mytopic
$ ${COMMAND} topic --add mytopic libfoo
$ ${COMMAND} team --add ${ARTIX_TEAMS[3]} libfoo
$ ${COMMAND} maintainer --adopt libfoo libbar
$ ${COMMAND} query --maintainer tux
$ ${COMMAND} query --topic kf5
_EOF_
}
@@ -48,31 +40,6 @@ artixpkg_admin() {
artixpkg_admin_usage
exit 0
;;
query)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/query.sh
source "${LIBDIR}"/pkg/admin/query.sh
artixpkg_admin_query "$@"
exit 0
;;
team)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/team.sh
source "${LIBDIR}"/pkg/admin/team.sh
artixpkg_admin_team "$@"
exit 0
;;
topic)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/query.sh
source "${LIBDIR}"/pkg/admin/topic.sh
artixpkg_admin_topic "$@"
exit 0
;;
transfer)
_ARTOOLS_COMMAND+=" $1"
shift
@@ -81,12 +48,20 @@ artixpkg_admin() {
artixpkg_admin_transfer "$@"
exit 0
;;
maintainer)
query)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/maintainer.sh
source "${LIBDIR}"/pkg/admin/maintainer.sh
artixpkg_admin_maintainer "$@"
# shellcheck source=src/lib/pkg/admin/query.sh
source "${LIBDIR}"/pkg/admin/query.sh
artixpkg_admin_query "$@"
exit 0
;;
topic)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/query.sh
source "${LIBDIR}"/pkg/admin/topic.sh
artixpkg_admin_topic "$@"
exit 0
;;
-*)

View File

@@ -1,139 +0,0 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH=1
set -e
artixpkg_admin_maintainer_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-a, --adopt Adopt repo
-o, --orphan Orphan repo
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --adopt libfoo
$ ${COMMAND} --orphan libfoo libbar
_EOF_
}
artixpkg_admin_maintainer() {
if (( $# < 1 )); then
artixpkg_admin_maintainer_usage
exit 0
fi
# options
local pkgbases=()
local pkgbase
local ADOPT=0
local ORPHAN=0
local packager_name
local maintainer
local -r orphan="orphan"
local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_maintainer_usage
exit 0
;;
-a|--adopt)
ADOPT=1
RUNCMD+=" $1"
shift
;;
-o|--orphan)
ORPHAN=1
RUNCMD+=" $1"
shift
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
pkgbases+=("$@")
# shellcheck source=src/lib/pkg/packager.sh
source "${LIBDIR}"/pkg/packager.sh
if [[ -n ${PACKAGER} ]]; then
if ! packager_name=$(get_packager_name "${PACKAGER}") || \
! packager_email=$(get_packager_email "${PACKAGER}"); then
die "invalid PACKAGER format '${PACKAGER}' in makepkg.conf"
fi
if ! is_packager_name_valid "${packager_name}"; then
die "invalid PACKAGER '${PACKAGER}' in makepkg.conf"
fi
if is_packager_email_official "${packager_email}"; then
maintainer="maintainer-${packager_name}"
fi
fi
if [[ -n ${GIT_TOKEN} ]]; then
# parallelization
if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then
# force colors in parallel if parent process is colorized
if [[ -n ${BOLD} ]]; then
export ARTOOLS_COLOR=always
fi
if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${pkgbases[@]}"; then
die 'Failed to manange some packages, please check the output'
exit 1
fi
exit 0
fi
for pkgbase in "${pkgbases[@]}"; do
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if (( ADOPT )); then
if ! add_topic "${gitname}" "$maintainer"; then
warning "failed to add topic: $maintainer"
fi
if ! remove_topic "${gitname}" "$orphan"; then
warning "failed to remove topic: $orphan"
fi
fi
if (( ORPHAN )); then
if ! add_topic "${gitname}" "$orphan"; then
warning "failed to add topic: $orphan"
fi
if ! remove_topic "${gitname}" "$maintainer"; then
warning "failed to remove topic: $maintainer"
fi
fi
done
fi
}

View File

@@ -14,8 +14,8 @@ artixpkg_admin_query_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer NAME Query for packages of the named maintainer
-t, --topic NAME Query for packages of the named topic
-m, --maintainer=NAME Query for packages of the named maintainer
-t, --topic=NAME Query for packages of the named topic
-h, --help Show this help text
EXAMPLES
@@ -47,11 +47,19 @@ artixpkg_admin_query() {
MAINTAINER="$2"
shift 2
;;
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
--topic=*)
TOPIC="${1#*=}"
shift
;;
--)
shift
break

View File

@@ -1,154 +0,0 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_TEAM_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_TEAM_SH=1
set -e
artixpkg_admin_team_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-c, --check Check if team is assigned
-l, --list List repo teams
-a, --add NAME Add team to repo
Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
-r, --remove NAME Remove team from repo
Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --check libfoo
$ ${COMMAND} --list libfoo
$ ${COMMAND} --add ${ARTIX_TEAMS[1]} libfoo
$ ${COMMAND} --remove ${ARTIX_TEAMS[3]} libfoo
_EOF_
}
artixpkg_admin_team() {
if (( $# < 1 )); then
artixpkg_admin_team_usage
exit 0
fi
# options
local CHECK=0
local LIST=0
local TEAM_ADD
local TEAM_RM
local pkgbases=()
local pkgbase
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_team_usage
exit 0
;;
-a|--add)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TEAM_ADD="$2"
shift 2
;;
-r|--remove)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TEAM_RM="$2"
shift 2
;;
-c|--check)
CHECK=1
shift
;;
-l|--list)
LIST=1
shift
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
pkgbases+=("$@")
if [[ -n ${GIT_TOKEN} ]]; then
for pkgbase in "${pkgbases[@]}"; do
if [[ -d "${pkgbase}" ]];then
if [[ ! -d "${pkgbase}/.git" ]]; then
error "Not a Git repository: ${pkgbase}"
continue
fi
( cd "${pkgbase}" || return
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if (( CHECK )); then
local team
team=$(team_from_yaml)
res=$(check_repo_team "${gitname}" "${team}" | yq -rP '.name')
if [[ "$res" == "null" ]]; then
error "[%s] does not have team (%s) assigned" "$pkgbase" "${team}"
else
msg "[%s] has team (%s) assigned" "$pkgbase" "${team}"
fi
fi
if (( LIST )); then
list_repo_teams "${gitname}" | yq -rP '.[] | .name'
fi
if [[ -n ${TEAM_ADD} ]]; then
if ! add_team_to_repo "${gitname}" "${TEAM_ADD}"; then
warning "failed to add team: ${TEAM_ADD}"
fi
if [[ "$(team_from_yaml)" != "${TEAM_ADD}" ]] \
|| [[ "$(team_from_yaml)" == "null" ]]; then
update_yaml_team "${TEAM_ADD}"
git add "${REPO_DB}"
git commit -m "Set team ${TEAM_ADD}"
fi
fi
if [[ -n ${TEAM_RM} ]]; then
if ! remove_team_from_repo "${gitname}" "${TEAM_RM}"; then
warning "failed to add team: ${TEAM_RM}"
fi
fi
msg "Querying ${pkgbase} ..."
if ! show_db; then
warning "Could not query ${REPO_DB}"
fi
)
fi
done
fi
}

View File

@@ -14,18 +14,16 @@ artixpkg_admin_topic_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-a, --add NAME Add a topic to repo
-r, --remove NAME Remove a topic from repo
-d, --delete Delete all topics from repo
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
-a, --add Add a topic
-d, --del Delete a topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --add mytopic libfoo
$ ${COMMAND} --remove mytopic libbar
$ ${COMMAND} --del mytopic libbar
$ ${COMMAND} --add mytopic libfoo libbar
$ ${COMMAND} --remove mytopic libfoo libbar
$ ${COMMAND} --delete libfoo
$ ${COMMAND} --del mytopic libfoo libbar
_EOF_
}
@@ -42,9 +40,8 @@ artixpkg_admin_topic() {
local pkgbase
local ADD_TOPIC
local RM_TOPIC
local DEL_TOPIC
local ADD=0
local RM=0
local DEL=0
local jobs=
jobs=$(nproc)
@@ -53,29 +50,36 @@ artixpkg_admin_topic() {
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_topic_usage
exit 0
;;
-a|--add)
(( $# <= 1 )) && die "missing argument for %s" "$1"
ADD_TOPIC="$2"
ADD=1
RUNCMD+=" $1 ${ADD_TOPIC}"
RUNCMD+=" -a ${ADD_TOPIC}"
shift 2
;;
-r|--remove)
(( $# <= 1 )) && die "missing argument for %s" "$1"
RM_TOPIC="$2"
RM=1
RUNCMD+=" $1 ${RM_TOPIC}"
shift 2
;;
-d|--delete)
DEL=1
RUNCMD+=" $1"
--add=*)
ADD_TOPIC="${1#*=}"
ADD=1
RUNCMD+=" --add=${ADD_TOPIC}"
shift
;;
-d|--del)
(( $# <= 1 )) && die "missing argument for %s" "$1"
DEL_TOPIC="$2"
DEL=1
RUNCMD+=" -d ${DEL_TOPIC}"
shift 2
;;
--del=*)
DEL_TOPIC="${1#*=}"
DEL=1
RUNCMD+=" --del=${DEL_TOPIC}"
shift
;;
-h|--help)
artixpkg_admin_topic_usage
exit 0
;;
-j|--jobs)
(( $# <= 1 )) && die "missing argument for %s" "$1"
jobs=$2
@@ -111,25 +115,21 @@ artixpkg_admin_topic() {
fi
for pkgbase in "${pkgbases[@]}"; do
local gitname
gitname=$(get_compliant_name "${pkgbase}")
# topics meta
if (( ADD )); then
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if ! add_topic "${gitname}" "${ADD_TOPIC}"; then
warning "failed to add topic: ${ADD_TOPIC}"
fi
fi
if (( RM )); then
if ! remove_topic "${gitname}" "${RM_TOPIC}"; then
warning "failed to remove topic: ${RM_TOPIC}"
warning "failed to add the topic: ${ADD_TOPIC}"
fi
fi
if (( DEL )); then
if ! remove_all_topics "${gitname}" "${GIT_ORG}"; then
warning "failed to delete all topics: ${gitname}"
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if ! remove_topic "${gitname}" "${DEL_TOPIC}"; then
warning "failed to delete the topic: ${DEL_TOPIC}"
fi
fi

View File

@@ -33,6 +33,7 @@ artixpkg_admin_transfer() {
# options
local pkgbases=()
local pkgbase
local waste_org="landfill"
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
@@ -59,12 +60,7 @@ artixpkg_admin_transfer() {
if [[ -n ${GIT_TOKEN} ]]; then
for pkgbase in "${pkgbases[@]}"; do
local gitname
gitname=$(get_compliant_name "${pkgbase}")
transfer_repo "${gitname}" "${GIT_ORG_ARCHIVE}"
archive_repo "${gitname}" "${GIT_ORG_ARCHIVE}"
remove_all_topics "${gitname}" "${GIT_ORG_ARCHIVE}"
transfer_repo "${pkgbase}" "${waste_org}"
done
fi
}

View File

@@ -37,7 +37,7 @@ add_team_to_repo() {
local pkgbase="$1"
local team="$2"
local url
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams/$team"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/teams/$team"
stat_busy "Adding team ($team) to package repo [$pkgbase]"
api_put "$url" \
@@ -50,7 +50,7 @@ remove_team_from_repo() {
local pkgbase="$1"
local team="$2"
local url
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams/$team"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/teams/$team"
stat_busy "Removing team ($team) from package repo [$pkgbase]"
api_delete "$url" \
@@ -62,7 +62,7 @@ remove_team_from_repo() {
create_repo() {
local pkgbase="$1"
local url json
url="${API_URL}/org/${GIT_ORG}/repos"
url="${GIT_HTTPS}/api/v1/org/${GIT_ORG}/repos"
json="{ \"auto_init\": true, \"name\": \"$pkgbase\", \"gitignores\": \"ArtixLinuxPackages\", \"readme\": \"Default\" }"
stat_busy "Create package repo [$pkgbase] in org (${GIT_ORG})"
@@ -78,8 +78,8 @@ transfer_repo() {
local pkgbase="$1"
local new_owner="$2"
local json url
json="{ \"new_owner\": \"$new_owner\", \"team_ids\": [], \"archived\": \"true\" }"
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/transfer"
json="{ \"new_owner\": \"$new_owner\", \"team_ids\": [] }"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/transfer"
stat_busy "Transfer package repo [$pkgbase] in org ($new_owner)"
api_post "$url" \
@@ -92,7 +92,7 @@ transfer_repo() {
list_all_repos() {
local url
url="${API_URL}/orgs/${GIT_ORG}/repos?limit=10000"
url="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000"
stat_busy "Query all packages"
api_get "$url" \
@@ -104,7 +104,7 @@ add_topic() {
local url
local pkgbase="$1"
local topic="$2"
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/topics/$topic"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics/$topic"
stat_busy "Add topic ($topic) to [$pkgbase]"
api_put "$url" \
@@ -117,7 +117,7 @@ remove_topic() {
local url
local pkgbase="$1"
local topic="$2"
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/topics/$topic"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics/$topic"
stat_busy "Remove topic ($topic) from [$pkgbase]"
api_delete "$url" \
@@ -128,10 +128,8 @@ remove_topic() {
search_topic() {
local search="$1"
local url args
args="topic=true&includeDesc=false&private=false&is_private=false"
args+="&template=false&archived=false&order=asc&limit=10000"
url="${API_URL}/repos/search?q=${search}&${args}"
local url
url="${GIT_HTTPS}/api/v1/repos/search?q=${search}&topic=true&includeDesc=false&private=false&is_private=false&template=false&archived=false&order=asc&limit=10000"
stat_busy "Query for topic (${search})"
api_get "$url" \
@@ -139,63 +137,4 @@ search_topic() {
stat_done
}
list_repo_teams() {
local pkgbase="$1"
local url
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams"
stat_busy "List repo teams [$pkgbase]"
api_get "$url" \
-H 'accept: application/json' \
-H "Authorization: token ${GIT_TOKEN}"
stat_done
}
check_repo_team() {
local pkgbase="$1"
local team="$2"
local url
url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams/$team"
stat_busy "Check if team ($team) is assigned to [$pkgbase]"
api_get "$url" \
-H 'accept: application/json' \
-H "Authorization: token ${GIT_TOKEN}"
stat_done
}
archive_repo() {
local pkgbase="$1"
local org="$2"
local url
local json
url="${API_URL}/repos/$org/$pkgbase"
json="{ \"archived\": true }"
stat_busy "Archive repo [$pkgbase] in org ($org)"
api_patch "$url" \
-H "accept: application/json" \
-H "content-type: application/json" \
-H "Authorization: token ${GIT_TOKEN}" \
-d "$json"
stat_done
}
remove_all_topics() {
local pkgbase="$1"
local org="$2"
local url
local json
url="${API_URL}/repos/$org/$pkgbase/topics"
json="{ \"topics\": [] }"
stat_busy "Delete all topics from [$pkgbase]"
api_put "$url" \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H "Authorization: token ${GIT_TOKEN}" \
-d "$json"
stat_done
}
#}}}

View File

@@ -17,19 +17,6 @@ readonly ARTIX_DB=(
galaxy
)
readonly ARTIX_DB_MAP=(
goblins
gremlins
stable
)
readonly ARTIX_TEAMS=(
"${ARTIX_DB[2]}"
"${ARTIX_DB[5]}"
"${ARTIX_DB[8]}"
"${ARTIX_DB[11]}"
)
readonly REPO_DB='.artixlinux/pkgbase.yaml'
readonly REPO_CI='.artixlinux/Jenkinsfile'
@@ -113,8 +100,6 @@ create_repo_db() {
yq -n '"---"' > "${REPO_DB}"
yq -P '.team = null' -i "${REPO_DB}"
yq -P 'with(
.pkgbase;
.name = null |
@@ -147,31 +132,6 @@ create_repo_db() {
done
}
has_repos_map_key() {
local _r="$1"
local r
if ! $(r="$_r" yq -r '.repos | has(strenv(r))' "${REPO_DB}"); then
return 1
fi
return 0
}
delete_obsolete_map_keys() {
local _r
for r in asteroids{-goblins,-gremlins,}; do
if $(_r="$r" yq -r '.repos | has(strenv(_r))' "${REPO_DB}"); then
local repo
repo=".repos.${r}" \
yq 'del(eval(strenv(repo)))' -i "${REPO_DB}"
fi
done
}
update_yaml_team() {
local team="${1:-${ARTIX_DB[5]}}"
team="$team" yq -P '.team = env(team)' -i "${REPO_DB}"
}
update_yaml_base() {
local version
local name
@@ -313,37 +273,19 @@ update_yaml_move() {
}
show_agent() {
local agent="${AGENTS[0]}"
if grep @${AGENTS[1]} "${REPO_CI}" &>/dev/null; then
agent="${AGENTS[1]}"
local agent="orion"
if grep @galaxy "${REPO_CI}" &>/dev/null; then
agent="taurus"
fi
msg2 "agent: %s" "$agent"
}
team_from_yaml() {
local team
team=$(yq -rP '.team' "${REPO_DB}")
printf "$team"
}
auto_detect() {
local team
for repo in "${ARTIX_TEAMS[@]}"; do
local _r res
res=$(_r=".$repo" yq -rP '.repos | eval(strenv(_r)) | .version' "${REPO_DB}")
if [[ "${res}" != "null" ]]; then
team=${repo}
fi
done
printf "%s\n" "$team"
}
show_db() {
show_agent
if ! yq -r "${REPO_DB}" 1>/dev/null 2>/dev/null; then
die "${REPO_DB} invalid!"
fi
yq -rP 'with_entries(select(.key == "team" or .key == "pkgbase"))' "${REPO_DB}"
yq -rP '. | with_entries(select(.value.name))' "${REPO_DB}"
yq -rP '. | .repos | with_entries(select(.value.version))' "${REPO_DB}"
return 0
}
@@ -355,24 +297,3 @@ show_srcinfo_base() {
show_srcinfo_pkgs() {
pkg2yaml . | yq '.pkgnames'
}
write_jenkinsfile() {
printf "@Library('artix-ci@%s') import org.artixlinux.RepoPackage\n" "${1}" > "${REPO_CI}"
{
printf '\n'
printf 'PackagePipeline(new RepoPackage(this))\n'
} >> "${REPO_CI}"
}
migrate_agent_branch() {
local branch=${AGENTS[0]}
for a in "${AGENTS[@]}"; do
if grep @"$a" "${REPO_CI}" &>/dev/null; then
branch="$a"
fi
done
if grep @galaxy "${REPO_CI}" &>/dev/null; then
branch=${AGENTS[1]}
fi
write_jenkinsfile "${branch}"
}

View File

@@ -18,7 +18,6 @@ artixpkg_git_usage() {
create Create a new Gitea package repository
pull Pull a package repository
push Push a package repository
ci Configure CI agent
OPTIONS
-h, --help Show this help text
@@ -26,10 +25,9 @@ artixpkg_git_usage() {
EXAMPLES
$ ${COMMAND} clone libfoo linux libbar
$ ${COMMAND} clone --maintainer tux
$ ${COMMAND} clone --search mytopic
$ ${COMMAND} config libfoo
$ ${COMMAND} config --topic mytopic
$ ${COMMAND} config --maintainer tux
$ ${COMMAND} create -c libfoo
$ ${COMMAND} ci -a ${AGENTS[1]} libfoo
_EOF_
}
@@ -62,14 +60,6 @@ artixpkg_git() {
artixpkg_git_config "$@"
exit 0
;;
ci)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/git/ci.sh
source "${LIBDIR}"/pkg/git/ci.sh
artixpkg_git_ci "$@"
exit 0
;;
create)
_ARTOOLS_COMMAND+=" $1"
shift

View File

@@ -1,132 +0,0 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_GIT_CI_SH:-} ]] || return 0
ARTOOLS_INCLUDE_GIT_CI_SH=1
# shellcheck source=src/lib/pkg/db/db.sh
source "${LIBDIR}"/pkg/db/db.sh
set -e
artixpkg_git_ci_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-a, --agent NAME Set the CI agent (default: ${AGENTS[0]})
Possible values: $(yaml_array ${AGENTS[@]})
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --agent ${AGENTS[1]} libfoo
_EOF_
}
artixpkg_git_ci() {
# options
local paths=()
local AGENT=${AGENTS[0]}
local SWITCH=0
local CREATED=0
# variables
local path realpath pkgbase
while (( $# )); do
case $1 in
-h|--help)
artixpkg_git_ci_usage
exit 0
;;
-a|--agent)
(( $# <= 1 )) && die "missing argument for %s" "$1"
AGENT="$2"
SWITCH=1
shift 2
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
paths=("$@")
break
;;
esac
done
# check if invoked without any path from within a packaging repo
if (( ${#paths[@]} == 0 )); then
if [[ -f PKGBUILD ]]; then
paths=(".")
else
artixpkg_git_ci_usage
exit 1
fi
fi
for path in "${paths[@]}"; do
if ! realpath=$(realpath -e "${path}"); then
error "No such directory: ${path}"
continue
fi
pkgbase=$(basename "${realpath}")
pkgbase=${pkgbase%.git}
if [[ ! -d "${path}/.git" ]]; then
error "Not a Git repository: ${path}"
continue
fi
( cd "${path}" || return
if [[ ! -f ${REPO_CI} ]]; then
[[ -d .artixlinux ]] || mkdir .artixlinux
msg "Adding ci support ..."
write_jenkinsfile "${AGENT}"
git add "${REPO_CI}"
git commit -m "add ci support"
CREATED=1
fi
if [[ ! -f ${REPO_DB} ]]; then
msg "Creating repo db ..."
create_repo_db
if [[ -f PKGBUILD ]]; then
# shellcheck source=contrib/makepkg/PKGBUILD.proto
source PKGBUILD
update_yaml_base
fi
git add "${REPO_DB}"
git commit -m "create repo db"
fi
if (( SWITCH )); then
msg "Switching to agent (${AGENT}) ..."
write_jenkinsfile "${AGENT}"
if (( ! CREATED )); then
git add "${REPO_CI}"
git commit -m "switch agent"
fi
fi
)
done
}

View File

@@ -7,10 +7,6 @@ ARTOOLS_INCLUDE_GIT_CLONE_SH=1
# shellcheck source=src/lib/pkg/git/config.sh
source "${LIBDIR}"/pkg/git/config.sh
# shellcheck source=src/lib/pkg/git/ci.sh
source "${LIBDIR}"/pkg/git/ci.sh
# shellcheck source=src/lib/pkg/admin/team.sh
source "${LIBDIR}"/pkg/admin/team.sh
set -e
@@ -21,23 +17,21 @@ artixpkg_git_clone_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer NAME Clone all packages of the named maintainer
-s, --search TOPIC Clone all packages of the named topic
-a, --agent NAME Set the CI agent (default: ${AGENTS[0]})
Possible values: $(yaml_array ${AGENTS[@]})
-t, --team NAME Assign team name (default: ${ARTIX_TEAMS[1]})
Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-m, --maintainer=NAME Clone all packages of the named maintainer
--protocol https Clone the repository over https
-t, --topic=NAME Clone all packages of the named topic
-a, --agent=NAME Set the CI agent (default: official)
Possible values: [official, galaxy]
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
--all Clone all existing packages, useful for cache warming
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo linux libbar
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --search mytopic
$ ${COMMAND} -j 8 --search mytopic
$ ${COMMAND} --agent ${AGENTS[1]} libfoo
$ ${COMMAND} --topic mytopic
$ ${COMMAND} -j 8 --topic mytopic
$ ${COMMAND} --agent galaxy libfoo
_EOF_
}
@@ -54,9 +48,7 @@ artixpkg_git_clone() {
local CLONE_ALL=0
local MAINTAINER=
local TOPIC=
local CONFIG_OPTS=()
local AGENT_OPTS=()
local TEAM_OPTS=()
local CONFIGURE_OPTIONS=()
local jobs=
jobs=$(nproc)
@@ -70,7 +62,7 @@ artixpkg_git_clone() {
;;
--protocol=https)
GIT_REPO_BASE_URL="${GIT_HTTPS}/"
CONFIG_OPTS+=("$1")
CONFIGURE_OPTIONS+=("$1")
shift
;;
--protocol)
@@ -80,7 +72,7 @@ artixpkg_git_clone() {
else
die "unsupported protocol: %s" "$2"
fi
CONFIG_OPTS+=("$1" "$2")
CONFIGURE_OPTIONS+=("$1" "$2")
shift 2
;;
-m|--maintainer)
@@ -88,21 +80,28 @@ artixpkg_git_clone() {
MAINTAINER="$2"
shift 2
;;
-s|--search)
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
-t|--team)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TEAM_OPTS=("--add" "$2")
shift 2
--topic=*)
TOPIC="${1#*=}"
shift
;;
-a|--agent)
(( $# <= 1 )) && die "missing argument for %s" "$1"
AGENT_OPTS=("$1" "$2")
CONFIGURE_OPTIONS+=("$1" "$2")
shift 2
;;
--agent=*)
CONFIGURE_OPTIONS+=("${1}")
shift
;;
--all)
CLONE_ALL=1
shift
@@ -168,8 +167,6 @@ artixpkg_git_clone() {
warning "Skip cloning ${pkgbase}: Directory exists"
fi
artixpkg_git_config "${CONFIG_OPTS[@]}" "${pkgbase}"
artixpkg_git_ci "${AGENT_OPTS[@]}" "${pkgbase}"
artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
artixpkg_git_config "${CONFIGURE_OPTIONS[@]}" "${pkgbase}"
done
}

View File

@@ -5,24 +5,98 @@
[[ -z ${ARTOOLS_INCLUDE_GIT_CONFIG_SH:-} ]] || return 0
ARTOOLS_INCLUDE_GIT_CONFIG_SH=1
# shellcheck source=src/lib/pkg/db/db.sh
source "${LIBDIR}"/pkg/db/db.sh
set -e
commit_ci(){
[[ -d .artixlinux ]] || mkdir .artixlinux
if [[ ${AGENT} == "${ARTIX_DB[11]}" ]]; then
printf "@Library('artix-ci@%s') import org.artixlinux.RepoPackage\n" "${AGENT}" > "${REPO_CI}"
else
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
fi
{
printf '\n'
printf 'PackagePipeline(new RepoPackage(this))\n'
} >> "${REPO_CI}"
git add "${REPO_CI}"
git commit -m "initial ci commit"
}
artixpkg_git_config_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer Set the maintainer topic via gitea api
-d, --drop Drop the maintainer topic via gitea api
-a, --agent NAME Set the CI agent (default: official)
Possible values: [official, galaxy]
--protocol https Configure remote url to use https
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --maintainer libfoo
$ ${COMMAND} --agent galaxy libfoo
$ ${COMMAND} --drop libfoo
$ ${COMMAND} *
_EOF_
}
get_packager_name() {
local packager=$1
local packager_pattern="(.+) <(.+@.+)>"
local name
if [[ ! $packager =~ $packager_pattern ]]; then
return 1
fi
name=$(echo "${packager}"|sed -E "s/${packager_pattern}/\1/")
printf "%s" "${name}"
}
get_packager_email() {
local packager=$1
local packager_pattern="(.+) <(.+@.+)>"
local email
if [[ ! $packager =~ $packager_pattern ]]; then
return 1
fi
email=$(echo "${packager}"|sed -E "s/${packager_pattern}/\2/")
printf "%s" "${email}"
}
is_packager_name_valid() {
local packager_name=$1
if [[ -z ${packager_name} ]]; then
return 1
elif [[ ${packager_name} == "John Tux" ]]; then
return 1
elif [[ ${packager_name} == "Unknown Packager" ]]; then
return 1
fi
return 0
}
is_packager_email_official() {
local packager_email=$1
if [[ -z ${packager_email} ]]; then
return 1
elif [[ $packager_email =~ .+@artixlinux.org ]]; then
return 0
fi
return 1
}
artixpkg_git_config() {
# options
local GIT_REPO_BASE_URL=${GIT_HTTPS}
@@ -33,8 +107,13 @@ artixpkg_git_config() {
jobs=$(nproc)
local paths=()
local SET_TOPIC=0
local DROP_TOPIC=0
local AGENT=
local CI_ADDED=0
# variables
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
local path realpath pkgbase
local PACKAGER GPGKEY packager_name packager_email
@@ -44,6 +123,27 @@ artixpkg_git_config() {
artixpkg_git_config_usage
exit 0
;;
-m|--maintainer)
SET_TOPIC=1
RUNCMD+=" -m"
shift
;;
-d|--drop)
DROP_TOPIC=1
RUNCMD+=" -d"
shift
;;
-a|--agent)
(( $# <= 1 )) && die "missing argument for %s" "$1"
AGENT="$2"
RUNCMD+=" -a ${AGENT}"
shift 2
;;
--agent=*)
AGENT="${1#*=}"
RUNCMD+=" -a ${AGENT}"
shift
;;
--protocol=https)
proto_force=1
shift
@@ -88,10 +188,8 @@ artixpkg_git_config() {
# Load makepkg.conf variables to be available for packager identity
msg "Collecting packager identity from makepkg.conf"
# shellcheck source=src/lib/pkg/packager.sh
source "${LIBDIR}"/pkg/packager.sh
# shellcheck source=config/makepkg/x86_64.conf
load_makepkg_config
if [[ -n ${PACKAGER} ]]; then
if ! packager_name=$(get_packager_name "${PACKAGER}") || \
! packager_email=$(get_packager_email "${PACKAGER}"); then
@@ -123,7 +221,7 @@ artixpkg_git_config() {
if [[ -n ${BOLD} ]]; then
export ARTOOLS_COLOR=always
fi
if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${paths[@]}"; then
if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${paths[@]}"; then
die 'Failed to configure some packages, please check the output'
exit 1
fi
@@ -166,6 +264,58 @@ artixpkg_git_config() {
git config user.signingKey "${GPGKEY}"
fi
# topics meta
if (( SET_TOPIC )); then
if [[ -n ${GIT_TOKEN} ]]; then
local topic gitname
topic="maintainer-${packager_name}"
gitname=$(get_compliant_name "${pkgbase}")
if ! add_topic "${gitname}" "${topic}"; then
warning "failed to set the maintainer topic: ${topic}"
fi
fi
fi
if (( DROP_TOPIC )); then
if [[ -n ${GIT_TOKEN} ]]; then
local topic gitname
topic="maintainer-${packager_name}"
gitname=$(get_compliant_name "${pkgbase}")
if ! remove_topic "${gitname}" "${topic}"; then
warning "failed to drop the maintainer topic: ${topic}"
fi
fi
fi
if [[ ! -f ${REPO_CI} ]]; then
msg "Adding ci support ..."
commit_ci
CI_ADDED=1
fi
if [[ -n ${AGENT} ]] && (( ! CI_ADDED )); then
msg "Switching ci support for [%s] ..." "${AGENT}"
commit_ci
fi
if [[ ! -f ${REPO_DB} ]]; then
msg "Creating repo db ..."
create_repo_db
if [[ -f PKGBUILD ]]; then
# shellcheck source=contrib/makepkg/PKGBUILD.proto
source PKGBUILD
update_yaml_base
fi
git add "${REPO_DB}"
git commit -m "Create repo db"
fi
msg "Querying ${pkgbase} ..."
if ! show_db; then
warning "Could not query ${REPO_DB}"
fi
)
done
}

View File

@@ -9,10 +9,6 @@ ARTOOLS_INCLUDE_GIT_CREATE_SH=1
source "${LIBDIR}"/pkg/git/clone.sh
# shellcheck source=src/lib/pkg/git/config.sh
source "${LIBDIR}"/pkg/git/config.sh
# shellcheck source=src/lib/pkg/git/ci.sh
source "${LIBDIR}"/pkg/git/ci.sh
# shellcheck source=src/lib/pkg/admin/team.sh
source "${LIBDIR}"/pkg/admin/team.sh
set -e
@@ -24,10 +20,8 @@ artixpkg_git_create_usage() {
OPTIONS
-c, --clone Clone the Git repository after creation
-a, --agent NAME Set the CI agent (default: ${AGENTS[0]})
Possible values: $(yaml_array ${AGENTS[@]})
-t, --team NAME Assign team name (default: ${ARTIX_TEAMS[1]})
Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
-t, --team=NAME Assign team name (default: world)
Possible values: [system, world, lib32, galaxy]
-h, --help Show this help text
EXAMPLES
@@ -39,12 +33,17 @@ artixpkg_git_create() {
# options
local pkgbases=()
local pkgbase
local CLONE=0
local CONFIG=0
local AGENT_OPTS=("--agent" "${AGENTS[0]}")
local TEAM_OPTS=("--team" "${ARTIX_TEAMS[1]}")
local clone=0
local config=0
local TEAM="${ARTIX_DB[5]}"
local AGENT=()
local TEAMS=(
"${ARTIX_DB[2]}"
"${ARTIX_DB[5]}"
"${ARTIX_DB[8]}"
"${ARTIX_DB[11]}"
)
# variables
local path
@@ -54,32 +53,30 @@ artixpkg_git_create() {
artixpkg_git_create_usage
exit 0
;;
-a|--agent)
(( $# <= 1 )) && die "missing argument for %s" "$1"
AGENT_OPTS=("$1" "$2")
shift 2
;;
-c|--clone)
CLONE=1
clone=1
shift
;;
-t|--team)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TEAM_OPTS=("$1" "$2")
TEAM="$2"
shift 2
;;
--team=*)
TEAM="${1#*=}"
shift
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
pkgbases=("$@")
break
;;
esac
done
pkgbases=("$@")
if ! in_array "${TEAM_OPTS[1]}" "${ARTIX_TEAMS[@]}"; then
if ! in_array "${TEAM}" "${TEAMS[@]}"; then
die "${TEAM} does not exist!"
fi
@@ -89,41 +86,41 @@ artixpkg_git_create() {
if ! path=$(realpath -e .); then
die "failed to read path from current directory"
fi
pkgbases=("$(basename "${path}")")
CLONE=0
CONFIG=1
else
artixpkg_git_create_usage
exit 1
pkgbases=("$(basename "${path}")")
clone=0
config=1
else
artixpkg_git_create_usage
exit 1
fi
fi
# create
for pkgbase in "${pkgbases[@]}"; do
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if [[ -n ${GIT_TOKEN} ]]; then
if ! create_repo "${gitname}" >/dev/null; then
die "failed to create repository: ${pkgbase}"
else
msg_success "Successfully created ${pkgbase}"
die "failed to create project: ${pkgbase}"
fi
if ! add_team_to_repo "${gitname}" "${TEAM}" >/dev/null; then
warning "failed to assign team: ${TEAM}"
fi
msg_success "Successfully created ${pkgbase}"
fi
if (( CLONE )); then
artixpkg_git_clone "${AGENT_OPTS[@]}" "${TEAM_OPTS[@]}" "${pkgbase}"
elif (( CONFIG )); then
artixpkg_git_config "${pkgbase}"
artixpkg_git_ci "${AGENT_OPTS[@]}" "${pkgbase}"
artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
if [[ ${TEAM} == "${ARTIX_DB[11]}" ]]; then
AGENT+=(--agent="${TEAM}")
fi
if (( clone )); then
artixpkg_git_clone "${AGENT[@]}" "${pkgbase}"
elif (( config )); then
artixpkg_git_config "${AGENT[@]}"
fi
done
# some convenience hints if not in auto clone/config mode
if (( ! CLONE )) && (( ! CONFIG )); then
if (( ! clone )) && (( ! config )); then
cat <<- _EOF_
For new clones:

View File

@@ -14,8 +14,8 @@ artixpkg_git_pull_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer NAME Pull all packages of the named maintainer
-t, --topic NAME Pull all packages of the named topic
-m, --maintainer=NAME Pull all packages of the named maintainer
-t, --topic=NAME Pull all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
--all Pull all existing packages
-h, --help Show this help text
@@ -57,11 +57,19 @@ artixpkg_git_pull() {
MAINTAINER="$2"
shift 2
;;
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
--topic=*)
TOPIC="${1#*=}"
shift
;;
--all)
PULL_ALL=1
shift

View File

@@ -14,14 +14,16 @@ artixpkg_git_push_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer NAME Push all packages of the named maintainer
-t, --topic NAME Push all packages of the named topic
-m, --maintainer=NAME Push all packages of the named maintainer
-t, --topic=NAME Push all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo linux libbar
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --topic mytopic
$ ${COMMAND} -j 8 --topic mytopic
_EOF_
}
@@ -36,6 +38,11 @@ artixpkg_git_push() {
# options
local MAINTAINER=
local TOPIC=
local CONFIGURE_OPTIONS=()
local jobs=
jobs=$(nproc)
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
while (( $# )); do
case $1 in
@@ -48,11 +55,24 @@ artixpkg_git_push() {
MAINTAINER="$2"
shift 2
;;
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
--topic=*)
TOPIC="${1#*=}"
shift
;;
-j|--jobs)
(( $# <= 1 )) && die "missing argument for %s" "$1"
jobs=$2
shift 2
;;
--)
shift
break
@@ -78,6 +98,19 @@ artixpkg_git_push() {
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
fi
# parallelization
if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then
# force colors in parallel if parent process is colorized
if [[ -n ${BOLD} ]]; then
export ARTOOLS_COLOR=always
fi
if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${pkgbases[@]}"; then
die 'Failed to push some packages, please check the output'
exit 1
fi
exit 0
fi
for pkgbase in "${pkgbases[@]}"; do
if [[ -d ${pkgbase} ]]; then
( cd "${pkgbase}" || return

View File

@@ -1,54 +0,0 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
get_packager_name() {
local packager=$1
local packager_pattern="(.+) <(.+@.+)>"
local name
if [[ ! $packager =~ $packager_pattern ]]; then
return 1
fi
name=$(echo "${packager}"|sed -E "s/${packager_pattern}/\1/")
printf "%s" "${name}"
}
get_packager_email() {
local packager=$1
local packager_pattern="(.+) <(.+@.+)>"
local email
if [[ ! $packager =~ $packager_pattern ]]; then
return 1
fi
email=$(echo "${packager}"|sed -E "s/${packager_pattern}/\2/")
printf "%s" "${email}"
}
is_packager_name_valid() {
local packager_name=$1
if [[ -z ${packager_name} ]]; then
return 1
elif [[ ${packager_name} == "John Tux" ]]; then
return 1
elif [[ ${packager_name} == "Unknown Packager" ]]; then
return 1
fi
return 0
}
is_packager_email_official() {
local packager_email=$1
if [[ -z ${packager_email} ]]; then
return 1
elif [[ $packager_email =~ .+@artixlinux.org ]]; then
return 0
fi
return 1
}
# shellcheck source=config/makepkg/x86_64.conf
load_makepkg_config

View File

@@ -11,8 +11,6 @@ source "${LIBDIR}"/pkg/db/db.sh
set -e
load_makepkg_config
has_remote_changes() {
local status
msg "Checking for remote changes ..."
@@ -43,12 +41,9 @@ artixpkg_repo_usage() {
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} add ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} remove ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} move ${ARTIX_DB_MAP[1]} ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} add ${ARTIX_DB[4]} libfoo
$ ${COMMAND} remove ${ARTIX_DB[4]} libfoo
$ ${COMMAND} move ${ARTIX_DB[3]} ${ARTIX_DB[4]} libfoo
$ ${COMMAND} add world libfoo
$ ${COMMAND} remove world libfoo
$ ${COMMAND} move world-gremlins world libfoo
$ ${COMMAND} import libfoo
$ ${COMMAND} show libfoo
_EOF_

View File

@@ -38,15 +38,14 @@ artixpkg_repo_add_usage() {
Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
OPTIONS
-p, --push Push pkgbase
-r, --rebuild Triggers a rebuild
-n, --nocheck Disable the check function
-h, --help Show this help text
-p, --push Push pkgbase
-r, --rebuild Triggers a rebuild
-n, --nocheck Disable the check function
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} ${ARTIX_DB[4]} libfoo
$ ${COMMAND} --push ${ARTIX_DB[4]} libfoo
$ ${COMMAND} --push ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} world-gremlins libfoo
$ ${COMMAND} -p world-gremlins libfoo
_EOF_
}
@@ -65,7 +64,6 @@ artixpkg_repo_add() {
local REBUILD=0
local NOCHECK=0
local ADD=1
local AUTO=0
while (( $# )); do
case $1 in
@@ -98,12 +96,8 @@ artixpkg_repo_add() {
shift
pkgbases+=("$@")
if in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
AUTO=1
else
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
for pkgbase in "${pkgbases[@]}"; do
@@ -130,27 +124,8 @@ artixpkg_repo_add() {
manage-pkgbuild-keys --export
update_yaml_base
local auto
auto=$(auto_detect)
if [[ -z "${auto}" ]]; then
auto=$(team_from_yaml)
fi
if (( AUTO )); then
if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
DEST="${auto}"
else
DEST="${auto}-${DEST}"
fi
fi
update_yaml_add "${REBUILD}" "${ADD}" "${NOCHECK}" "${DEST}"
update_yaml_team "${auto}"
local commit_msg
commit_msg=$(get_commit_msg 'add' "${DEST}")
@@ -158,10 +133,6 @@ artixpkg_repo_add() {
rm .SRCINFO
fi
delete_obsolete_map_keys
migrate_agent_branch
if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
stat_busy 'Staging files'

View File

@@ -7,61 +7,22 @@ ARTOOLS_INCLUDE_REPO_IMPORT_SH=1
set -e
PATCHDIR=${PATCHDIR:-"${WORKSPACE_DIR}/artix-patches"}
declare -A arch_map=(
["archlinux-mirrorlist"]="pacman-mirrorlist"
["artix-rebuild-order"]="arch-rebuild-order"
["virtualbox-host-modules-artix"]="virtualbox-host-modules-arch"
)
update_patches(){
if [[ ! -d "${PATCHDIR}" ]]; then
# ${GIT_ORG}
if ! git clone "${PATCH_URL}" "${PATCHDIR}"; then
error "failed to clone %s" "${PATCHDIR}"
fi
else
if ! git -C "${PATCHDIR}" pull; then
error "Failed to pull artix-patches"
fi
fi
}
patch_pkgbase(){
local name="$1"
local patches="${PATCHDIR}/patches/${name}"
sed -e 's|arch-meson|artix-meson|' -i PKGBUILD
if "${PATCH_MAINTAINER}" && [ -n "${PACKAGER}" ]; then
sed -e 's|# Maintainer:|# Contributor:|' -i PKGBUILD
printf '%s\n%s\n' "# Maintainer: ${PACKAGER}" "$(cat "PKGBUILD")" >"PKGBUILD"
fi
if [ -d "${patches}" ]; then
if [ -f "${patches}/env.txt" ]; then
while read -r line; do
IFS="=" read -r key value <<< "$line"
if [[ -z "${key}" ]] || [[ -z "${value}" ]]; then
die "Invalid key value pair in env.txt"
fi
if declare -p "${key}" &> /dev/null; then
die "Environment variable %s already exists." "${key}"
fi
export "${key}=${value}"
done < "${patches}/env.txt"
fi
for file in "${patches}"/*; do
if [ -x "${file}" ]; then
echo "$> ${name}/$(basename "${file}")"
"${file}" "${TREE_DIR_ARTIX}/${name}"
elif [[ "${file}" == *.diff ]]; then
echo "$> git apply ${name}/$(basename "${file}")"
git -C "${TREE_DIR_ARTIX}/${name}" apply "${file}"
fi
done
fi
case "${name}" in
linux|linux-lts|linux-zen|linux-hardened|linux-rt*)
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-i config
;;
*)
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-e 's|arch-meson|artix-meson|' \
-i PKGBUILD
;;
esac
git --no-pager diff PKGBUILD
}
@@ -135,8 +96,6 @@ artixpkg_repo_import() {
esac
done
update_patches
pkgbases+=("$@")
for pkgbase in "${pkgbases[@]}"; do
@@ -149,11 +108,9 @@ artixpkg_repo_import() {
fi
( cd "${pkgbase}" || return
upstream="${arch_map["$pkgbase"]:-$pkgbase}"
stat_busy "Checking for upstream url"
if ! git config --local --get remote.upstream.url &>/dev/null; then
git remote add upstream "${GIT_UPSTREAM_URL}/${upstream}".git
git remote add upstream "${GIT_UPSTREAM_URL}/${pkgbase}".git
fi
stat_done

View File

@@ -14,13 +14,12 @@ artixpkg_repo_move_usage() {
Usage: ${COMMAND} [OPTIONS] [SOURCE_REPO] [DEST_REPO] [PKGBASE]...
OPTIONS
-p, --push Push pkgbase
-h, --help Show this help text
-p, --push Push pkgbase
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} ${ARTIX_DB[4]} ${ARTIX_DB[5]} libfoo
$ ${COMMAND} --push ${ARTIX_DB[4]} ${ARTIX_DB[5]} libfoo
$ ${COMMAND} --push ${ARTIX_DB_MAP[1]} ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} world-gremlins world libfoo
$ ${COMMAND} -p world-gremlins world libfoo
_EOF_
}
@@ -35,7 +34,6 @@ artixpkg_repo_move() {
local pkgbase
local PUSH=0
local AUTO=0
local DEST
local SRC
@@ -59,19 +57,15 @@ artixpkg_repo_move() {
esac
done
SRC="$1"
SRC="$1"
DEST="$2"
shift 2
if in_array "${SRC}" "${ARTIX_DB_MAP[@]}" && in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
AUTO=1
else
if ! in_array "${SRC}" "${ARTIX_DB[@]}"; then
die "${SRC} does not exist!"
fi
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
if ! in_array "${SRC}" "${ARTIX_DB[@]}"; then
die "${SRC} does not exist!"
fi
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
pkgbases+=("$@")
@@ -92,116 +86,58 @@ artixpkg_repo_move() {
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi
local auto
auto=$(auto_detect)
if [[ -z "${auto}" ]]; then
auto=$(team_from_yaml)
fi
if (( AUTO )); then
if [[ "${SRC}" == "${ARTIX_DB_MAP[2]}" ]]; then
SRC="${auto}"
else
SRC="${auto}-${SRC}"
fi
if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
DEST="${auto}"
else
DEST="${auto}-${DEST}"
fi
fi
local commit_msg src_version
local commit_msg src_version # dest_version
commit_msg=$(get_commit_msg 'move' "${DEST}" "${SRC}")
src_version=$(version_from_yaml "${SRC}")
# dest_version=$(version_from_yaml "${DEST}")
if [[ "$src_version" != "null" ]]; then
if [[ "$src_version" != null ]]; then
update_yaml_move "${SRC}" "${DEST}"
# local ret
# ret=$(vercmp "$src_version" "$dest_version")
#
# if (( ret > 0 )); then
update_yaml_move "${SRC}" "${DEST}"
if [[ -f .SRCINFO ]]; then
rm .SRCINFO
fi
delete_obsolete_map_keys
migrate_agent_branch
update_yaml_team "$(auto_detect)"
if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
stat_busy 'Staging files'
for f in $(git ls-files --modified); do
if [[ "$f" == "${REPO_DB}" ]]; then
git add "$f"
fi
done
stat_done
msg 'Commit'
git commit -m "${commit_msg}"
if (( PUSH )); then
msg "Push (${pkgbase})"
git push origin master
if [[ -f .SRCINFO ]]; then
rm .SRCINFO
fi
msg "Querying ${pkgbase} ..."
if ! show_db; then
warning "Could not query ${REPO_DB}"
if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
stat_busy 'Staging files'
for f in $(git ls-files --modified); do
if [[ "$f" == "${REPO_DB}" ]]; then
git add "$f"
fi
done
stat_done
msg 'Commit'
git commit -m "${commit_msg}"
if (( PUSH )); then
msg "Push (${pkgbase})"
git push origin master
fi
msg "Querying ${pkgbase} ..."
if ! show_db; then
warning "Could not query ${REPO_DB}"
fi
fi
fi
if (( ! AUTO )); then
local gitname
gitname=$(get_compliant_name "${pkgbase}")
# team change on cross repo move system <-> world
if [[ "${SRC}" == ${ARTIX_DB[2]}* ]] \
&& [[ "${DEST}" == ${ARTIX_DB[5]}* ]]; then
if ! add_team_to_repo "${pkgbase}" "${ARTIX_DB[5]}"; then
warning "failed to add team: ${ARTIX_DB[5]}"
fi
if ! remove_team_from_repo "${pkgbase}" "${ARTIX_DB[2]}"; then
warning "failed to remove team: ${ARTIX_DB[2]}"
fi
elif [[ "${SRC}" == ${ARTIX_DB[5]}* ]] \
&& [[ "${DEST}" == ${ARTIX_DB[2]}* ]]; then
if ! add_team_to_repo "${pkgbase}" "${ARTIX_DB[2]}"; then
warning "failed to add team: ${ARTIX_DB[2]}"
fi
if ! remove_team_from_repo "${pkgbase}" "${ARTIX_DB[5]}"; then
warning "failed to remove team: ${ARTIX_DB[5]}"
fi
fi
# team change on cross repo move world <-> galaxy
if [[ "${SRC}" == ${ARTIX_DB[11]}* ]] \
&& [[ "${DEST}" == ${ARTIX_DB[5]}* ]]; then
if ! add_team_to_repo "${gitname}" "${ARTIX_DB[5]}"; then
warning "failed to add team: ${ARTIX_DB[5]}"
fi
if ! remove_team_from_repo "${gitname}" "${ARTIX_DB[11]}"; then
warning "failed to remove team: ${ARTIX_DB[11]}"
fi
elif [[ "${SRC}" == ${ARTIX_DB[5]}* ]] \
&& [[ "${DEST}" == ${ARTIX_DB[11]}* ]]; then
if ! add_team_to_repo "${gitname}" "${ARTIX_DB[11]}"; then
warning "failed to add team: ${ARTIX_DB[11]}"
fi
if ! remove_team_from_repo "${gitname}" "${ARTIX_DB[5]}"; then
warning "failed to remove team: ${ARTIX_DB[5]}"
fi
fi
fi
# elif (( ret < 0 )); then
#
# error "${pkgbase}: invalid move: version $src_version < $dest_version!"
#
# else
# error "${pkgbase}: invalid move: version $src_version = $dest_version!"
#
# fi
else
error "${pkgbase}: invalid move: version $src_version!"

View File

@@ -14,13 +14,12 @@ artixpkg_repo_remove_usage() {
Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
OPTIONS
-p, --push Push pkgbase
-h, --help Show this help text
-p, --push Push pkgbase
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} ${ARTIX_DB[4]} libfoo
$ ${COMMAND} --push ${ARTIX_DB[4]} libfoo
$ ${COMMAND} --push ${ARTIX_DB_MAP[2]} libfoo
$ ${COMMAND} world-gremlins libfoo
$ ${COMMAND} -p world-gremlins libfoo
_EOF_
}
@@ -35,7 +34,6 @@ artixpkg_repo_remove() {
local pkgbase
local PUSH=0
local AUTO=0
local DEST=''
while (( $# )); do
@@ -61,12 +59,8 @@ artixpkg_repo_remove() {
shift
pkgbases=("$@")
if in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
AUTO=1
else
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
die "${DEST} does not exist!"
fi
for pkgbase in "${pkgbases[@]}"; do
@@ -85,30 +79,11 @@ artixpkg_repo_remove() {
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi
local auto
auto=$(auto_detect)
if [[ -z "${auto}" ]]; then
auto=$(team_from_yaml)
fi
if (( AUTO )); then
if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
DEST="${auto}"
else
DEST="${auto}-${DEST}"
fi
fi
local commit_msg
commit_msg=$(get_commit_msg 'remove' "${DEST}")
update_yaml_remove "${DEST}"
delete_obsolete_map_keys
migrate_agent_branch
if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
stat_busy 'Staging files'

View File

@@ -36,12 +36,10 @@ load_pkg_config(){
REPO=${REPO:-'world'}
local -r git_domain="gitea.artixlinux.org"
local git_domain="gitea.artixlinux.org"
GIT_HTTPS=${GIT_HTTPS:-"https://${git_domain}"}
readonly API_URL="${GIT_HTTPS}/api/v1"
GIT_SSH=${GIT_SSH:-"gitea@${git_domain}"}
GIT_TOKEN=${GIT_TOKEN:-''}
@@ -50,8 +48,6 @@ load_pkg_config(){
GIT_UPSTREAM_URL=${GIT_UPSTREAM_URL:-"https://gitlab.archlinux.org/archlinux/packaging/packages"}
GIT_ORG_ARCHIVE=${GIT_ORG_ARCHIVE:-'landfill'}
TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"}
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
@@ -60,14 +56,6 @@ load_pkg_config(){
DBEXT=${DBEXT:-'gz'}
PATCH_MAINTAINER=${PATCH_MAINTAINER:-false}
PATCH_URL=${PATCH_URL:-"${GIT_SSH}:artix/artix-patches.git"}
if [[ -z "${AGENTS[*]}" ]]; then
AGENTS=(orion taurus)
fi
return 0
}

View File

@@ -20,10 +20,9 @@ usage() {
Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS
admin Manage topics, teams and obsolete repos
repo Pacman database modification for packge update, move etc
git Manage Git packaging repositories and their configuration
repo Pacman database modification for package updates, moves, etc.
admin Managegement of topics and obsolete repos
version Show artixpkg version information
OPTIONS
@@ -41,6 +40,8 @@ export _ARTOOLS_COMMAND='artixpkg'
# shellcheck source=src/lib/pkg/util.sh
source "${LIBDIR}"/pkg/util.sh
load_makepkg_config
cd "${TREE_DIR_ARTIX}"
# command checking

View File

@@ -32,8 +32,6 @@ usage() {
printf ' [default: %s]\n' "${repo}"
printf ' -a <arch> Build arch chroot\n'
printf ' [default: %s]\n' "${arch}"
printf ' -e <name> Export PACKAGER\n'
printf " format: 'John Doe <john@doe.com>'\n"
printf ' -c Recreate the chroot before building\n'
printf ' -m Major rebuild\n'
printf ' -N Disable check() function\n'
@@ -46,14 +44,13 @@ usage() {
exit "$1"
}
opts='hcCNmnr:d:a:e:'
opts='hcCNmnr:d:a:'
while getopts "${opts}" arg; do
case "${arg}" in
r) chroots_pkg="$OPTARG" ;;
d) repo="$OPTARG" ;;
a) arch="$OPTARG" ;;
e) packager="$OPTARG" ;;
c) create_first=true ;;
m) rebuild=true ;;
C) mkchrootpkg_args+=(-C) ;;
@@ -93,10 +90,6 @@ else
set_arch="${arch}"
fi
if [[ -n "${packager}" ]]; then
export PACKAGER=${packager}
fi
# Architecture-specific Mount
arch_mounts=()
if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then

View File

@@ -9,6 +9,8 @@ source "${LIBDIR}"/base/message.sh
# shellcheck source=src/lib/pkg/diff.sh
source "${LIBDIR}"/pkg/diff.sh
load_makepkg_config
usage() {
cat <<- _EOF_
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS]

View File

@@ -181,9 +181,7 @@ else
set_arch="${CARCH}"
fi
chroot_args=(/usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/bin)
${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "${chroot_args[@]}" "$@"
${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "$@"
ret=$?

View File

@@ -1,55 +0,0 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
LIBDIR=${LIBDIR:-'@libdir@'}
# shellcheck source=src/lib/base/message.sh
source "${LIBDIR}"/base/message.sh
# shellcheck source=src/lib/base/chroot.sh
source "${LIBDIR}"/base/chroot.sh
# shellcheck source=src/lib/pkg/deploy.sh
source "${LIBDIR}"/pkg/deploy.sh
# shellcheck source=config/makepkg/x86_64.conf
load_makepkg_config
export PKGDEST
export GPG_KEY
export GPG_PASS
passfiles=("$@")
sign_pkg(){
local file_to_sign="$1"
if [ ! -e "$file_to_sign" ]; then
error "%s does not exist!" "$file_to_sign"
exit 1
fi
if [[ -n "${GPG_KEY}" ]] && [[ -n "${GPG_PASS}" ]]; then
msg "Signing [%s]" "${file_to_sign##*/}"
gpg --homedir /etc/pacman.d/gnupg --no-permission-warning \
--no-default-keyring --default-key "${GPG_KEY}" --passphrase "${GPG_PASS}" \
-q --detach-sign "$file_to_sign"
fi
}
check_root PKGDEST,GPG_KEY,GPG_PASS "${BASH_SOURCE[0]}" "$@"
for pkg in "${passfiles[@]}"; do
msg "Searching %s ..." "$pkg"
if pkgfile=$(find_cached_pkgfile "$pkg");then
msg2 "Found: %s" "${pkgfile}"
[[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig
if ! sign_pkg "${pkgfile}"; then
die "Failed to sign package!"
fi
ret=0
else
ret=1
fi
done
exit "$ret"

View File

@@ -20,7 +20,6 @@ add() {
msg "Found: %s" "${pkgfile}"
packages+=("${pkgname}")
action='add'
action_args+=(--include-sigs)
ln -sfv "${pkgfile}"{,.sig} "${repo_path}"/
fi
}
@@ -42,7 +41,7 @@ repo_action() {
done
( cd "${repo_path}" || return
if [[ -n "${action}" ]]; then
repo-"${action}" "${action_args[@]}" "${dest_repo}.${db_ext}" "${packages[@]}"
repo-"${action}" -R "${dest_repo}.${db_ext}" "${packages[@]}"
fi
)
}
@@ -58,7 +57,6 @@ rm_pkg=false
cmd=${0##*/}
dest_repo=${cmd#*-}
action_args=(-R)
usage() {
printf "Usage: %s [options]\n" "${cmd}"