Compare commits
	
		
			73 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						41c90f8d49
	
				 | 
					
					
						|||
| 
						
						
							
						
						c97a0cdd59
	
				 | 
					
					
						|||
| 
						
						
							
						
						1ba16c45f9
	
				 | 
					
					
						|||
| 
						
						
							
						
						95afc31152
	
				 | 
					
					
						|||
| af81317aad | |||
| 79e12f3d10 | |||
| 917cd188d9 | |||
| 
						
						
							
						
						bfe462432d
	
				 | 
					
					
						|||
| 
						
						
							
						
						896e8e195f
	
				 | 
					
					
						|||
| 12d1b784ff | |||
| 
						
						
							
						
						d8129cbb9a
	
				 | 
					
					
						|||
| 
						
						
							
						
						950e0604a4
	
				 | 
					
					
						|||
| 607fa38500 | |||
| 
						
						
							
						
						39a2158c48
	
				 | 
					
					
						|||
| c67826fd2a | |||
| 3ac0122eac | |||
| 9afe8a863e | |||
| 9b1b1c46ed | |||
| 
						
						
							
						
						525c7dd0ee
	
				 | 
					
					
						|||
| 
						
						
							
						
						744eb3ca96
	
				 | 
					
					
						|||
| 
						
						
							
						
						3dd3f806ef
	
				 | 
					
					
						|||
| fa245021bf | |||
| fd74b22bc2 | |||
| 538e5051e5 | |||
| ba2542c697 | |||
| 23c6cecdcc | |||
| 
						
						
							
						
						828844fd9a
	
				 | 
					
					
						|||
| 760f5e8281 | |||
| bb1585ad7b | |||
| be6506d6ee | |||
| 35a9c2f305 | |||
| 5347f45cc5 | |||
| 
						
						
							
						
						c7f11a5bd5
	
				 | 
					
					
						|||
| f3794ff2ad | |||
| 
						
						
							
						
						c6811cca48
	
				 | 
					
					
						|||
| a1f296ff2b | |||
| ac5e0f4b3d | |||
| 2ecfb04dc6 | |||
| e81eac2021 | |||
| 
						
						
							
						
						e612d2c6d2
	
				 | 
					
					
						|||
| 2bed697813 | |||
| 
						
						
							
						
						ba4ac669e7
	
				 | 
					
					
						|||
| 47babd20fd | |||
| 
						
						
							
						
						d35422a74e
	
				 | 
					
					
						|||
| 
						
						
							
						
						94b8957494
	
				 | 
					
					
						|||
| 
						
						
							
						
						a0a485294c
	
				 | 
					
					
						|||
| 
						
						
							
						
						7b67601e44
	
				 | 
					
					
						|||
| 
						
						
							
						
						8db0c1ca39
	
				 | 
					
					
						|||
| 
						
						
							
						
						190340e375
	
				 | 
					
					
						|||
| f7a61731ba | |||
| e959ce10c3 | |||
| d2bbf9d8c4 | |||
| 
						
						
							
						
						1dafa0fb38
	
				 | 
					
					
						|||
| 
						
						
							
						
						982a9ed678
	
				 | 
					
					
						|||
| 19a6ff09f1 | |||
| fac634cf14 | |||
| 71ed464c33 | |||
| f7286a0661 | |||
| aee7c07a04 | |||
| fbcfa79426 | |||
| 87bd203d3e | |||
| ac0472d9ff | |||
| 
						
						
							
						
						e80c07d2fc
	
				 | 
					
					
						|||
| 7584684bea | |||
| e415aa67b9 | |||
| b2512ffe68 | |||
| 1d8b7e83dc | |||
| 
						
						
							
						
						e237afd788
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d7f006ad9
	
				 | 
					
					
						|||
| 
						
						
							
						
						72104728ac
	
				 | 
					
					
						|||
| 
						
						
							
						
						423896750a
	
				 | 
					
					
						|||
| 
						
						
							
						
						ad09046044
	
				 | 
					
					
						|||
| 
						
						
							
						
						c335cab68c
	
				 | 
					
					
						
							
								
								
									
										8
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ run-name: ${{ gitea.actor }}
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - artools/0.32.x
 | 
			
		||||
      - artools/0.33.x
 | 
			
		||||
      - master
 | 
			
		||||
    tags:
 | 
			
		||||
      - 0.*
 | 
			
		||||
@@ -16,13 +16,15 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: checkout repo
 | 
			
		||||
        uses: actions/checkout@main
 | 
			
		||||
      - name: build artools
 | 
			
		||||
      - name: build
 | 
			
		||||
        run: make
 | 
			
		||||
      - name: shellcheck artools
 | 
			
		||||
      - name: shellcheck
 | 
			
		||||
        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'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
SHELL=/bin/bash
 | 
			
		||||
 | 
			
		||||
V=0.32
 | 
			
		||||
V=0.36
 | 
			
		||||
BUILDTOOLVER ?= $(V)
 | 
			
		||||
 | 
			
		||||
CHROOTVER=0.12
 | 
			
		||||
@@ -35,13 +35,16 @@ SETARCH_ALIASES = $(wildcard config/setarch-aliases.d/*)
 | 
			
		||||
TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*)
 | 
			
		||||
TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*)
 | 
			
		||||
 | 
			
		||||
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg 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
 | 
			
		||||
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" \
 | 
			
		||||
@@ -69,13 +72,15 @@ $(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
 | 
			
		||||
 | 
			
		||||
conf_pkg:
 | 
			
		||||
	@install -d $(BUILDDIR)/makepkg.conf.d $(BUILDDIR)/artools
 | 
			
		||||
	@cp -a $(MAKEPKG_CONFIGS) $(BUILDDIR)/makepkg.conf.d
 | 
			
		||||
	@cp -ra $(MAKEPKG_CONFIGS) $(BUILDDIR)/makepkg.conf.d
 | 
			
		||||
	@cp -a $(TOOLS_CONFIGS_PKG) $(BUILDDIR)/artools
 | 
			
		||||
 | 
			
		||||
conf_iso:
 | 
			
		||||
@@ -106,10 +111,14 @@ install_pkg: binprogs_pkg
 | 
			
		||||
 | 
			
		||||
	for conf in $(notdir $(TOOLS_CONFIGS_PKG)); do install -Dm0644 $(BUILDDIR)/$(TOOLS)/$$conf $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)/$${conf##*/}; done
 | 
			
		||||
 | 
			
		||||
	for conf in $(notdir $(MAKEPKG_CONFIGS)); do install -Dm0644 $(BUILDDIR)/makepkg.conf.d/$$conf $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
 | 
			
		||||
	cp -ra $(BUILDDIR)/makepkg.conf.d -t $(DESTDIR)$(DATADIR)
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
@@ -126,13 +135,12 @@ uninstall:
 | 
			
		||||
	for f in $(notdir $(LIBRARY)); do rm -f $(DESTDIR)$(DATADIR)/lib/$$f; done
 | 
			
		||||
	rm -rf $(DESTDIR)$(DATADIR)/lib
 | 
			
		||||
	for conf in $(notdir $(TOOLS_CONFIGS)); do rm -f $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)/$${conf##*/}; done
 | 
			
		||||
	for conf in $(notdir $(MAKEPKG_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
 | 
			
		||||
	rm -rf $(DESTDIR)$(DATADIR)/makepkg.conf.d
 | 
			
		||||
	for conf in $(notdir $(PACMAN_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/pacman.conf.d/$${conf##*/}; done
 | 
			
		||||
	for f in $(notdir $(SETARCH_ALIASES)); do rm -f $(DESTDIR)$(DATADIR)/setarch-aliases.d/$$f; done
 | 
			
		||||
	rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
 | 
			
		||||
	rmdir --ignore-fail-on-non-empty \
 | 
			
		||||
		$(DESTDIR)$(DATADIR)/setarch-aliases.d \
 | 
			
		||||
		$(DESTDIR)$(DATADIR)/makepkg.conf.d \
 | 
			
		||||
		$(DESTDIR)$(DATADIR)/pacman.conf.d \
 | 
			
		||||
		$(DESTDIR)$(DATADIR) \
 | 
			
		||||
		$(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
 | 
			
		||||
@@ -144,5 +152,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
 | 
			
		||||
.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
 | 
			
		||||
.DELETE_ON_ERROR:
 | 
			
		||||
 
 | 
			
		||||
@@ -32,3 +32,15 @@
 | 
			
		||||
 | 
			
		||||
# default packaging org
 | 
			
		||||
# GIT_ORG='packages'
 | 
			
		||||
 | 
			
		||||
# default archiving org
 | 
			
		||||
# GIT_ORG_ARCHIVE='landfill'
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# override the default debug pool
 | 
			
		||||
# PKGDEST_DBG=${WORKSPACE_DIR}/packages-debug
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								config/makepkg/conf.d/fortran.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								config/makepkg/conf.d/fortran.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# /etc/makepkg.conf.d/fortran.conf
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# FORTRAN LANGUAGE SUPPORT
 | 
			
		||||
#########################################################################
 | 
			
		||||
 | 
			
		||||
# Flags used for the Fortran compiler, similar in spirit to CFLAGS. Read
 | 
			
		||||
# linkman:gfortran[1] for more details on the available flags.
 | 
			
		||||
#FFLAGS="-O2 -pipe"
 | 
			
		||||
#FCFLAGS="$FFLAGS"
 | 
			
		||||
 | 
			
		||||
# Additional compiler flags appended to `FFLAGS` and `FCFLAGS` for use in debugging. Usually
 | 
			
		||||
# this would include: ``-g''. Read linkman:gfortran[1] for more details on the wide
 | 
			
		||||
# variety of compiler flags available.
 | 
			
		||||
#DEBUG_FFLAGS="-g"
 | 
			
		||||
							
								
								
									
										19
									
								
								config/makepkg/conf.d/rust.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								config/makepkg/conf.d/rust.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
# shellcheck disable=2034
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# /etc/makepkg.conf.d/rust.conf
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# RUST LANGUAGE SUPPORT
 | 
			
		||||
#########################################################################
 | 
			
		||||
 | 
			
		||||
# Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
 | 
			
		||||
# linkman:rustc[1] for more details on the available flags.
 | 
			
		||||
RUSTFLAGS="-Cforce-frame-pointers=yes"
 | 
			
		||||
 | 
			
		||||
# Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
 | 
			
		||||
# Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
 | 
			
		||||
# more details on the available flags.
 | 
			
		||||
DEBUG_RUSTFLAGS="-C debuginfo=2"
 | 
			
		||||
@@ -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::bzr'
 | 
			
		||||
VCSCLIENTS=('bzr::breezy'
 | 
			
		||||
            'fossil::fossil'
 | 
			
		||||
            'git::git'
 | 
			
		||||
            'hg::mercurial'
 | 
			
		||||
@@ -41,19 +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=2 -Wformat -Werror=format-security \
 | 
			
		||||
        -Wp,-D_FORTIFY_SOURCE=3 -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"
 | 
			
		||||
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
 | 
			
		||||
@@ -82,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)
 | 
			
		||||
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
 | 
			
		||||
#  A negated option will do the opposite of the comments below.
 | 
			
		||||
#
 | 
			
		||||
#-- strip:      Strip symbols from binaries/libraries
 | 
			
		||||
@@ -94,6 +93,7 @@ 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,6 +113,8 @@ 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								config/makepkg/x86_64.conf.d/fortran.conf
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								config/makepkg/x86_64.conf.d/fortran.conf
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
../conf.d/fortran.conf
 | 
			
		||||
							
								
								
									
										1
									
								
								config/makepkg/x86_64.conf.d/rust.conf
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								config/makepkg/x86_64.conf.d/rust.conf
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
../conf.d/rust.conf
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ 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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										296
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,296 @@
 | 
			
		||||
#/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
_artixpkg_pkgbase() {
 | 
			
		||||
    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 agent_flag_present
 | 
			
		||||
    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
 | 
			
		||||
    agent_flag_present=false
 | 
			
		||||
    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
 | 
			
		||||
        if [[ $word == -a || $word == --agent ]]; then
 | 
			
		||||
            # -a can also refer to --adopt
 | 
			
		||||
            agent_flag_present=true
 | 
			
		||||
        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 "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 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 repo"*)
 | 
			
		||||
                    if [ "$agent_flag_present" = true ] ; then
 | 
			
		||||
                        ((comp_cword_exflag--))
 | 
			
		||||
                    fi
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            case "${comps}" in
 | 
			
		||||
                                "artixpkg repo add"*)
 | 
			
		||||
                                    local repoAddCommon="-p --push -r --rebuild -n --nocheck -a --agent -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 -a --agent -h --help $autorepos $repos" -- ${cur}))
 | 
			
		||||
                                            ;;
 | 
			
		||||
                                        *)
 | 
			
		||||
                                            COMPREPLY=($(compgen -W "-p --push -a --agent -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                                            ;;
 | 
			
		||||
                                    esac
 | 
			
		||||
                                    ;;
 | 
			
		||||
                                "artixpkg repo move"*)
 | 
			
		||||
                                    case "${comp_cword_exflag}" in
 | 
			
		||||
                                        3|4)
 | 
			
		||||
                                            COMPREPLY=($(compgen -W "-p --push -a --agent -h --help $autorepos $repos" -- ${cur}))
 | 
			
		||||
                                            ;;
 | 
			
		||||
                                        *)
 | 
			
		||||
                                            COMPREPLY=($(compgen -W "-p --push -a --agent -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                                            ;;
 | 
			
		||||
                                    esac
 | 
			
		||||
                                    ;;
 | 
			
		||||
                            esac
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git clone"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "--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 -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
 | 
			
		||||
                        "-t"|"--team")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-c --clone -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")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer -t --topic -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 --delete -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
 | 
			
		||||
							
								
								
									
										205
									
								
								contrib/completion/zsh/_artixpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								contrib/completion/zsh/_artixpkg.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,205 @@
 | 
			
		||||
#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 "$@"
 | 
			
		||||
@@ -8,25 +8,30 @@ yaml_array() {
 | 
			
		||||
    local array yaml
 | 
			
		||||
 | 
			
		||||
    for entry in "$@"; do
 | 
			
		||||
        yaml="{name: ${entry}, action: enable, alias: add, target: default}"
 | 
			
		||||
        yaml="{name: ${entry}, action: enable}"
 | 
			
		||||
        array="${array:-}${array:+,} ${yaml}"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${array}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
configure_calamares(){
 | 
			
		||||
    local mods="$1/etc/calamares/modules"
 | 
			
		||||
    if [[ -d "$mods" ]];then
 | 
			
		||||
        msg2 "Configuring: Calamares"
 | 
			
		||||
    for config in online offline; do
 | 
			
		||||
        local mods="$1/etc/calamares-$config/modules"
 | 
			
		||||
        if [[ -d "$mods" ]];then
 | 
			
		||||
            msg2 "Configuring: Calamares %s" "$config"
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
            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
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    if [[ -d "$1"/etc/calamares-offline ]]; then
 | 
			
		||||
        ln -sf calamares-offline "$1"/etc/calamares
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,6 @@ prepare_boot_extras(){
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    cp "$src"/boot/memtest86+/memtest.bin "$dest"/memtest
 | 
			
		||||
    cp "$src"/usr/share/licenses/common/GPL2/license.txt "$dest"/memtest.COPYING
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ add_svc_dinit(){
 | 
			
		||||
    for svc in $names; do
 | 
			
		||||
        if [[ -d $mnt/etc/dinit.d/boot.d ]]; then
 | 
			
		||||
            msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
 | 
			
		||||
            chroot "$mnt" ln -s ../"$svc" /etc/dinit.d/boot.d/"$svc" &>/dev/null
 | 
			
		||||
            chroot "$mnt" dinitctl enable -o "$svc" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,10 @@
 | 
			
		||||
[[ -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() {
 | 
			
		||||
@@ -13,17 +17,21 @@ artixpkg_admin_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        transfer          Transfer obsolete repository to landfill
 | 
			
		||||
        maintainer        Manage repo maintainer
 | 
			
		||||
        query             Query maintainers and topics
 | 
			
		||||
        team              Manage repo team
 | 
			
		||||
        topic             Manage topics
 | 
			
		||||
        transfer          Transfer obsolete repository to landfill
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} transfer libfoo libbar
 | 
			
		||||
        $ ${COMMAND} query --maintainer tux
 | 
			
		||||
        $ ${COMMAND} query --topic kf5
 | 
			
		||||
        $ ${COMMAND} query --topic mytopic
 | 
			
		||||
        $ ${COMMAND} topic --add mytopic libfoo
 | 
			
		||||
        $ ${COMMAND} team --add ${ARTIX_TEAMS[3]} libfoo
 | 
			
		||||
        $ ${COMMAND} maintainer --adopt libfoo libbar
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -40,14 +48,7 @@ artixpkg_admin() {
 | 
			
		||||
            artixpkg_admin_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        transfer)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/admin/transfer.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/admin/transfer.sh
 | 
			
		||||
            artixpkg_admin_transfer "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
        query)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
@@ -56,6 +57,14 @@ artixpkg_admin() {
 | 
			
		||||
            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
 | 
			
		||||
@@ -64,6 +73,22 @@ artixpkg_admin() {
 | 
			
		||||
            artixpkg_admin_topic "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        transfer)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/admin/transfer.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/admin/transfer.sh
 | 
			
		||||
            artixpkg_admin_transfer "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        maintainer)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/admin/maintainer.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/admin/maintainer.sh
 | 
			
		||||
            artixpkg_admin_maintainer "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										139
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,139 @@
 | 
			
		||||
#!/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/util/packager.sh
 | 
			
		||||
    source "${LIBDIR}"/pkg/util/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
 | 
			
		||||
}
 | 
			
		||||
@@ -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,19 +47,11 @@ 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										154
									
								
								src/lib/pkg/admin/team.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								src/lib/pkg/admin/team.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,154 @@
 | 
			
		||||
#!/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: (${ARTIX_TEAMS[@]})
 | 
			
		||||
        -r, --remove NAME           Remove team from repo
 | 
			
		||||
                                    Possible values: (${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
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -14,16 +14,18 @@ artixpkg_admin_topic_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -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
 | 
			
		||||
        -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
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} --add mytopic libfoo
 | 
			
		||||
        $ ${COMMAND} --del mytopic libbar
 | 
			
		||||
        $ ${COMMAND} --remove mytopic libbar
 | 
			
		||||
        $ ${COMMAND} --add mytopic libfoo libbar
 | 
			
		||||
        $ ${COMMAND} --del mytopic libfoo libbar
 | 
			
		||||
        $ ${COMMAND} --remove mytopic libfoo libbar
 | 
			
		||||
        $ ${COMMAND} --delete libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -40,8 +42,9 @@ artixpkg_admin_topic() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local ADD_TOPIC
 | 
			
		||||
    local DEL_TOPIC
 | 
			
		||||
    local RM_TOPIC
 | 
			
		||||
    local ADD=0
 | 
			
		||||
    local RM=0
 | 
			
		||||
    local DEL=0
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
@@ -50,36 +53,29 @@ 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+=" -a ${ADD_TOPIC}"
 | 
			
		||||
                RUNCMD+=" $1 ${ADD_TOPIC}"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --add=*)
 | 
			
		||||
                ADD_TOPIC="${1#*=}"
 | 
			
		||||
                ADD=1
 | 
			
		||||
                RUNCMD+=" --add=${ADD_TOPIC}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -d|--del)
 | 
			
		||||
            -r|--remove)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                DEL_TOPIC="$2"
 | 
			
		||||
                DEL=1
 | 
			
		||||
                RUNCMD+=" -d ${DEL_TOPIC}"
 | 
			
		||||
                RM_TOPIC="$2"
 | 
			
		||||
                RM=1
 | 
			
		||||
                RUNCMD+=" $1 ${RM_TOPIC}"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --del=*)
 | 
			
		||||
                DEL_TOPIC="${1#*=}"
 | 
			
		||||
            -d|--delete)
 | 
			
		||||
                DEL=1
 | 
			
		||||
                RUNCMD+=" --del=${DEL_TOPIC}"
 | 
			
		||||
                RUNCMD+=" $1"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_admin_topic_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -j|--jobs)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                jobs=$2
 | 
			
		||||
@@ -115,21 +111,25 @@ 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 the topic: ${ADD_TOPIC}"
 | 
			
		||||
                    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}"
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if (( DEL )); then
 | 
			
		||||
                local gitname
 | 
			
		||||
                gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
                if ! remove_topic "${gitname}" "${DEL_TOPIC}"; then
 | 
			
		||||
                    warning "failed to delete the topic: ${DEL_TOPIC}"
 | 
			
		||||
                if ! remove_all_topics "${gitname}" "${GIT_ORG}"; then
 | 
			
		||||
                    warning "failed to delete all topics: ${gitname}"
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,6 @@ artixpkg_admin_transfer() {
 | 
			
		||||
    # options
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local waste_org="landfill"
 | 
			
		||||
 | 
			
		||||
    local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
 | 
			
		||||
@@ -60,7 +59,12 @@ artixpkg_admin_transfer() {
 | 
			
		||||
 | 
			
		||||
    if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
        for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
            transfer_repo "${pkgbase}" "${waste_org}"
 | 
			
		||||
            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}"
 | 
			
		||||
        done
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ add_team_to_repo() {
 | 
			
		||||
    local pkgbase="$1"
 | 
			
		||||
    local team="$2"
 | 
			
		||||
    local url
 | 
			
		||||
    url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/teams/$team"
 | 
			
		||||
    url="${API_URL}/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="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/teams/$team"
 | 
			
		||||
    url="${API_URL}/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="${GIT_HTTPS}/api/v1/org/${GIT_ORG}/repos"
 | 
			
		||||
    url="${API_URL}/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\": [] }"
 | 
			
		||||
    url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/transfer"
 | 
			
		||||
    json="{ \"new_owner\": \"$new_owner\",  \"team_ids\": [], \"archived\": \"true\" }"
 | 
			
		||||
    url="${API_URL}/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="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000"
 | 
			
		||||
    url="${API_URL}/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="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics/$topic"
 | 
			
		||||
    url="${API_URL}/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="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics/$topic"
 | 
			
		||||
    url="${API_URL}/repos/${GIT_ORG}/$pkgbase/topics/$topic"
 | 
			
		||||
 | 
			
		||||
    stat_busy "Remove topic ($topic) from [$pkgbase]"
 | 
			
		||||
    api_delete "$url" \
 | 
			
		||||
@@ -128,8 +128,10 @@ remove_topic() {
 | 
			
		||||
 | 
			
		||||
search_topic() {
 | 
			
		||||
    local search="$1"
 | 
			
		||||
    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"
 | 
			
		||||
    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}"
 | 
			
		||||
 | 
			
		||||
    stat_busy "Query for topic (${search})"
 | 
			
		||||
    api_get "$url" \
 | 
			
		||||
@@ -137,4 +139,63 @@ 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,27 +17,48 @@ readonly ARTIX_DB=(
 | 
			
		||||
    galaxy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly ARTIX_DB_MAP=(
 | 
			
		||||
    goblins
 | 
			
		||||
    gremlins
 | 
			
		||||
    stable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly AGENTS=(
 | 
			
		||||
    orion
 | 
			
		||||
    taurus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly ARTIX_TEAMS=(
 | 
			
		||||
    "${ARTIX_DB[2]}"
 | 
			
		||||
    "${ARTIX_DB[5]}"
 | 
			
		||||
    "${ARTIX_DB[8]}"
 | 
			
		||||
    "${ARTIX_DB[11]}"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
declare -A AGENT_MAP=(
 | 
			
		||||
    ["${ARTIX_TEAMS[0]}"]=${AGENTS[0]}
 | 
			
		||||
    ["${ARTIX_TEAMS[1]}"]=${AGENTS[0]}
 | 
			
		||||
    ["${ARTIX_TEAMS[2]}"]=${AGENTS[1]}
 | 
			
		||||
    ["${ARTIX_TEAMS[3]}"]=${AGENTS[1]}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly REPO_DB='.artixlinux/pkgbase.yaml'
 | 
			
		||||
 | 
			
		||||
readonly REPO_CI='.artixlinux/Jenkinsfile'
 | 
			
		||||
 | 
			
		||||
yaml_array() {
 | 
			
		||||
    local array
 | 
			
		||||
readonly SRCINFO='.artixlinux/srcinfo.yaml'
 | 
			
		||||
 | 
			
		||||
    for entry in "$@"; do
 | 
			
		||||
        array="${array:-}${array:+,} ${entry}"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${array}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_package_names() {
 | 
			
		||||
    local version
 | 
			
		||||
    local array
 | 
			
		||||
    local architecture pkg
 | 
			
		||||
    version=$(get_full_version)
 | 
			
		||||
    for pkg in "${pkgname[@]}"; do
 | 
			
		||||
        architecture=$(get_pkg_arch "${pkg}")
 | 
			
		||||
        printf "%s-%s-%s%s\n" "$pkg" "$version" "$architecture" "$PKGEXT"
 | 
			
		||||
        array="${array:-}${array:+,} $pkg-$version-$architecture$PKGEXT"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${array}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_debug_package_names() {
 | 
			
		||||
@@ -46,7 +67,9 @@ print_debug_package_names() {
 | 
			
		||||
    version=$(get_full_version)
 | 
			
		||||
    if check_option "debug" "y" && check_option "strip" "y"; then
 | 
			
		||||
        architecture=$(get_pkg_arch)
 | 
			
		||||
        printf "%s-%s-%s-%s%s\n" "$pkgbase" "debug" "$version" "$architecture" "$PKGEXT"
 | 
			
		||||
        printf "[%s-%s-%s-%s%s]\n" "$pkgbase" "debug" "$version" "$architecture" "$PKGEXT"
 | 
			
		||||
    else
 | 
			
		||||
        printf "%s\n" "[]"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -58,17 +81,6 @@ version_from_yaml() {
 | 
			
		||||
    printf "%s\n" "${version}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
packages_from_yaml() {
 | 
			
		||||
    local dest="$1"
 | 
			
		||||
    local repo pkgs packages
 | 
			
		||||
    repo=".repos.${dest}"
 | 
			
		||||
    mapfile -t packages < <(repo="${repo}" yq -r 'eval(strenv(repo)).packages[]' "${REPO_DB}")
 | 
			
		||||
    for p in "${packages[@]}"; do
 | 
			
		||||
        pkgs="${pkgs:-}${pkgs:+,} ${p}"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${pkgs}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
to_bool() {
 | 
			
		||||
    local int="$1"
 | 
			
		||||
    case "${int}" in
 | 
			
		||||
@@ -100,15 +112,9 @@ create_repo_db() {
 | 
			
		||||
 | 
			
		||||
    yq -n '"---"' > "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P 'with(
 | 
			
		||||
        .pkgbase;
 | 
			
		||||
            .name = null |
 | 
			
		||||
            .version = null |
 | 
			
		||||
            .arch = [] |
 | 
			
		||||
            .pkgname = [] )' \
 | 
			
		||||
        -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P 'with(
 | 
			
		||||
    yq -P '
 | 
			
		||||
        .team = null |
 | 
			
		||||
        with(
 | 
			
		||||
        .actions;
 | 
			
		||||
            .addRepo = null |
 | 
			
		||||
            .removeRepo = null |
 | 
			
		||||
@@ -116,41 +122,26 @@ create_repo_db() {
 | 
			
		||||
            .triggersRebuild = false |
 | 
			
		||||
            .triggersRepoAdd = false |
 | 
			
		||||
            .triggersRepoRemove = false |
 | 
			
		||||
            .triggersNoCheck = false )' \
 | 
			
		||||
        -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P '.repos = {}' -i "${REPO_DB}"
 | 
			
		||||
            .triggersNoCheck = false ) |
 | 
			
		||||
            .repos = {}
 | 
			
		||||
        ' -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    for r in "${ARTIX_DB[@]}"; do
 | 
			
		||||
        local repo
 | 
			
		||||
        repo=".repos.${r}" \
 | 
			
		||||
            yq -P 'with(
 | 
			
		||||
                    eval(strenv(repo));
 | 
			
		||||
                        .version = null |
 | 
			
		||||
                        .packages = [] )' \
 | 
			
		||||
                -i "${REPO_DB}"
 | 
			
		||||
        yq -P '
 | 
			
		||||
            with(
 | 
			
		||||
            eval(strenv(repo));
 | 
			
		||||
                .version = null |
 | 
			
		||||
                .packages = [] |
 | 
			
		||||
                .debug = [] )
 | 
			
		||||
            ' -i "${REPO_DB}"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_base() {
 | 
			
		||||
    local version
 | 
			
		||||
    local name
 | 
			
		||||
    local pkgnames
 | 
			
		||||
    local arches
 | 
			
		||||
 | 
			
		||||
    pkgbase="${pkgbase:-${pkgname}}"
 | 
			
		||||
    version="$(get_full_version)"
 | 
			
		||||
    pkgnames=$(yaml_array "${pkgname[@]}")
 | 
			
		||||
    arches=$(yaml_array "${arch[@]}")
 | 
			
		||||
 | 
			
		||||
    name="${pkgbase}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
            .pkgbase;
 | 
			
		||||
                .name = env(name) |
 | 
			
		||||
                .version = env(version) |
 | 
			
		||||
                .arch = env(arches) |
 | 
			
		||||
                .pkgname = env(pkgnames) )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
update_yaml_team() {
 | 
			
		||||
    local team="${1:-${ARTIX_DB[5]}}"
 | 
			
		||||
    team="$team" yq -P '.team = env(team)' -i "${REPO_DB}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_add() {
 | 
			
		||||
@@ -173,36 +164,41 @@ update_yaml_add() {
 | 
			
		||||
        local pkgs
 | 
			
		||||
        local version
 | 
			
		||||
        local pkgfiles
 | 
			
		||||
        local debug_pkgfiles
 | 
			
		||||
 | 
			
		||||
        mapfile -t pkgfiles < <(print_package_names)
 | 
			
		||||
        pkgs=$(print_package_names)
 | 
			
		||||
 | 
			
		||||
        pkgs=$(yaml_array "${pkgfiles[@]}")
 | 
			
		||||
        debug_pkgs=$(print_debug_package_names)
 | 
			
		||||
 | 
			
		||||
        version=$(get_full_version)
 | 
			
		||||
        repo=".repos.${dest}"
 | 
			
		||||
 | 
			
		||||
        version="${version}" pkgs="${pkgs}" repo="${repo}" \
 | 
			
		||||
            yq -P 'with(
 | 
			
		||||
                    eval(strenv(repo));
 | 
			
		||||
                        .version = env(version) |
 | 
			
		||||
                        .packages = env(pkgs) )' \
 | 
			
		||||
                -i "${REPO_DB}"
 | 
			
		||||
        version="${version}" repo="${repo}" \
 | 
			
		||||
        pkgs="${pkgs}" debug_pkgs="${debug_pkgs}" \
 | 
			
		||||
        yq -P '
 | 
			
		||||
            with(
 | 
			
		||||
            eval(strenv(repo));
 | 
			
		||||
                .version = env(version) |
 | 
			
		||||
                .packages = env(pkgs) |
 | 
			
		||||
                .debug = env(debug_pkgs) )
 | 
			
		||||
            ' -i "${REPO_DB}"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    nocheck=$(to_bool "${nocheck}")
 | 
			
		||||
 | 
			
		||||
    nocheck="${nocheck}" add="${add}" \
 | 
			
		||||
    rebuild="${rebuild}" build="${build}" dest="${dest}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
            .actions;
 | 
			
		||||
                .addRepo = env(dest) |
 | 
			
		||||
                .removeRepo = null |
 | 
			
		||||
                .triggersBuild = env(build) |
 | 
			
		||||
                .triggersRebuild = env(rebuild) |
 | 
			
		||||
                .triggersRepoAdd = env(add) |
 | 
			
		||||
                .triggersRepoRemove = false |
 | 
			
		||||
                .triggersNoCheck = env(nocheck) )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
    yq -P '
 | 
			
		||||
        with(
 | 
			
		||||
        .actions;
 | 
			
		||||
            .addRepo = env(dest) |
 | 
			
		||||
            .removeRepo = null |
 | 
			
		||||
            .triggersBuild = env(build) |
 | 
			
		||||
            .triggersRebuild = env(rebuild) |
 | 
			
		||||
            .triggersRepoAdd = env(add) |
 | 
			
		||||
            .triggersRepoRemove = false |
 | 
			
		||||
            .triggersNoCheck = env(nocheck) )
 | 
			
		||||
        ' -i "${REPO_DB}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_remove() {
 | 
			
		||||
@@ -211,30 +207,30 @@ update_yaml_remove() {
 | 
			
		||||
    local repo
 | 
			
		||||
    repo=".repos.${dest}"
 | 
			
		||||
 | 
			
		||||
    repo="${repo}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
                eval(strenv(repo));
 | 
			
		||||
                    .version = null |
 | 
			
		||||
                    .packages = [] )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    dest="${dest}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
            .actions;
 | 
			
		||||
                .addRepo = null |
 | 
			
		||||
                .removeRepo = env(dest) |
 | 
			
		||||
                .triggersBuild = false |
 | 
			
		||||
                .triggersRebuild = false |
 | 
			
		||||
                .triggersRepoAdd = false |
 | 
			
		||||
                .triggersRepoRemove = true |
 | 
			
		||||
                .triggersNoCheck = false )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
    repo="${repo}" dest="${dest}" \
 | 
			
		||||
    yq -P '
 | 
			
		||||
        with(
 | 
			
		||||
        eval(strenv(repo));
 | 
			
		||||
            .version = null |
 | 
			
		||||
            .packages = [] |
 | 
			
		||||
            .debug = [] ) |
 | 
			
		||||
        with(
 | 
			
		||||
        .actions;
 | 
			
		||||
            .addRepo = null |
 | 
			
		||||
            .removeRepo = env(dest) |
 | 
			
		||||
            .triggersBuild = false |
 | 
			
		||||
            .triggersRebuild = false |
 | 
			
		||||
            .triggersRepoAdd = false |
 | 
			
		||||
            .triggersRepoRemove = true |
 | 
			
		||||
            .triggersNoCheck = false )
 | 
			
		||||
        ' -i "${REPO_DB}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_move() {
 | 
			
		||||
    local src="$1"
 | 
			
		||||
    local dest="$2"
 | 
			
		||||
    local pkgs
 | 
			
		||||
    local debug_pkgs
 | 
			
		||||
    local version
 | 
			
		||||
    local src_repo
 | 
			
		||||
    local dest_repo
 | 
			
		||||
@@ -243,39 +239,64 @@ update_yaml_move() {
 | 
			
		||||
    dest_repo=".repos.${dest}"
 | 
			
		||||
 | 
			
		||||
    version=$(version_from_yaml "${src}")
 | 
			
		||||
    pkgs=$(packages_from_yaml "${src}")
 | 
			
		||||
 | 
			
		||||
    src_repo="${src_repo}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
                eval(strenv(src_repo));
 | 
			
		||||
                    .version = null |
 | 
			
		||||
                    .packages = [] )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
    pkgs=$(src_repo="${src_repo}" yq -Pr -o json 'eval(strenv(src_repo)).packages' "${REPO_DB}")
 | 
			
		||||
    debug_pkgs=$(src_repo="${src_repo}" yq -Pr -o json 'eval(strenv(src_repo)).debug' "${REPO_DB}")
 | 
			
		||||
 | 
			
		||||
    version="${version}" pkgs="${pkgs}" dest_repo="${dest_repo}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
                eval(strenv(dest_repo));
 | 
			
		||||
                    .version = env(version) |
 | 
			
		||||
                    .packages = env(pkgs) )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
    src_repo="${src_repo}" dest_repo="${dest_repo}" \
 | 
			
		||||
    version="${version}" src=${src} dest="${dest}" \
 | 
			
		||||
    pkgs="${pkgs}" debug_pkgs="${debug_pkgs}" \
 | 
			
		||||
    yq -P '
 | 
			
		||||
        with(
 | 
			
		||||
        eval(strenv(src_repo));
 | 
			
		||||
            .version = null |
 | 
			
		||||
            .packages = [] |
 | 
			
		||||
            .debug = [] ) |
 | 
			
		||||
        with(
 | 
			
		||||
        eval(strenv(dest_repo));
 | 
			
		||||
            .version = env(version) |
 | 
			
		||||
            .packages = env(pkgs) |
 | 
			
		||||
            .debug = env(debug_pkgs) ) |
 | 
			
		||||
        with(
 | 
			
		||||
        .actions;
 | 
			
		||||
            .addRepo = env(dest) |
 | 
			
		||||
            .removeRepo = env(src) |
 | 
			
		||||
            .triggersBuild = false |
 | 
			
		||||
            .triggersRebuild = false |
 | 
			
		||||
            .triggersRepoAdd = true |
 | 
			
		||||
            .triggersRepoRemove = true |
 | 
			
		||||
            .triggersNoCheck = false )
 | 
			
		||||
        ' -i "${REPO_DB}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    src=${src} dest="${dest}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
            .actions;
 | 
			
		||||
                .addRepo = env(dest) |
 | 
			
		||||
                .removeRepo = env(src) |
 | 
			
		||||
                .triggersBuild = false |
 | 
			
		||||
                .triggersRebuild = false |
 | 
			
		||||
                .triggersRepoAdd = true |
 | 
			
		||||
                .triggersRepoRemove = true |
 | 
			
		||||
                .triggersNoCheck = false )' \
 | 
			
		||||
            -i "${REPO_DB}"
 | 
			
		||||
team_from_yaml() {
 | 
			
		||||
    local team
 | 
			
		||||
    team=$(yq -rP '.team' "${REPO_DB}")
 | 
			
		||||
    printf "$team"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
detect_team() {
 | 
			
		||||
    local team
 | 
			
		||||
 | 
			
		||||
    for repo in "${ARTIX_TEAMS[@]}"; do
 | 
			
		||||
        local key res
 | 
			
		||||
        res=$(key=".repos.$repo" yq -rP 'eval(strenv(key)) | .version' "${REPO_DB}")
 | 
			
		||||
        if [[ "${res}" != "null" ]]; then
 | 
			
		||||
            team=${repo}
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "$team"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_agent() {
 | 
			
		||||
    local agent="orion"
 | 
			
		||||
    if grep @galaxy "${REPO_CI}" &>/dev/null; then
 | 
			
		||||
        agent="taurus"
 | 
			
		||||
    local agent
 | 
			
		||||
    local ci
 | 
			
		||||
    local branch
 | 
			
		||||
    agent="${AGENTS[0]}"
 | 
			
		||||
    ci=$(head -n 1 "${REPO_CI}" | cut -d "'" -f2)
 | 
			
		||||
    branch=${ci#*@}
 | 
			
		||||
    if [[ -n "$branch" ]]; then
 | 
			
		||||
        agent="$branch"
 | 
			
		||||
    fi
 | 
			
		||||
    msg2 "agent: %s" "$agent"
 | 
			
		||||
}
 | 
			
		||||
@@ -285,15 +306,16 @@ show_db() {
 | 
			
		||||
    if ! yq -r "${REPO_DB}" 1>/dev/null 2>/dev/null; then
 | 
			
		||||
        die "${REPO_DB} invalid!"
 | 
			
		||||
    fi
 | 
			
		||||
    yq -rP '. | with_entries(select(.value.name))' "${REPO_DB}"
 | 
			
		||||
    yq -rP '. | .repos | with_entries(select(.value.version))' "${REPO_DB}"
 | 
			
		||||
    yq -rP 'with_entries(select(.key == "team"))' "${REPO_DB}"
 | 
			
		||||
    yq -rP '.repos | with_entries(select(.value.version))' "${REPO_DB}"
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_srcinfo_base() {
 | 
			
		||||
    pkg2yaml . | yq '.pkgbase'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_srcinfo_pkgs() {
 | 
			
		||||
    pkg2yaml . | yq '.pkgnames'
 | 
			
		||||
write_jenkinsfile() {
 | 
			
		||||
    local branch="$1"
 | 
			
		||||
    {
 | 
			
		||||
        printf "@Library('artix-ci@%s') import org.artixlinux.RepoPackage\n" "${branch}"
 | 
			
		||||
        printf '\n'
 | 
			
		||||
        printf 'PackagePipeline(new RepoPackage(this))\n'
 | 
			
		||||
    } > "${REPO_CI}"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								src/lib/pkg/db/upgrade.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/lib/pkg/db/upgrade.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
upgrade_db() {
 | 
			
		||||
    local d
 | 
			
		||||
    for db in "${ARTIX_DB[@]}"; do
 | 
			
		||||
        local res
 | 
			
		||||
        res=$(d=".repos.$db" yq 'eval(strenv(d)) | has("debug")' "${REPO_DB}")
 | 
			
		||||
        if ! "${res}"; then
 | 
			
		||||
            d=".repos.$db" \
 | 
			
		||||
            yq 'eval(strenv(d)).debug = []' -i "${REPO_DB}"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if $(yq '. | has("pkgbase") ' "${REPO_DB}"); then
 | 
			
		||||
        yq 'del(.pkgbase)' -i "${REPO_DB}"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
@@ -25,8 +25,8 @@ artixpkg_git_usage() {
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} clone libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} clone --maintainer tux
 | 
			
		||||
        $ ${COMMAND} config --topic mytopic
 | 
			
		||||
        $ ${COMMAND} config --maintainer tux
 | 
			
		||||
        $ ${COMMAND} clone --search mytopic
 | 
			
		||||
        $ ${COMMAND} config libfoo
 | 
			
		||||
        $ ${COMMAND} create -c libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,8 @@ 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/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -17,21 +19,20 @@ artixpkg_git_clone_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -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]
 | 
			
		||||
        -m, --maintainer NAME      Clone all packages of the named maintainer
 | 
			
		||||
        -s, --search TOPIC         Clone all packages of the named topic
 | 
			
		||||
        -t, --team NAME            Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                                   Possible values: (${ARTIX_TEAMS[@]})
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --protocol https           Clone the repository over https
 | 
			
		||||
        --all                      Clone all existing packages, useful for cache warming
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --topic mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic mytopic
 | 
			
		||||
        $ ${COMMAND} --agent galaxy libfoo
 | 
			
		||||
        $ ${COMMAND} --search mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --search mytopic
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +49,8 @@ artixpkg_git_clone() {
 | 
			
		||||
    local CLONE_ALL=0
 | 
			
		||||
    local MAINTAINER=
 | 
			
		||||
    local TOPIC=
 | 
			
		||||
    local CONFIGURE_OPTIONS=()
 | 
			
		||||
    local CONFIG_OPTS=()
 | 
			
		||||
    local TEAM_OPTS=()
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +64,7 @@ artixpkg_git_clone() {
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol=https)
 | 
			
		||||
                GIT_REPO_BASE_URL="${GIT_HTTPS}/"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1")
 | 
			
		||||
                CONFIG_OPTS+=("$1")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol)
 | 
			
		||||
@@ -72,7 +74,7 @@ artixpkg_git_clone() {
 | 
			
		||||
                else
 | 
			
		||||
                    die "unsupported protocol: %s" "$2"
 | 
			
		||||
                fi
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                CONFIG_OPTS+=("$1" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -m|--maintainer)
 | 
			
		||||
@@ -80,28 +82,16 @@ artixpkg_git_clone() {
 | 
			
		||||
                MAINTAINER="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --maintainer=*)
 | 
			
		||||
                MAINTAINER="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -t|--topic)
 | 
			
		||||
            -s|--search)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TOPIC="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --topic=*)
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
            -t|--team)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                TEAM_OPTS=("--add" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --agent=*)
 | 
			
		||||
                CONFIGURE_OPTIONS+=("${1}")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --all)
 | 
			
		||||
                CLONE_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -167,6 +157,8 @@ artixpkg_git_clone() {
 | 
			
		||||
            warning "Skip cloning ${pkgbase}: Directory exists"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        artixpkg_git_config "${CONFIGURE_OPTIONS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_git_config "${CONFIG_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,92 +11,21 @@ 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}
 | 
			
		||||
@@ -107,13 +36,8 @@ artixpkg_git_config() {
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
    local paths=()
 | 
			
		||||
 | 
			
		||||
    local SET_TOPIC=0
 | 
			
		||||
    local DROP_TOPIC=0
 | 
			
		||||
    local AGENT=
 | 
			
		||||
    local CI_ADDED=0
 | 
			
		||||
 | 
			
		||||
    # variables
 | 
			
		||||
    local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    local path realpath pkgbase
 | 
			
		||||
    local PACKAGER GPGKEY packager_name packager_email
 | 
			
		||||
 | 
			
		||||
@@ -123,27 +47,6 @@ 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
 | 
			
		||||
@@ -188,8 +91,10 @@ artixpkg_git_config() {
 | 
			
		||||
 | 
			
		||||
    # Load makepkg.conf variables to be available for packager identity
 | 
			
		||||
    msg "Collecting packager identity from makepkg.conf"
 | 
			
		||||
    # shellcheck source=config/makepkg/x86_64.conf
 | 
			
		||||
    load_makepkg_config
 | 
			
		||||
 | 
			
		||||
    # shellcheck source=src/lib/pkg/util/packager.sh
 | 
			
		||||
    source "${LIBDIR}"/pkg/util/packager.sh
 | 
			
		||||
 | 
			
		||||
    if [[ -n ${PACKAGER} ]]; then
 | 
			
		||||
        if ! packager_name=$(get_packager_name "${PACKAGER}") || \
 | 
			
		||||
            ! packager_email=$(get_packager_email "${PACKAGER}"); then
 | 
			
		||||
@@ -221,7 +126,7 @@ artixpkg_git_config() {
 | 
			
		||||
        if [[ -n ${BOLD} ]]; then
 | 
			
		||||
            export ARTOOLS_COLOR=always
 | 
			
		||||
        fi
 | 
			
		||||
        if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${paths[@]}"; then
 | 
			
		||||
        if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${paths[@]}"; then
 | 
			
		||||
            die 'Failed to configure some packages, please check the output'
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
@@ -264,38 +169,18 @@ 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
 | 
			
		||||
                [[ -d .artixlinux ]] || mkdir .artixlinux
 | 
			
		||||
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                local agent
 | 
			
		||||
                agent="${AGENT_MAP["${TEAM_OPTS[1]}"]}"
 | 
			
		||||
                write_jenkinsfile "$agent"
 | 
			
		||||
 | 
			
		||||
                git add "${REPO_CI}"
 | 
			
		||||
                git commit -m "add ci support"
 | 
			
		||||
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
@@ -304,18 +189,13 @@ artixpkg_git_config() {
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
                    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
                    source PKGBUILD
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                    pkg2yaml -o "${SRCINFO}"
 | 
			
		||||
                fi
 | 
			
		||||
                git add "${REPO_DB}"
 | 
			
		||||
                git commit -m "Create repo db"
 | 
			
		||||
                git commit -m "create repo db"
 | 
			
		||||
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            msg "Querying ${pkgbase} ..."
 | 
			
		||||
            if ! show_db; then
 | 
			
		||||
                warning "Could not query ${REPO_DB}"
 | 
			
		||||
            fi
 | 
			
		||||
        )
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@ 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/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -20,8 +22,8 @@ artixpkg_git_create_usage() {
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -c, --clone           Clone the Git repository after creation
 | 
			
		||||
        -t, --team=NAME       Assign team name (default: world)
 | 
			
		||||
                              Possible values: [system, world, lib32, galaxy]
 | 
			
		||||
        -t, --team NAME       Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                              Possible values: (${ARTIX_TEAMS[@]})
 | 
			
		||||
        -h, --help            Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
@@ -33,17 +35,11 @@ artixpkg_git_create() {
 | 
			
		||||
    # options
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local clone=0
 | 
			
		||||
    local config=0
 | 
			
		||||
    local TEAM="${ARTIX_DB[5]}"
 | 
			
		||||
    local AGENT=()
 | 
			
		||||
    local CLONE=0
 | 
			
		||||
    local CONFIG=0
 | 
			
		||||
 | 
			
		||||
    local TEAM_OPTS=("--team" "${ARTIX_TEAMS[1]}")
 | 
			
		||||
 | 
			
		||||
    local TEAMS=(
 | 
			
		||||
        "${ARTIX_DB[2]}"
 | 
			
		||||
        "${ARTIX_DB[5]}"
 | 
			
		||||
        "${ARTIX_DB[8]}"
 | 
			
		||||
        "${ARTIX_DB[11]}"
 | 
			
		||||
        )
 | 
			
		||||
    # variables
 | 
			
		||||
    local path
 | 
			
		||||
 | 
			
		||||
@@ -54,29 +50,26 @@ artixpkg_git_create() {
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -c|--clone)
 | 
			
		||||
            clone=1
 | 
			
		||||
            CLONE=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -t|--team)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            TEAM="$2"
 | 
			
		||||
            TEAM_OPTS=("$1" "$2")
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --team=*)
 | 
			
		||||
            TEAM="${1#*=}"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            pkgbases=("$@")
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${TEAM}" "${TEAMS[@]}"; then
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${TEAM_OPTS[1]}" "${ARTIX_TEAMS[@]}"; then
 | 
			
		||||
        die "${TEAM} does not exist!"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
@@ -86,41 +79,40 @@ 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 project: ${pkgbase}"
 | 
			
		||||
                die "failed to create repository: ${pkgbase}"
 | 
			
		||||
            else
 | 
			
		||||
                msg_success "Successfully created ${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 [[ ${TEAM} == "${ARTIX_DB[11]}" ]]; then
 | 
			
		||||
            AGENT+=(--agent="${TEAM}")
 | 
			
		||||
        fi
 | 
			
		||||
        if (( clone )); then
 | 
			
		||||
            artixpkg_git_clone "${AGENT[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( config )); then
 | 
			
		||||
            artixpkg_git_config "${AGENT[@]}"
 | 
			
		||||
 | 
			
		||||
        if (( CLONE )); then
 | 
			
		||||
            artixpkg_git_clone "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( CONFIG )); then
 | 
			
		||||
            artixpkg_git_config "${pkgbase}"
 | 
			
		||||
            artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        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:
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,9 @@ ARTOOLS_INCLUDE_GIT_PULL_SH=1
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
artixpkg_git_pull_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
@@ -14,8 +17,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,19 +60,11 @@ 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
 | 
			
		||||
@@ -131,6 +126,11 @@ artixpkg_git_pull() {
 | 
			
		||||
                    die 'failed to pull %s' "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                msg "Querying ${pkgbase} ..."
 | 
			
		||||
                if ! show_db; then
 | 
			
		||||
                    warning "Could not query ${REPO_DB}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
            )
 | 
			
		||||
        else
 | 
			
		||||
            warning "Skip pulling ${pkgbase}: Directory does not exist"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,16 +14,14 @@ 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
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -m, --maintainer NAME      Push all packages of the named maintainer
 | 
			
		||||
        -t, --topic NAME           Push all packages of the named topic
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --topic mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic mytopic
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -38,11 +36,6 @@ 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
 | 
			
		||||
@@ -55,24 +48,11 @@ 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
 | 
			
		||||
@@ -98,19 +78,6 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,15 @@ ARTOOLS_INCLUDE_REPO_SH=1
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/upgrade.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/upgrade.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
has_remote_changes() {
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
 | 
			
		||||
no_remote_changes() {
 | 
			
		||||
    local status
 | 
			
		||||
    msg "Checking for remote changes ..."
 | 
			
		||||
    git fetch origin &>/dev/null
 | 
			
		||||
@@ -19,10 +24,10 @@ has_remote_changes() {
 | 
			
		||||
    if [[ "$status" == *behind* ]]; then
 | 
			
		||||
        msg2 "changes: yes"
 | 
			
		||||
        error "Remote changes detected! Please pull (%s)" "${pkgbase}"
 | 
			
		||||
        return 0
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
    msg2 "changes: no"
 | 
			
		||||
    return 1
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_repo_usage() {
 | 
			
		||||
@@ -41,9 +46,12 @@ artixpkg_repo_usage() {
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} add world libfoo
 | 
			
		||||
        $ ${COMMAND} remove world libfoo
 | 
			
		||||
        $ ${COMMAND} move world-gremlins world libfoo
 | 
			
		||||
        $ ${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} import libfoo
 | 
			
		||||
        $ ${COMMAND} show libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
 
 | 
			
		||||
@@ -38,14 +38,18 @@ 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
 | 
			
		||||
        -a, --agent NAME        Set the CI agent
 | 
			
		||||
                                [default: auto]
 | 
			
		||||
                                possible values: ${AGENTS[@]}
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} world-gremlins libfoo
 | 
			
		||||
        $ ${COMMAND} -p world-gremlins libfoo
 | 
			
		||||
        $ ${COMMAND} ${ARTIX_DB[4]} libfoo
 | 
			
		||||
        $ ${COMMAND} --push ${ARTIX_DB[4]} libfoo
 | 
			
		||||
        $ ${COMMAND} --push ${ARTIX_DB_MAP[2]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -64,6 +68,8 @@ artixpkg_repo_add() {
 | 
			
		||||
    local REBUILD=0
 | 
			
		||||
    local NOCHECK=0
 | 
			
		||||
    local ADD=1
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
    local AGENT
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
@@ -83,6 +89,11 @@ artixpkg_repo_add() {
 | 
			
		||||
                NOCHECK=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                AGENT="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -96,8 +107,12 @@ artixpkg_repo_add() {
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
        die "${DEST} does not exist!"
 | 
			
		||||
    if in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
        AUTO=1
 | 
			
		||||
    else
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
@@ -110,7 +125,7 @@ artixpkg_repo_add() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                if ! has_remote_changes; then
 | 
			
		||||
                if no_remote_changes; then
 | 
			
		||||
 | 
			
		||||
                    if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
@@ -123,9 +138,34 @@ artixpkg_repo_add() {
 | 
			
		||||
 | 
			
		||||
                    manage-pkgbuild-keys --export
 | 
			
		||||
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                    pkg2yaml -o "${SRCINFO}"
 | 
			
		||||
 | 
			
		||||
                    local team
 | 
			
		||||
                    team=$(detect_team)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${team}" ]]; then
 | 
			
		||||
                        team=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${team}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${team}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    upgrade_db
 | 
			
		||||
 | 
			
		||||
                    update_yaml_add "${REBUILD}" "${ADD}" "${NOCHECK}" "${DEST}"
 | 
			
		||||
 | 
			
		||||
                    update_yaml_team "${team}"
 | 
			
		||||
 | 
			
		||||
                    if [[ -z ${AGENT} ]]; then
 | 
			
		||||
                        AGENT=${AGENT_MAP["${team}"]}
 | 
			
		||||
                    fi
 | 
			
		||||
                    write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                    local commit_msg
 | 
			
		||||
                    commit_msg=$(get_commit_msg 'add' "${DEST}")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,23 +7,60 @@ 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"
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_repo_import_usage() {
 | 
			
		||||
@@ -34,12 +71,14 @@ artixpkg_repo_import_usage() {
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        --tag TAG          Switch the current workspace to a specified version tag
 | 
			
		||||
        --del              Delete files before rsync import
 | 
			
		||||
        -n --no-patch      No patch import
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo
 | 
			
		||||
        $ ${COMMAND} --tag TAG libfoo
 | 
			
		||||
        $ ${COMMAND} --tag TAG --del libfoo
 | 
			
		||||
        $ ${COMMAND} --no-patch libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -53,6 +92,7 @@ artixpkg_repo_import() {
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local TAG
 | 
			
		||||
    local NP=0
 | 
			
		||||
    local rsync_args=()
 | 
			
		||||
    rsync_args+=(
 | 
			
		||||
        -axcihW
 | 
			
		||||
@@ -83,6 +123,10 @@ artixpkg_repo_import() {
 | 
			
		||||
                rsync_args+=(--delete-before)
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -n|--no-patch)
 | 
			
		||||
                NP=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_repo_import_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
@@ -96,6 +140,10 @@ artixpkg_repo_import() {
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if ! (( NP )); then
 | 
			
		||||
        update_patches
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
@@ -108,41 +156,48 @@ 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}/${pkgbase}".git
 | 
			
		||||
                if ! git config get remote.upstream.url &>/dev/null; then
 | 
			
		||||
                    git remote add upstream "${GIT_UPSTREAM_URL}/${upstream}".git
 | 
			
		||||
                fi
 | 
			
		||||
                stat_done
 | 
			
		||||
 | 
			
		||||
                msg2 "Fetching upstream tags"
 | 
			
		||||
                git fetch --tags upstream main
 | 
			
		||||
                stat_busy "Fetching upstream tags"
 | 
			
		||||
                git fetch -fq --prune --tags upstream main
 | 
			
		||||
                stat_done
 | 
			
		||||
 | 
			
		||||
                local latest version
 | 
			
		||||
                latest=$(git describe --tags FETCH_HEAD)
 | 
			
		||||
 | 
			
		||||
                version="${latest}"
 | 
			
		||||
                if [[ -n "${TAG}" ]]; then
 | 
			
		||||
                    version="${TAG}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                if ! has_remote_changes; then
 | 
			
		||||
                if no_remote_changes; then
 | 
			
		||||
                    msg "Querying ${pkgbase} ..."
 | 
			
		||||
                    if ! show_db; then
 | 
			
		||||
                        warning "Could not query ${REPO_DB}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    git checkout "${version}" -b "${version}" &>/dev/null
 | 
			
		||||
                    git checkout -q "${version}" -b "${version}"
 | 
			
		||||
                    local temp
 | 
			
		||||
                    temp=$(mktemp -d --tmpdir "${pkgbase}.XXXXXXXXXX")
 | 
			
		||||
 | 
			
		||||
                    rsync "${rsync_args[@]}" "$(pwd)"/ "${temp}"/ &>/dev/null
 | 
			
		||||
                    git checkout master &>/dev/null
 | 
			
		||||
                    git branch -D "${version}" &>/dev/null
 | 
			
		||||
                    rsync "${rsync_args[@]}" -q "$(pwd)"/ "${temp}"/
 | 
			
		||||
                    git checkout -q master
 | 
			
		||||
                    git branch -q -D "${version}"
 | 
			
		||||
 | 
			
		||||
                    msg "Importing upstream changeset for ${version}"
 | 
			
		||||
                    rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/ #&>/dev/null
 | 
			
		||||
                    rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/
 | 
			
		||||
 | 
			
		||||
                    msg2 "Patching ${pkgbase} ..."
 | 
			
		||||
                    patch_pkgbase "${pkgbase}"
 | 
			
		||||
                    if ! (( NP )); then
 | 
			
		||||
                        msg2 "Patching ${pkgbase} ..."
 | 
			
		||||
                        patch_pkgbase "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
                    git --no-pager diff PKGBUILD
 | 
			
		||||
                fi
 | 
			
		||||
            )
 | 
			
		||||
        fi
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,16 @@ 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
 | 
			
		||||
        -a, --agent NAME        Set the CI agent
 | 
			
		||||
                                [default: auto]
 | 
			
		||||
                                possible values: ${AGENTS[@]}
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} world-gremlins world libfoo
 | 
			
		||||
        $ ${COMMAND} -p world-gremlins world libfoo
 | 
			
		||||
        $ ${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
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -34,9 +38,11 @@ artixpkg_repo_move() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
 | 
			
		||||
    local DEST
 | 
			
		||||
    local SRC
 | 
			
		||||
    local AGENT
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
@@ -48,6 +54,11 @@ artixpkg_repo_move() {
 | 
			
		||||
                PUSH=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                AGENT="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -57,15 +68,19 @@ artixpkg_repo_move() {
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
   	SRC="$1"
 | 
			
		||||
    SRC="$1"
 | 
			
		||||
    DEST="$2"
 | 
			
		||||
    shift 2
 | 
			
		||||
 | 
			
		||||
    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!"
 | 
			
		||||
    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
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
@@ -80,64 +95,140 @@ artixpkg_repo_move() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                if ! has_remote_changes; then
 | 
			
		||||
                if no_remote_changes; then
 | 
			
		||||
 | 
			
		||||
                    if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg src_version # dest_version
 | 
			
		||||
                    local team
 | 
			
		||||
                    team=$(detect_team)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${team}" ]]; then
 | 
			
		||||
                        team=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${SRC}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            SRC="${team}"
 | 
			
		||||
                        else
 | 
			
		||||
                            SRC="${team}-${SRC}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${team}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${team}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg src_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
 | 
			
		||||
 | 
			
		||||
#                         local ret
 | 
			
		||||
#                         ret=$(vercmp "$src_version" "$dest_version")
 | 
			
		||||
#
 | 
			
		||||
#                         if (( ret > 0 )); then
 | 
			
		||||
                        if ! [[ -f "${SRCINFO}" ]]; then
 | 
			
		||||
                            pkg2yaml -o "${SRCINFO}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                            update_yaml_move "${SRC}" "${DEST}"
 | 
			
		||||
                        upgrade_db
 | 
			
		||||
 | 
			
		||||
                            if [[ -f .SRCINFO ]]; then
 | 
			
		||||
                                rm .SRCINFO
 | 
			
		||||
                        update_yaml_move "${SRC}" "${DEST}"
 | 
			
		||||
 | 
			
		||||
                        team=$(detect_team)
 | 
			
		||||
                        if [[ -z "$team" ]]; then
 | 
			
		||||
                            team=$(team_from_yaml)
 | 
			
		||||
                        fi
 | 
			
		||||
                        update_yaml_team "${team}"
 | 
			
		||||
 | 
			
		||||
                        if [[ -z ${AGENT} ]]; then
 | 
			
		||||
                            AGENT=${AGENT_MAP["${team}"]}
 | 
			
		||||
                        fi
 | 
			
		||||
                        write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                        if [[ -f .SRCINFO ]]; then
 | 
			
		||||
                            rm .SRCINFO
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                        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
 | 
			
		||||
                                if [[ "$f" == "${REPO_CI}" ]]; then
 | 
			
		||||
                                    git add "$f"
 | 
			
		||||
                                fi
 | 
			
		||||
                            done
 | 
			
		||||
                            for f in $(git ls-files --others); do
 | 
			
		||||
                                if [[ "$f" == "${SRCINFO}" ]]; 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
 | 
			
		||||
 | 
			
		||||
                            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
 | 
			
		||||
 | 
			
		||||
                            msg "Querying ${pkgbase} ..."
 | 
			
		||||
                            if ! show_db; then
 | 
			
		||||
                                warning "Could not query ${REPO_DB}"
 | 
			
		||||
                            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
 | 
			
		||||
                        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 "${gitname}" "${ARTIX_DB[5]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[5]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${gitname}" "${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 "${gitname}" "${ARTIX_DB[2]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[2]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${gitname}" "${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
 | 
			
		||||
 | 
			
		||||
                    else
 | 
			
		||||
                        error "${pkgbase}: invalid move: version $src_version!"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,16 @@ 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
 | 
			
		||||
        -a, --agent NAME        Set the CI agent
 | 
			
		||||
                                [default: auto]
 | 
			
		||||
                                possible values: ${AGENTS[@]}
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} world-gremlins libfoo
 | 
			
		||||
        $ ${COMMAND} -p world-gremlins libfoo
 | 
			
		||||
        $ ${COMMAND} ${ARTIX_DB[4]} libfoo
 | 
			
		||||
        $ ${COMMAND} --push ${ARTIX_DB[4]} libfoo
 | 
			
		||||
        $ ${COMMAND} --push ${ARTIX_DB_MAP[2]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +38,9 @@ artixpkg_repo_remove() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
    local DEST=''
 | 
			
		||||
    local AGENT
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
@@ -46,6 +52,11 @@ artixpkg_repo_remove() {
 | 
			
		||||
                PUSH=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                AGENT="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -59,8 +70,12 @@ artixpkg_repo_remove() {
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
        die "${DEST} does not exist!"
 | 
			
		||||
    if in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
        AUTO=1
 | 
			
		||||
    else
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
@@ -73,17 +88,43 @@ artixpkg_repo_remove() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                if ! has_remote_changes; then
 | 
			
		||||
                if no_remote_changes; then
 | 
			
		||||
 | 
			
		||||
                    if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local team
 | 
			
		||||
                    team=$(detect_team)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${team}" ]]; then
 | 
			
		||||
                        team=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${team}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${team}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg
 | 
			
		||||
                    commit_msg=$(get_commit_msg 'remove' "${DEST}")
 | 
			
		||||
 | 
			
		||||
                    if ! [[ -f "${SRCINFO}" ]]; then
 | 
			
		||||
                        pkg2yaml -o "${SRCINFO}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    upgrade_db
 | 
			
		||||
 | 
			
		||||
                    update_yaml_remove "${DEST}"
 | 
			
		||||
 | 
			
		||||
                    if [[ -z ${AGENT} ]]; then
 | 
			
		||||
                        AGENT=${AGENT_MAP["${team}"]}
 | 
			
		||||
                    fi
 | 
			
		||||
                    write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                    if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
 | 
			
		||||
 | 
			
		||||
                        stat_busy 'Staging files'
 | 
			
		||||
@@ -91,6 +132,14 @@ artixpkg_repo_remove() {
 | 
			
		||||
                            if [[ "$f" == "${REPO_DB}" ]]; then
 | 
			
		||||
                                git add "$f"
 | 
			
		||||
                            fi
 | 
			
		||||
                            if [[ "$f" == "${REPO_CI}" ]]; then
 | 
			
		||||
                                git add "$f"
 | 
			
		||||
                            fi
 | 
			
		||||
                        done
 | 
			
		||||
                        for f in $(git ls-files --others); do
 | 
			
		||||
                            if [[ "$f" == "${SRCINFO}" ]]; then
 | 
			
		||||
                                git add "$f"
 | 
			
		||||
                            fi
 | 
			
		||||
                        done
 | 
			
		||||
                        stat_done
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,7 @@ artixpkg_repo_show() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                if ! has_remote_changes; then
 | 
			
		||||
                if no_remote_changes; then
 | 
			
		||||
                    if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
@@ -83,13 +83,17 @@ artixpkg_repo_show() {
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( SRC_BASE )); then
 | 
			
		||||
                        msg "Showing srcinfo base ..."
 | 
			
		||||
                        show_srcinfo_base
 | 
			
		||||
                        if [[ -f "${SRCINFO}" ]]; then
 | 
			
		||||
                            msg "Showing srcinfo pkgbase ..."
 | 
			
		||||
                            yq '.pkgbase' "${SRCINFO}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( SRC_PKGS )); then
 | 
			
		||||
                        msg "Showing srcinfo pkgs ..."
 | 
			
		||||
                        show_srcinfo_pkgs
 | 
			
		||||
                        if [[ -f "${SRCINFO}" ]]; then
 | 
			
		||||
                            msg "Showing srcinfo pkgname ..."
 | 
			
		||||
                            yq '.pkgname' "${SRCINFO}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,37 +0,0 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
#{{{ table
 | 
			
		||||
 | 
			
		||||
msg_table_header(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_yellow(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_green(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_red(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${RED} ${mesg} ${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
@@ -36,10 +36,12 @@ load_pkg_config(){
 | 
			
		||||
 | 
			
		||||
    REPO=${REPO:-'world'}
 | 
			
		||||
 | 
			
		||||
    local git_domain="gitea.artixlinux.org"
 | 
			
		||||
    local -r 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:-''}
 | 
			
		||||
@@ -48,6 +50,8 @@ 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"}
 | 
			
		||||
@@ -56,6 +60,12 @@ load_pkg_config(){
 | 
			
		||||
 | 
			
		||||
    DBEXT=${DBEXT:-'gz'}
 | 
			
		||||
 | 
			
		||||
    PATCH_MAINTAINER=${PATCH_MAINTAINER:-false}
 | 
			
		||||
 | 
			
		||||
    PATCH_URL=${PATCH_URL:-"${GIT_SSH}:artix/artix-patches.git"}
 | 
			
		||||
 | 
			
		||||
    PKGDEST_DBG=${PKGDEST_DBG:-"${WORKSPACE_DIR}/packages-debug"}
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								src/lib/pkg/util/packager.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/lib/pkg/util/packager.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
#!/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
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
#{{{ yaml
 | 
			
		||||
 | 
			
		||||
write_yaml_header(){
 | 
			
		||||
    printf '%s\n' '---'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_empty_line(){
 | 
			
		||||
    printf '\n'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_yaml_map(){
 | 
			
		||||
    local ident="$1" key="$2" val="$3"
 | 
			
		||||
    printf "\n%${ident}s%s: %s\n" '' "$key" "$val"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_yaml_seq(){
 | 
			
		||||
    local ident="$1" val="$2"
 | 
			
		||||
    printf "\n%${ident}s- %s\n" '' "$val"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_yaml_seq_map(){
 | 
			
		||||
    local ident="$1" key="$2" val="$3"
 | 
			
		||||
    printf "\n%${ident}s- %s: %s\n" '' "$key" "$val"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
@@ -20,9 +20,10 @@ usage() {
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        repo      Pacman database modification for packge update, move etc
 | 
			
		||||
        admin     Manage topics, teams and obsolete repos
 | 
			
		||||
        git       Manage Git packaging repositories and their configuration
 | 
			
		||||
        admin     Managegement of topics and obsolete repos
 | 
			
		||||
        repo      Pacman database modification for package updates, moves, etc.
 | 
			
		||||
 | 
			
		||||
        version   Show artixpkg version information
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
@@ -40,8 +41,6 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,8 @@ 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'
 | 
			
		||||
@@ -44,13 +46,14 @@ usage() {
 | 
			
		||||
    exit "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opts='hcCNmnr:d:a:'
 | 
			
		||||
opts='hcCNmnr:d:a:e:'
 | 
			
		||||
 | 
			
		||||
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) ;;
 | 
			
		||||
@@ -90,6 +93,10 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,8 @@ LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/diff.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/diff.sh
 | 
			
		||||
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
# shellcheck source=src/lib/pkg/util/diff.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/util/diff.sh
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
 
 | 
			
		||||
@@ -10,13 +10,45 @@ SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'}
 | 
			
		||||
source "${LIBDIR}"/pkg/util.sh
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/table.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/table.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
 | 
			
		||||
shopt -s extglob
 | 
			
		||||
 | 
			
		||||
#{{{ table
 | 
			
		||||
 | 
			
		||||
msg_table_header(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_yellow(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_green(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
msg_row_red(){
 | 
			
		||||
    local mesg=$1; shift
 | 
			
		||||
    # shellcheck disable=2059
 | 
			
		||||
    printf "${RED} ${mesg} ${ALL_OFF}\n" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 | 
			
		||||
extract_db() {
 | 
			
		||||
    local u="$1" cdir="$2"
 | 
			
		||||
    rm -rf "$cdir"
 | 
			
		||||
 
 | 
			
		||||
@@ -181,7 +181,9 @@ else
 | 
			
		||||
    set_arch="${CARCH}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "$@"
 | 
			
		||||
chroot_args=(/usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/bin)
 | 
			
		||||
 | 
			
		||||
${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "${chroot_args[@]}" "$@"
 | 
			
		||||
 | 
			
		||||
ret=$?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/diff.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/diff.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/util/diff.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/util/diff.sh
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								src/pkg/packagersign.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/pkg/packagersign.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#!/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/util/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/util/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"
 | 
			
		||||
@@ -6,136 +6,198 @@ LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/yaml.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/yaml.sh
 | 
			
		||||
 | 
			
		||||
# shellcheck disable=1091
 | 
			
		||||
source "${MAKEPKG_LIBRARY}"/util/pkgbuild.sh
 | 
			
		||||
# shellcheck disable=1091
 | 
			
		||||
source "${MAKEPKG_LIBRARY}"/util/schema.sh
 | 
			
		||||
 | 
			
		||||
#{{{ functions
 | 
			
		||||
# {{{ functions
 | 
			
		||||
 | 
			
		||||
srcyaml_write_attr(){
 | 
			
		||||
    local ident1="$1" ident2="$2" ident3="$3"
 | 
			
		||||
    local attrname=$4 attrvalues=("${@:5}")
 | 
			
		||||
yaml_array_str() {
 | 
			
		||||
    local array
 | 
			
		||||
 | 
			
		||||
    # normalize whitespace, strip leading and trailing
 | 
			
		||||
    attrvalues=("${attrvalues[@]//+([[:space:]])/ }")
 | 
			
		||||
    attrvalues=("${attrvalues[@]#[[:space:]]}")
 | 
			
		||||
    attrvalues=("${attrvalues[@]%[[:space:]]}")
 | 
			
		||||
 | 
			
		||||
    case $attrname in
 | 
			
		||||
        pkgver|pkgrel|epoch|url|install|changelog)
 | 
			
		||||
            for v in "${attrvalues[@]}"; do
 | 
			
		||||
                Yaml+=$(write_yaml_map "$ident3" "$attrname" "$v")
 | 
			
		||||
            done
 | 
			
		||||
        ;;
 | 
			
		||||
        pkgdesc)
 | 
			
		||||
            Yaml+=$(write_yaml_map "$ident1" "$attrname" "${attrvalues[@]}")
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            Yaml+=$(write_yaml_map "$ident1" "$attrname")
 | 
			
		||||
            for v in "${attrvalues[@]}"; do
 | 
			
		||||
                Yaml+=$(write_yaml_seq "$ident2" "$v")
 | 
			
		||||
            done
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    for entry in "$@"; do
 | 
			
		||||
        array="${array:-}${array:+,} '${entry}'"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${array}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkgbuild_extract_to_yaml() {
 | 
			
		||||
    local pkgname=$1 attrname=$2 isarray=$3 outvalue=
 | 
			
		||||
pkgbuild_extract_to_srcyaml() {
 | 
			
		||||
    # $1: pkgname
 | 
			
		||||
    # $2: index
 | 
			
		||||
    # $3: attr name
 | 
			
		||||
    # $4: multivalued
 | 
			
		||||
 | 
			
		||||
    local pkgname="$1" i="$2" attrname="$3" isarray="$4"  outvalue=
 | 
			
		||||
 | 
			
		||||
    if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
 | 
			
		||||
        [[ -z $pkgname ]] && srcyaml_write_attr 2 4 2 "$attrname" "${outvalue[@]}"
 | 
			
		||||
        [[ -n $pkgname ]] && srcyaml_write_attr 4 6 2 "$attrname" "${outvalue[@]}"
 | 
			
		||||
        local ov an
 | 
			
		||||
 | 
			
		||||
        if [[ -n $pkgname ]]; then
 | 
			
		||||
            an=".pkgname[$i].$attrname"
 | 
			
		||||
        else
 | 
			
		||||
            an=".pkgbase.$attrname"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        if (( isarray )); then
 | 
			
		||||
            ov=$(yaml_array_str "${outvalue[@]}")
 | 
			
		||||
        else
 | 
			
		||||
            ov="${outvalue[*]}"
 | 
			
		||||
            if [[ -z "$ov" ]]; then
 | 
			
		||||
                ov="null"
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        an="$an" ov="$ov" \
 | 
			
		||||
        yq -P 'eval(strenv(an)) = env(ov)' -i "${YAML}"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
srcyaml_write_section_details() {
 | 
			
		||||
srcyaml_write_node_details() {
 | 
			
		||||
    local attr package_arch a
 | 
			
		||||
    local multivalued_arch_attrs=(source provides conflicts depends replaces
 | 
			
		||||
                                  optdepends makedepends checkdepends
 | 
			
		||||
                                  "${known_hash_algos[@]/%/sums}")
 | 
			
		||||
    local multivalued_arch_attrs=(
 | 
			
		||||
        source
 | 
			
		||||
        provides
 | 
			
		||||
        conflicts
 | 
			
		||||
        depends
 | 
			
		||||
        replaces
 | 
			
		||||
        optdepends
 | 
			
		||||
        makedepends
 | 
			
		||||
        checkdepends
 | 
			
		||||
        "${known_hash_algos[@]/%/sums}"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    for attr in "${singlevalued[@]}"; do
 | 
			
		||||
        pkgbuild_extract_to_yaml "$1" "$attr" 0
 | 
			
		||||
        pkgbuild_extract_to_srcyaml "$1" "$2" "$attr" 0
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for attr in "${multivalued[@]}"; do
 | 
			
		||||
        pkgbuild_extract_to_yaml "$1" "$attr" 1
 | 
			
		||||
        pkgbuild_extract_to_srcyaml "$1" "$2" "$attr" 1
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    get_pkgbuild_attribute "$1" 'arch' 1 'package_arch'
 | 
			
		||||
    get_pkgbuild_attribute "$pn" 'arch' 1 'package_arch'
 | 
			
		||||
    for a in "${package_arch[@]}"; do
 | 
			
		||||
        # 'any' is special. there's no support for, e.g. depends_any.
 | 
			
		||||
        [[ $a = any ]] && continue
 | 
			
		||||
 | 
			
		||||
        for attr in "${multivalued_arch_attrs[@]}"; do
 | 
			
		||||
            pkgbuild_extract_to_yaml "$1" "${attr}_$a" 1
 | 
			
		||||
            pkgbuild_extract_to_srcyaml "$1" "$2" "${attr}_$a" 1
 | 
			
		||||
        done
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
yaml_write_global() {
 | 
			
		||||
    local singlevalued=(pkgdesc pkgver pkgrel epoch url install changelog)
 | 
			
		||||
    local multivalued=(arch groups license checkdepends makedepends
 | 
			
		||||
                        depends optdepends provides conflicts replaces
 | 
			
		||||
                        noextract options backup
 | 
			
		||||
                        source validpgpkeys "${known_hash_algos[@]/%/sums}")
 | 
			
		||||
srcyaml_write_global() {
 | 
			
		||||
    local singlevalued=(
 | 
			
		||||
        pkgdesc
 | 
			
		||||
        pkgver
 | 
			
		||||
        pkgrel
 | 
			
		||||
        epoch
 | 
			
		||||
        url
 | 
			
		||||
        install
 | 
			
		||||
        changelog
 | 
			
		||||
    )
 | 
			
		||||
    local multivalued=(
 | 
			
		||||
        arch
 | 
			
		||||
        groups
 | 
			
		||||
        license
 | 
			
		||||
        checkdepends
 | 
			
		||||
        makedepends
 | 
			
		||||
        depends
 | 
			
		||||
        optdepends
 | 
			
		||||
        provides
 | 
			
		||||
        conflicts
 | 
			
		||||
        replaces
 | 
			
		||||
        noextract
 | 
			
		||||
        options
 | 
			
		||||
        backup
 | 
			
		||||
        source
 | 
			
		||||
        validpgpkeys
 | 
			
		||||
        "${known_hash_algos[@]/%/sums}"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    Yaml+=$(write_yaml_map 0 "pkgbase")
 | 
			
		||||
    Yaml+=$(write_yaml_map 2 "name" "${pkgbase:-${pkgname}}")
 | 
			
		||||
 | 
			
		||||
    srcyaml_write_section_details ""
 | 
			
		||||
    srcyaml_write_node_details '' ''
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
yaml_write_package() {
 | 
			
		||||
    local singlevalued=(pkgdesc url install changelog)
 | 
			
		||||
    local multivalued=(arch groups license checkdepends depends optdepends
 | 
			
		||||
                       provides conflicts replaces options backup)
 | 
			
		||||
srcyaml_write_package() {
 | 
			
		||||
    local singlevalued=(
 | 
			
		||||
        pkgdesc
 | 
			
		||||
        url
 | 
			
		||||
        install
 | 
			
		||||
        changelog
 | 
			
		||||
    )
 | 
			
		||||
    local multivalued=(
 | 
			
		||||
        arch
 | 
			
		||||
        groups
 | 
			
		||||
        license
 | 
			
		||||
        checkdepends
 | 
			
		||||
        depends
 | 
			
		||||
        optdepends
 | 
			
		||||
        provides
 | 
			
		||||
        conflicts
 | 
			
		||||
        replaces
 | 
			
		||||
        options
 | 
			
		||||
        backup
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    Yaml+=$(write_yaml_map 0 "pkgnames")
 | 
			
		||||
    for pkg in "${pkgname[@]}"; do
 | 
			
		||||
        Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg")
 | 
			
		||||
        srcyaml_write_section_details "$pkg"
 | 
			
		||||
    done
 | 
			
		||||
    srcyaml_write_node_details "$1" "$2"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_srcyaml() {
 | 
			
		||||
    Yaml=$(write_yaml_header)
 | 
			
		||||
    yaml_write_global
 | 
			
		||||
    yaml_write_package
 | 
			
		||||
    yq -n '"---"' > "${YAML}"
 | 
			
		||||
 | 
			
		||||
#     local version
 | 
			
		||||
#     version=$(get_full_version)
 | 
			
		||||
#     Yaml+=$(write_yaml_map 2 "version" "${version}")
 | 
			
		||||
    local ver
 | 
			
		||||
    ver=$(get_full_version) \
 | 
			
		||||
    yq -P '.version = env(ver)' -i "${YAML}"
 | 
			
		||||
 | 
			
		||||
    printf '%s\n' "${Yaml}"
 | 
			
		||||
    # https://github.com/mikefarah/yq/issues/1836
 | 
			
		||||
    # yq '. head_comment="generated with artixpkg @buildtoolver@"' -i "${YAML}"
 | 
			
		||||
 | 
			
		||||
    local name=${pkgbase:-$pkgname}
 | 
			
		||||
    name="$name" \
 | 
			
		||||
    yq -P '.pkgbase.name = env(name)' -i "${YAML}"
 | 
			
		||||
    srcyaml_write_global
 | 
			
		||||
 | 
			
		||||
    local pn
 | 
			
		||||
    local key
 | 
			
		||||
    for ((i = 0 ; i < "${#pkgname[@]}" ; i++)); do
 | 
			
		||||
        pn="${pkgname[$i]}" key=".pkgname[$i]" \
 | 
			
		||||
        yq -P 'eval(strenv(key)).name = env(pn)' -i "${YAML}"
 | 
			
		||||
        srcyaml_write_package "${pkgname[$i]}" "$i"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    yq '. foot_comment="generated with artixpkg @buildtoolver@"' -i "${YAML}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    printf 'Usage: %s [options]\n' "${0##*/}"
 | 
			
		||||
    printf "    -o <out>      Out file (default: ${YAML})\n"
 | 
			
		||||
    printf '    -h            This help\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    exit "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
YAML=/tmp/srcinfo.yaml
 | 
			
		||||
 | 
			
		||||
# shellcheck source=config/makepkg/x86_64.conf
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
 | 
			
		||||
opts='h'
 | 
			
		||||
opts='o:h'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        o) YAML="$OPTARG" ;;
 | 
			
		||||
        h|?) usage 0 ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
shift $(( OPTIND - 1 ))
 | 
			
		||||
srcpath=$(readlink -f "$1")
 | 
			
		||||
 | 
			
		||||
# srcpath=$(readlink -f "$1")
 | 
			
		||||
 | 
			
		||||
[[ -z "$srcpath" ]] && srcpath="."
 | 
			
		||||
 | 
			
		||||
[[ -f "$srcpath"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$srcpath"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,8 +10,8 @@ SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'}
 | 
			
		||||
source "${LIBDIR}"/pkg/util.sh
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/deploy.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/util/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/util/deploy.sh
 | 
			
		||||
 | 
			
		||||
#{{{ deploy
 | 
			
		||||
 | 
			
		||||
@@ -20,6 +20,7 @@ add() {
 | 
			
		||||
        msg "Found: %s" "${pkgfile}"
 | 
			
		||||
        packages+=("${pkgname}")
 | 
			
		||||
        action='add'
 | 
			
		||||
        action_args+=(--include-sigs)
 | 
			
		||||
        ln -sfv "${pkgfile}"{,.sig} "${repo_path}"/
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
@@ -30,6 +31,18 @@ remove(){
 | 
			
		||||
    # pkg removal will be done by a patched repo-remove honoring -R
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_dbg() {
 | 
			
		||||
    local rmp
 | 
			
		||||
    rmp=${pkgname%"${PKGEXT}"}
 | 
			
		||||
    rmp=${rmp%-*}
 | 
			
		||||
    rmp=${rmp%-*}
 | 
			
		||||
    rm -fv "${PKGDEST_DBG}/${rmp}"*
 | 
			
		||||
    if pkgfile=$(find_cached_pkgfile "${pkgname}"); then
 | 
			
		||||
        msg "Found: %s" "${pkgfile}"
 | 
			
		||||
        ln -sfv "${pkgfile}" "${PKGDEST_DBG}"/
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
repo_action() {
 | 
			
		||||
    local repo_path
 | 
			
		||||
    # shellcheck disable=SC2153
 | 
			
		||||
@@ -39,11 +52,13 @@ repo_action() {
 | 
			
		||||
    for pkgname in "${passfiles[@]}"; do
 | 
			
		||||
        "$func"
 | 
			
		||||
    done
 | 
			
		||||
    ( cd "${repo_path}" || return
 | 
			
		||||
        if [[ -n "${action}" ]]; then
 | 
			
		||||
            repo-"${action}" -R "${dest_repo}.${db_ext}" "${packages[@]}"
 | 
			
		||||
        fi
 | 
			
		||||
    )
 | 
			
		||||
    if ! "${dbg_pkg}"; then
 | 
			
		||||
        ( cd "${repo_path}" || return
 | 
			
		||||
            if [[ -n "${action}" ]]; then
 | 
			
		||||
                repo-"${action}" "${action_args[@]}" "${dest_repo}.${db_ext}" "${packages[@]}"
 | 
			
		||||
            fi
 | 
			
		||||
        )
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
@@ -54,28 +69,32 @@ db_ext="db.tar.${DBEXT}"
 | 
			
		||||
 | 
			
		||||
add_pkg=false
 | 
			
		||||
rm_pkg=false
 | 
			
		||||
dbg_pkg=false
 | 
			
		||||
 | 
			
		||||
cmd=${0##*/}
 | 
			
		||||
dest_repo=${cmd#*-}
 | 
			
		||||
dest_repo=world #${cmd#*-}
 | 
			
		||||
action_args=(-R)
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    printf "Usage: %s [options]\n" "${cmd}"
 | 
			
		||||
    printf '    -d <dest>          Destination repository\n'
 | 
			
		||||
    printf '    -a                 Add package(s) to repository\n'
 | 
			
		||||
    printf '    -r                 Remove package(s) from repository\n'
 | 
			
		||||
    printf '    -u                 Update debug repository\n'
 | 
			
		||||
    printf '    -h                 This help\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    exit "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opts='arLRhd:'
 | 
			
		||||
opts='uarhd:'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        d) dest_repo="$OPTARG" ;;
 | 
			
		||||
        a) add_pkg=true; rm_pkg=false ;;
 | 
			
		||||
        r) rm_pkg=true; add_pkg=false ;;
 | 
			
		||||
        u) dbg_pkg=true ;;
 | 
			
		||||
        h|?) usage 0 ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
@@ -85,10 +104,14 @@ shift $(( OPTIND - 1 ))
 | 
			
		||||
passfiles=("$@")
 | 
			
		||||
 | 
			
		||||
if [[ -n "${passfiles[*]}" ]]; then
 | 
			
		||||
    if ${add_pkg}; then
 | 
			
		||||
        repo_action add
 | 
			
		||||
    fi
 | 
			
		||||
    if ${rm_pkg}; then
 | 
			
		||||
        repo_action remove
 | 
			
		||||
    if ! "${dbg_pkg}"; then
 | 
			
		||||
        if ${add_pkg}; then
 | 
			
		||||
            repo_action add
 | 
			
		||||
        fi
 | 
			
		||||
        if ${rm_pkg}; then
 | 
			
		||||
            repo_action remove
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        repo_action update_dbg
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/deploy.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/util/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/util/deploy.sh
 | 
			
		||||
 | 
			
		||||
# shellcheck source=config/makepkg/x86_64.conf
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user