Compare commits
	
		
			28 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f7a61731ba | |||
| e959ce10c3 | |||
| d2bbf9d8c4 | |||
| 
						
						
							
						
						1dafa0fb38
	
				 | 
					
					
						|||
| 
						
						
							
						
						982a9ed678
	
				 | 
					
					
						|||
| 19a6ff09f1 | |||
| fac634cf14 | |||
| 71ed464c33 | |||
| f7286a0661 | |||
| aee7c07a04 | |||
| fbcfa79426 | |||
| 87bd203d3e | |||
| ac0472d9ff | |||
| 
						
						
							
						
						e80c07d2fc
	
				 | 
					
					
						|||
| 7584684bea | |||
| e415aa67b9 | |||
| b2512ffe68 | |||
| 1d8b7e83dc | |||
| 
						
						
							
						
						e237afd788
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d7f006ad9
	
				 | 
					
					
						|||
| 
						
						
							
						
						72104728ac
	
				 | 
					
					
						|||
| 
						
						
							
						
						423896750a
	
				 | 
					
					
						|||
| 
						
						
							
						
						ad09046044
	
				 | 
					
					
						|||
| 
						
						
							
						
						c335cab68c
	
				 | 
					
					
						|||
| e744e80c57 | |||
| 06bcd79858 | |||
| 
						
						
							
						
						dbb63dcd5e
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e510b2f1e
	
				 | 
					
					
						
							
								
								
									
										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'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
SHELL=/bin/bash
 | 
			
		||||
 | 
			
		||||
V=0.32
 | 
			
		||||
V=0.33
 | 
			
		||||
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,6 +72,8 @@ $(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
 | 
			
		||||
@@ -110,6 +115,8 @@ install_pkg: binprogs_pkg
 | 
			
		||||
	for a in $(SETARCH_ALIASES); do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done
 | 
			
		||||
	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
 | 
			
		||||
 | 
			
		||||
	install -Dm0644 $(BUILDDIR)/contrib/completion/bash/artixpkg $(DESTDIR)$(PREFIX)/share/bash-completion/completions/artixpkg
 | 
			
		||||
 | 
			
		||||
install_iso: binprogs_iso
 | 
			
		||||
	install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
 | 
			
		||||
	install -dm0755 $(DESTDIR)$(PREFIX)/bin
 | 
			
		||||
@@ -144,5 +151,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:
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,9 @@
 | 
			
		||||
# default arch to build
 | 
			
		||||
# ARCH=$(uname -m)
 | 
			
		||||
 | 
			
		||||
# default pacman.conf repos to include
 | 
			
		||||
# possible values: {world,galaxy}{-gremlins,-goblins}
 | 
			
		||||
# REPO="world"
 | 
			
		||||
# default pacman.conf to include
 | 
			
		||||
# possible values: {stable,gremlins,goblins}
 | 
			
		||||
# STABILITY="stable"
 | 
			
		||||
 | 
			
		||||
# default iso storage directory
 | 
			
		||||
# ISO_POOL="${WORKSPACE_DIR}/iso"
 | 
			
		||||
 
 | 
			
		||||
@@ -32,3 +32,9 @@
 | 
			
		||||
 | 
			
		||||
# default packaging org
 | 
			
		||||
# GIT_ORG='packages'
 | 
			
		||||
 | 
			
		||||
# default archiving org
 | 
			
		||||
# GIT_ORG_ARCHIVE='landfill'
 | 
			
		||||
 | 
			
		||||
# default jenkins agents
 | 
			
		||||
# AGENTS=(orion taurus)
 | 
			
		||||
 
 | 
			
		||||
@@ -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,7 +41,7 @@ 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"
 | 
			
		||||
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
 | 
			
		||||
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										115
									
								
								config/pacman/iso-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								config/pacman/iso-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
#
 | 
			
		||||
# /etc/pacman.conf
 | 
			
		||||
#
 | 
			
		||||
# See the pacman.conf(5) manpage for option and repository directives
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GENERAL OPTIONS
 | 
			
		||||
#
 | 
			
		||||
[options]
 | 
			
		||||
# The following paths are commented out with their default values listed.
 | 
			
		||||
# If you wish to use different paths, uncomment and update the paths.
 | 
			
		||||
#RootDir     = /
 | 
			
		||||
#DBPath      = /var/lib/pacman/
 | 
			
		||||
#CacheDir    = /var/cache/pacman/pkg/
 | 
			
		||||
#LogFile     = /var/log/pacman.log
 | 
			
		||||
#GPGDir      = /etc/pacman.d/gnupg/
 | 
			
		||||
#HookDir     = /etc/pacman.d/hooks/
 | 
			
		||||
HoldPkg     = pacman glibc
 | 
			
		||||
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
 | 
			
		||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
 | 
			
		||||
#CleanMethod = KeepInstalled
 | 
			
		||||
Architecture = auto
 | 
			
		||||
 | 
			
		||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
 | 
			
		||||
#IgnorePkg   =
 | 
			
		||||
#IgnoreGroup =
 | 
			
		||||
 | 
			
		||||
#NoUpgrade   =
 | 
			
		||||
#NoExtract   =
 | 
			
		||||
 | 
			
		||||
# Misc options
 | 
			
		||||
#UseSyslog
 | 
			
		||||
Color
 | 
			
		||||
#NoProgressBar
 | 
			
		||||
CheckSpace
 | 
			
		||||
VerbosePkgLists
 | 
			
		||||
ParallelDownloads = 10
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
SigLevel    = Required DatabaseOptional
 | 
			
		||||
LocalFileSigLevel = Optional
 | 
			
		||||
#RemoteFileSigLevel = Required
 | 
			
		||||
 | 
			
		||||
# NOTE: You must run `pacman-key --init` before first using pacman; the local
 | 
			
		||||
# keyring can then be populated with the keys of all official Artix Linux
 | 
			
		||||
# packagers with `pacman-key --populate artix`.
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# REPOSITORIES
 | 
			
		||||
#   - can be defined here or included from another file
 | 
			
		||||
#   - pacman will search repositories in the order defined here
 | 
			
		||||
#   - local/custom mirrors can be added here or in separate files
 | 
			
		||||
#   - repositories listed first will take precedence when packages
 | 
			
		||||
#     have identical names, regardless of version number
 | 
			
		||||
#   - URLs will have $repo replaced by the name of the current repo
 | 
			
		||||
#   - URLs will have $arch replaced by the name of the architecture
 | 
			
		||||
#
 | 
			
		||||
# Repository entries are of the format:
 | 
			
		||||
#       [repo-name]
 | 
			
		||||
#       Server = ServerName
 | 
			
		||||
#       Include = IncludePath
 | 
			
		||||
#
 | 
			
		||||
# The header [repo-name] is crucial - it must be present and
 | 
			
		||||
# uncommented to enable the repo.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# The gremlins repositories are disabled by default. To enable, uncomment the
 | 
			
		||||
# repo name header and Include lines. You can add preferred servers immediately
 | 
			
		||||
# after the header, and they will be used before the default mirrors.
 | 
			
		||||
 | 
			
		||||
[system-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[system-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[system]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
# [lib32-goblins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
#
 | 
			
		||||
# [lib32-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
#
 | 
			
		||||
# [lib32]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# An example of a custom package repository.  See the pacman manpage for
 | 
			
		||||
# tips on creating your own repositories.
 | 
			
		||||
#[custom]
 | 
			
		||||
#SigLevel = Optional TrustAll
 | 
			
		||||
#Server = file:///home/custompkgs
 | 
			
		||||
							
								
								
									
										103
									
								
								config/pacman/iso-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								config/pacman/iso-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
#
 | 
			
		||||
# /etc/pacman.conf
 | 
			
		||||
#
 | 
			
		||||
# See the pacman.conf(5) manpage for option and repository directives
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GENERAL OPTIONS
 | 
			
		||||
#
 | 
			
		||||
[options]
 | 
			
		||||
# The following paths are commented out with their default values listed.
 | 
			
		||||
# If you wish to use different paths, uncomment and update the paths.
 | 
			
		||||
#RootDir     = /
 | 
			
		||||
#DBPath      = /var/lib/pacman/
 | 
			
		||||
#CacheDir    = /var/cache/pacman/pkg/
 | 
			
		||||
#LogFile     = /var/log/pacman.log
 | 
			
		||||
#GPGDir      = /etc/pacman.d/gnupg/
 | 
			
		||||
#HookDir     = /etc/pacman.d/hooks/
 | 
			
		||||
HoldPkg     = pacman glibc
 | 
			
		||||
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
 | 
			
		||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
 | 
			
		||||
#CleanMethod = KeepInstalled
 | 
			
		||||
Architecture = auto
 | 
			
		||||
 | 
			
		||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
 | 
			
		||||
#IgnorePkg   =
 | 
			
		||||
#IgnoreGroup =
 | 
			
		||||
 | 
			
		||||
#NoUpgrade   =
 | 
			
		||||
#NoExtract   =
 | 
			
		||||
 | 
			
		||||
# Misc options
 | 
			
		||||
#UseSyslog
 | 
			
		||||
Color
 | 
			
		||||
#NoProgressBar
 | 
			
		||||
CheckSpace
 | 
			
		||||
VerbosePkgLists
 | 
			
		||||
ParallelDownloads = 10
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
SigLevel    = Required DatabaseOptional
 | 
			
		||||
LocalFileSigLevel = Optional
 | 
			
		||||
#RemoteFileSigLevel = Required
 | 
			
		||||
 | 
			
		||||
# NOTE: You must run `pacman-key --init` before first using pacman; the local
 | 
			
		||||
# keyring can then be populated with the keys of all official Artix Linux
 | 
			
		||||
# packagers with `pacman-key --populate artix`.
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# REPOSITORIES
 | 
			
		||||
#   - can be defined here or included from another file
 | 
			
		||||
#   - pacman will search repositories in the order defined here
 | 
			
		||||
#   - local/custom mirrors can be added here or in separate files
 | 
			
		||||
#   - repositories listed first will take precedence when packages
 | 
			
		||||
#     have identical names, regardless of version number
 | 
			
		||||
#   - URLs will have $repo replaced by the name of the current repo
 | 
			
		||||
#   - URLs will have $arch replaced by the name of the architecture
 | 
			
		||||
#
 | 
			
		||||
# Repository entries are of the format:
 | 
			
		||||
#       [repo-name]
 | 
			
		||||
#       Server = ServerName
 | 
			
		||||
#       Include = IncludePath
 | 
			
		||||
#
 | 
			
		||||
# The header [repo-name] is crucial - it must be present and
 | 
			
		||||
# uncommented to enable the repo.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# The gremlins repositories are disabled by default. To enable, uncomment the
 | 
			
		||||
# repo name header and Include lines. You can add preferred servers immediately
 | 
			
		||||
# after the header, and they will be used before the default mirrors.
 | 
			
		||||
 | 
			
		||||
[system-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[system]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
# [lib32-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
#
 | 
			
		||||
# [lib32]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# An example of a custom package repository.  See the pacman manpage for
 | 
			
		||||
# tips on creating your own repositories.
 | 
			
		||||
#[custom]
 | 
			
		||||
#SigLevel = Optional TrustAll
 | 
			
		||||
#Server = file:///home/custompkgs
 | 
			
		||||
							
								
								
									
										103
									
								
								config/pacman/iso-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								config/pacman/iso-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
#
 | 
			
		||||
# /etc/pacman.conf
 | 
			
		||||
#
 | 
			
		||||
# See the pacman.conf(5) manpage for option and repository directives
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GENERAL OPTIONS
 | 
			
		||||
#
 | 
			
		||||
[options]
 | 
			
		||||
# The following paths are commented out with their default values listed.
 | 
			
		||||
# If you wish to use different paths, uncomment and update the paths.
 | 
			
		||||
#RootDir     = /
 | 
			
		||||
#DBPath      = /var/lib/pacman/
 | 
			
		||||
#CacheDir    = /var/cache/pacman/pkg/
 | 
			
		||||
#LogFile     = /var/log/pacman.log
 | 
			
		||||
#GPGDir      = /etc/pacman.d/gnupg/
 | 
			
		||||
#HookDir     = /etc/pacman.d/hooks/
 | 
			
		||||
HoldPkg     = pacman glibc
 | 
			
		||||
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
 | 
			
		||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
 | 
			
		||||
#CleanMethod = KeepInstalled
 | 
			
		||||
Architecture = auto
 | 
			
		||||
 | 
			
		||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
 | 
			
		||||
#IgnorePkg   =
 | 
			
		||||
#IgnoreGroup =
 | 
			
		||||
 | 
			
		||||
#NoUpgrade   =
 | 
			
		||||
#NoExtract   =
 | 
			
		||||
 | 
			
		||||
# Misc options
 | 
			
		||||
#UseSyslog
 | 
			
		||||
Color
 | 
			
		||||
#NoProgressBar
 | 
			
		||||
CheckSpace
 | 
			
		||||
VerbosePkgLists
 | 
			
		||||
ParallelDownloads = 10
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
SigLevel    = Required DatabaseOptional
 | 
			
		||||
LocalFileSigLevel = Optional
 | 
			
		||||
#RemoteFileSigLevel = Required
 | 
			
		||||
 | 
			
		||||
# NOTE: You must run `pacman-key --init` before first using pacman; the local
 | 
			
		||||
# keyring can then be populated with the keys of all official Artix Linux
 | 
			
		||||
# packagers with `pacman-key --populate artix`.
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# REPOSITORIES
 | 
			
		||||
#   - can be defined here or included from another file
 | 
			
		||||
#   - pacman will search repositories in the order defined here
 | 
			
		||||
#   - local/custom mirrors can be added here or in separate files
 | 
			
		||||
#   - repositories listed first will take precedence when packages
 | 
			
		||||
#     have identical names, regardless of version number
 | 
			
		||||
#   - URLs will have $repo replaced by the name of the current repo
 | 
			
		||||
#   - URLs will have $arch replaced by the name of the architecture
 | 
			
		||||
#
 | 
			
		||||
# Repository entries are of the format:
 | 
			
		||||
#       [repo-name]
 | 
			
		||||
#       Server = ServerName
 | 
			
		||||
#       Include = IncludePath
 | 
			
		||||
#
 | 
			
		||||
# The header [repo-name] is crucial - it must be present and
 | 
			
		||||
# uncommented to enable the repo.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# The gremlins repositories are disabled by default. To enable, uncomment the
 | 
			
		||||
# repo name header and Include lines. You can add preferred servers immediately
 | 
			
		||||
# after the header, and they will be used before the default mirrors.
 | 
			
		||||
 | 
			
		||||
# [system-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[system]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# [world-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[world]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# [galaxy-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
# [lib32-gremlins]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
#
 | 
			
		||||
# [lib32]
 | 
			
		||||
# Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# An example of a custom package repository.  See the pacman manpage for
 | 
			
		||||
# tips on creating your own repositories.
 | 
			
		||||
#[custom]
 | 
			
		||||
#SigLevel = Optional TrustAll
 | 
			
		||||
#Server = file:///home/custompkgs
 | 
			
		||||
							
								
								
									
										282
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,282 @@
 | 
			
		||||
#/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
_artixpkg_pkgbase() {
 | 
			
		||||
    source "${LIBDIR}"/pkg/git/config.sh
 | 
			
		||||
    source "${LIBDIR}"/pkg/util.sh
 | 
			
		||||
    ls -1 "${TREE_DIR_ARTIX}" | tr '\n' ' '
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_artixpkg_completion() {
 | 
			
		||||
    local cur prev comps comps_all repos autorepos teams agents cwords comp_cword_exflag
 | 
			
		||||
    source "${LIBDIR}"/pkg/db/db.sh 2>/dev/null
 | 
			
		||||
 | 
			
		||||
    cur="${COMP_WORDS[COMP_CWORD]}"
 | 
			
		||||
    prev="${COMP_WORDS[COMP_CWORD-1]}"
 | 
			
		||||
 | 
			
		||||
    for ((i = COMP_CWORD - 1; i >= 0; i--)); do
 | 
			
		||||
        if [[ ${COMP_WORDS[i]} != -* ]]; then
 | 
			
		||||
            last_non_flag_word="${COMP_WORDS[i]}"
 | 
			
		||||
            break
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    comps=""
 | 
			
		||||
    comps_all=""
 | 
			
		||||
    comp_cword_exflag=0
 | 
			
		||||
    comp_cword_all=0
 | 
			
		||||
    for ((i = 0; i < ${#COMP_WORDS[@]} - 1; i++)); do
 | 
			
		||||
        word="${COMP_WORDS[i]}"
 | 
			
		||||
        comps_all+=" $word"
 | 
			
		||||
        ((comp_cword_all++))
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            comps+=" $word"
 | 
			
		||||
            ((comp_cword_exflag++))
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    comps="${comps:1}"
 | 
			
		||||
    comps_all="${comps_all:1}"
 | 
			
		||||
 | 
			
		||||
    repos=""
 | 
			
		||||
    for word in "${ARTIX_DB[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            repos+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    repos="${repos:1}"
 | 
			
		||||
    autorepos=""
 | 
			
		||||
    for word in "${ARTIX_DB_MAP[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            autorepos+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    autorepos="${autorepos:1}"
 | 
			
		||||
    teams=""
 | 
			
		||||
    for word in "${ARTIX_TEAMS[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            teams+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    teams="${teams:1}"
 | 
			
		||||
    agents=""
 | 
			
		||||
    for word in "${AGENTS[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            agents+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    agents="${agents:1}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    case "${comp_cword_exflag}" in
 | 
			
		||||
        1)
 | 
			
		||||
            COMPREPLY=($(compgen -W "admin ci git repo version -h --help" -- "${cur}"))
 | 
			
		||||
            return 0
 | 
			
		||||
            ;;
 | 
			
		||||
        2)
 | 
			
		||||
            case ${prev} in
 | 
			
		||||
                admin)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "maintainer query team topic transfer -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                ci)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "config -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 add"*)
 | 
			
		||||
                    local repoAddCommon="-p --push -r --rebuild -n --nocheck -h --help"
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$repoAddCommon $autorepos $repos" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$repoAddCommon $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo remove"*)
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo move"*)
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3|4)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo import"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "--tag")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "--del -h --help --tag $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo show")
 | 
			
		||||
                    COMPREPLY=($(compgen -W "-b --base -p --pkgs -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git clone"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "--protocol")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "https" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-t"|"--team")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-m"|"--maintainer"|"-s"|"--search"|"-t"|"--team"|"-j"|"--jobs")
 | 
			
		||||
                            # these flags expect a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer --protocol -s --search -t --team -a --agent -j --jobs --all -h --help" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git config"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "--protocol")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "https" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-j"|"--jobs")
 | 
			
		||||
                            # these flags expect a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "--protocol -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git create"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-t"|"--team")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-c --clone -a --agent -t --team -h --help" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git pull"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-t"|"--topic"|"-m"|"--maintainer"|"-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"|"-t"|"--topic"|"-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg ci config"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --agent -s --switch -j --jobs -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"|"-t"|"--topic")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer -t --topic -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin team"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--add"|"-r"|"--remove")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --add -c --check -l --list -r --remove -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin topic"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--add"|"-r"|"--remove"|"-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --add -r --remove -d --del -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin transfer"*)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "-h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
            esac
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
complete -F _artixpkg_completion artixpkg
 | 
			
		||||
@@ -92,7 +92,11 @@ make_rootfs() {
 | 
			
		||||
 | 
			
		||||
        prepare_dir "${rootfs}"
 | 
			
		||||
 | 
			
		||||
        basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
 | 
			
		||||
        local args=()
 | 
			
		||||
        if "${copy_pacconf}"; then
 | 
			
		||||
            args+=(-P)
 | 
			
		||||
        fi
 | 
			
		||||
        basestrap "${basestrap_args[@]}" "${args[@]}" "${rootfs}" "${packages[@]}"
 | 
			
		||||
 | 
			
		||||
        copy_overlay "${root_overlay}" "${rootfs}"
 | 
			
		||||
 | 
			
		||||
@@ -186,8 +190,8 @@ gen_iso_fn(){
 | 
			
		||||
    local vars=("artix") name
 | 
			
		||||
    vars+=("${profile}")
 | 
			
		||||
    vars+=("${INITSYS}")
 | 
			
		||||
    case "${repo}" in
 | 
			
		||||
        *-gremlins|*-goblins) vars+=("${repo#*-}") ;;
 | 
			
		||||
    case "${STABILITY}" in
 | 
			
		||||
        gremlins|goblins) vars+=("${STABILITY}") ;;
 | 
			
		||||
    esac
 | 
			
		||||
    vars+=("${ISO_VERSION}")
 | 
			
		||||
    vars+=("${arch}")
 | 
			
		||||
@@ -197,12 +201,22 @@ gen_iso_fn(){
 | 
			
		||||
    printf "%s\n" "$name"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export_gpg_publickey() {
 | 
			
		||||
    key_export="${WORKSPACE_DIR}"/pubkey.gpg
 | 
			
		||||
    gpg --batch  --no-armor --output "${key_export}" --export "${GPG_KEY}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
prepare_build(){
 | 
			
		||||
    load_profile
 | 
			
		||||
    local pac_conf
 | 
			
		||||
 | 
			
		||||
    pacman_conf="${DATADIR}/pacman.conf.d/${repo}-${arch}.conf"
 | 
			
		||||
    if [[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf" ]]; then
 | 
			
		||||
        pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf"
 | 
			
		||||
    pac_conf=iso-${arch}.conf
 | 
			
		||||
    if [[ "${STABILITY}" != 'stable' ]]; then
 | 
			
		||||
        pac_conf=iso-${STABILITY}-${arch}.conf
 | 
			
		||||
    fi
 | 
			
		||||
    pacman_conf="${DATADIR}/pacman.conf.d/${pac_conf}"
 | 
			
		||||
    if [[ -f "${USER_CONF_DIR}/pacman.conf.d/${pac_conf}" ]]; then
 | 
			
		||||
        pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${pac_conf}"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    iso_file=$(gen_iso_fn).iso
 | 
			
		||||
@@ -323,11 +337,11 @@ persist=false
 | 
			
		||||
use_dracut=false
 | 
			
		||||
squash_only=false
 | 
			
		||||
boot_only=false
 | 
			
		||||
copy_pacconf=false
 | 
			
		||||
 | 
			
		||||
basestrap_args=(-GMc)
 | 
			
		||||
cmd=${0##*/}
 | 
			
		||||
 | 
			
		||||
repo=${REPO}
 | 
			
		||||
owner=${SUDO_USER:-$USER}
 | 
			
		||||
profile='base'
 | 
			
		||||
chroots_iso="${CHROOTS_DIR}/buildiso"
 | 
			
		||||
@@ -338,8 +352,8 @@ usage() {
 | 
			
		||||
    printf '    -p <profile>       Profile [default: %s]\n' "${profile}"
 | 
			
		||||
    printf '    -r <dir>           Chroots directory\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${chroots_iso}"
 | 
			
		||||
    printf '    -R <repo>          Build repo\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${repo}"
 | 
			
		||||
    printf '    -R <stability>     Build stability\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${STABILITY}"
 | 
			
		||||
    printf '    -a <arch>          Build arch\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${arch}"
 | 
			
		||||
    printf '    -t <dir>           Target directory\n'
 | 
			
		||||
@@ -356,6 +370,7 @@ usage() {
 | 
			
		||||
    printf '    -z                 Generate iso only\n'
 | 
			
		||||
    printf '                       Requires pre built images (-x)\n'
 | 
			
		||||
    printf '    -d                 Use dracut instead of mkinitcpio for iso initramfs\n'
 | 
			
		||||
    printf '    -w                 Copy the pacman.conf used to the rootfs\n'
 | 
			
		||||
    printf '    -q                 Query settings and pretend build\n'
 | 
			
		||||
    printf '    -h                 This help\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
@@ -365,13 +380,13 @@ usage() {
 | 
			
		||||
 | 
			
		||||
orig_args=("$@")
 | 
			
		||||
 | 
			
		||||
opts='p:r:R:t:i:g:a:czsbxmdqh'
 | 
			
		||||
opts='p:r:R:t:i:g:a:czsbxwmdqh'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        p) profile="$OPTARG" ;;
 | 
			
		||||
        a) arch="$OPTARG" ;;
 | 
			
		||||
        R) repo="$OPTARG" ;;
 | 
			
		||||
        R) STABILITY="$OPTARG" ;;
 | 
			
		||||
        r) chroots_iso="$OPTARG" ;;
 | 
			
		||||
        t) ISO_POOL="$OPTARG" ;;
 | 
			
		||||
        i) INITSYS="$OPTARG" ;;
 | 
			
		||||
@@ -383,6 +398,7 @@ while getopts "${opts}" arg; do
 | 
			
		||||
        b) boot_only=true ;;
 | 
			
		||||
        m) persist=true ;;
 | 
			
		||||
        d) use_dracut=true ;;
 | 
			
		||||
        w) copy_pacconf=true ;;
 | 
			
		||||
        q) pretend=true ;;
 | 
			
		||||
        h|?) usage 0 ;;
 | 
			
		||||
    esac
 | 
			
		||||
 
 | 
			
		||||
@@ -5,66 +5,33 @@
 | 
			
		||||
#{{{ calamares
 | 
			
		||||
 | 
			
		||||
yaml_array() {
 | 
			
		||||
    local array
 | 
			
		||||
    local array yaml
 | 
			
		||||
 | 
			
		||||
    for entry in "$@"; do
 | 
			
		||||
        array="${array:-}${array:+,} ${entry}"
 | 
			
		||||
        yaml="{name: ${entry}, action: enable}"
 | 
			
		||||
        array="${array:-}${array:+,} ${yaml}"
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "[${array}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_services_conf() {
 | 
			
		||||
    local key1="$1" key2="$2" val1="$3" val2="$4"
 | 
			
		||||
    local conf="$5"/services-"${INITSYS}".conf
 | 
			
		||||
    local svc
 | 
			
		||||
    svc=$(yaml_array "${SERVICES[@]}")
 | 
			
		||||
 | 
			
		||||
    yq -n '"---"' > "$conf"
 | 
			
		||||
 | 
			
		||||
    key1="$key1" key2="$key2" val1="$val1" val2="$val2" svc="$svc" \
 | 
			
		||||
    yq -P 'with(
 | 
			
		||||
        .;
 | 
			
		||||
            eval(strenv(key1)) = env(val1) |
 | 
			
		||||
            eval(strenv(key2)) = env(val2) |
 | 
			
		||||
            .services = env(svc))' \
 | 
			
		||||
        -i "$conf"
 | 
			
		||||
 | 
			
		||||
    if [[ ${INITSYS} == 's6' ]]; then
 | 
			
		||||
        yq -P '.defaultBundle = "default"' -i "$conf"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_services_openrc_conf(){
 | 
			
		||||
    write_services_conf '.initdDir' '.runlevelsDir' '/etc/init.d' '/etc/runlevels' "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_services_runit_conf(){
 | 
			
		||||
    write_services_conf '.svDir' '.runsvDir' '/etc/runit/sv' '/etc/runit/runsvdir' "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_services_s6_conf(){
 | 
			
		||||
    write_services_conf '.svDir' '.dbDir' '/etc/s6/sv' '/etc/s6/rc/compiled' "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_services_dinit_conf(){
 | 
			
		||||
    write_services_conf '.initdDir' '.runsvDir' '/etc/dinit.d' '/etc/dinit.d/boot.d' "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
configure_calamares(){
 | 
			
		||||
    local mods="$1/etc/calamares/modules"
 | 
			
		||||
    if [[ -d "$mods" ]];then
 | 
			
		||||
        msg2 "Configuring: Calamares"
 | 
			
		||||
        write_services_"${INITSYS}"_conf "$mods"
 | 
			
		||||
        sed -e "s|-openrc|-${INITSYS}|" -i "$1"/etc/calamares/settings.conf
 | 
			
		||||
        if [[ -f "$mods"/netstrap.conf ]]; then
 | 
			
		||||
            sed -e "s|-openrc|-${INITSYS}|g" -i "$mods"/netstrap.conf
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ -f "$mods"/netinstall.conf ]]; then
 | 
			
		||||
            sed -e "s|netinstall-openrc|netinstall-${INITSYS}|" -i "$mods"/netinstall.conf
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ -f "$mods"/netinstall.yaml ]]; then
 | 
			
		||||
            sed -e "s|-openrc|-${INITSYS}|g" -i "$mods"/netinstall.yaml
 | 
			
		||||
    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
 | 
			
		||||
                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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,29 +4,6 @@
 | 
			
		||||
 | 
			
		||||
#{{{ initcpio
 | 
			
		||||
 | 
			
		||||
make_checksum(){
 | 
			
		||||
    local file="$1"
 | 
			
		||||
    msg2 "Creating md5sum ..."
 | 
			
		||||
    cd "${iso_root}${live_dir}"
 | 
			
		||||
    md5sum "$file" > "$file".md5
 | 
			
		||||
    cd "${OLDPWD}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
make_sig () {
 | 
			
		||||
    local file="$1"
 | 
			
		||||
    msg2 "Creating signature file..."
 | 
			
		||||
    chown "${owner}:$(id --group "${owner}")" "${iso_root}${live_dir}"
 | 
			
		||||
    su "${owner}" -c "gpg --detach-sign --output $file.sig --default-key ${GPG_KEY} $file"
 | 
			
		||||
    chown "root:root" "${iso_root}${live_dir}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export_gpg_publickey() {
 | 
			
		||||
    key_export=${WORKSPACE_DIR}/pubkey.gpg
 | 
			
		||||
    if [[ ! -e "${key_export}" ]]; then
 | 
			
		||||
        gpg --batch --output "${key_export}" --export "${GPG_KEY}"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
prepare_initramfs_mkinitcpio() {
 | 
			
		||||
    local mnt="$1" mkinitcpio_conf k
 | 
			
		||||
 | 
			
		||||
@@ -34,8 +11,8 @@ prepare_initramfs_mkinitcpio() {
 | 
			
		||||
    [[ "${profile}" == 'base' ]] && mkinitcpio_conf=mkinitcpio-pxe.conf
 | 
			
		||||
    k=$(<"$mnt"/usr/src/linux/version)
 | 
			
		||||
 | 
			
		||||
    if [[ -n "${GPG_KEY}" ]]; then
 | 
			
		||||
        exec {ARTIX_GNUPG_FD}<>"${key_export}"
 | 
			
		||||
    if [[ -v key_export ]]; then
 | 
			
		||||
        exec {ARTIX_GNUPG_FD}<"${key_export}"
 | 
			
		||||
        export ARTIX_GNUPG_FD
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
@@ -43,13 +20,11 @@ prepare_initramfs_mkinitcpio() {
 | 
			
		||||
        -c /etc/"$mkinitcpio_conf" \
 | 
			
		||||
        -g /boot/initramfs.img
 | 
			
		||||
 | 
			
		||||
    if [[ -n "${GPG_KEY}" ]]; then
 | 
			
		||||
    if [[ -v key_export ]]; then
 | 
			
		||||
        exec {ARTIX_GNUPG_FD}<&-
 | 
			
		||||
        unset ARTIX_GNUPG_FD
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f "${key_export}" ]]; then
 | 
			
		||||
        rm "${key_export}"
 | 
			
		||||
    fi
 | 
			
		||||
    rm -rf -- "${key_export}"
 | 
			
		||||
    cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${arch}".img
 | 
			
		||||
    prepare_boot_extras "$mnt"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,24 @@
 | 
			
		||||
 | 
			
		||||
#{{{ squash
 | 
			
		||||
 | 
			
		||||
make_checksum(){
 | 
			
		||||
    local file="$1"
 | 
			
		||||
    msg2 "Creating md5sum ..."
 | 
			
		||||
    cd "${iso_root}${live_dir}"
 | 
			
		||||
    md5sum "$file" > "$file".md5
 | 
			
		||||
    cd "${OLDPWD}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
make_sig () {
 | 
			
		||||
    local file="$1"
 | 
			
		||||
    msg2 "Creating signature file..."
 | 
			
		||||
 | 
			
		||||
    chown "${owner}:$(id --group "${owner}")" "${iso_root}${live_dir}"
 | 
			
		||||
    su "${owner}" -c "gpg --batch --no-armor --no-include-key-block --output $file.sig  --detach-sign \
 | 
			
		||||
        --default-key ${GPG_KEY} ${gpg_options[@]} $file"
 | 
			
		||||
    chown "root:root" "${iso_root}${live_dir}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
make_ext_img(){
 | 
			
		||||
    local src="$1"
 | 
			
		||||
    local size=32G
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ load_iso_config(){
 | 
			
		||||
 | 
			
		||||
    ARCH=${ARCH:-"$(uname -m)"}
 | 
			
		||||
 | 
			
		||||
    REPO=${REPO:-'world'}
 | 
			
		||||
    STABILITY=${STABILITY:-'stable'}
 | 
			
		||||
 | 
			
		||||
    ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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} --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"
 | 
			
		||||
        ;;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										137
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,137 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/packager.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/packager.sh
 | 
			
		||||
 | 
			
		||||
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 $maintainer"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -o|--orphan)
 | 
			
		||||
                ORPHAN=1
 | 
			
		||||
                RUNCMD+=" $1 $orphan"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --)
 | 
			
		||||
                shift
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
            *)
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    load_makepkg_config
 | 
			
		||||
    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
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    maintainer="maintainer-${packager_name}"
 | 
			
		||||
 | 
			
		||||
    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: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -r, --remove NAME           Remove team from repo
 | 
			
		||||
                                    Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -h, --help                  Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} --check libfoo
 | 
			
		||||
        $ ${COMMAND} --list libfoo
 | 
			
		||||
        $ ${COMMAND} --add ${ARTIX_TEAMS[1]} libfoo
 | 
			
		||||
        $ ${COMMAND} --remove ${ARTIX_TEAMS[3]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
artixpkg_admin_team() {
 | 
			
		||||
    if (( $# < 1 )); then
 | 
			
		||||
        artixpkg_admin_team_usage
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # options
 | 
			
		||||
    local CHECK=0
 | 
			
		||||
    local LIST=0
 | 
			
		||||
    local TEAM_ADD
 | 
			
		||||
    local TEAM_RM
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_admin_team_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--add)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TEAM_ADD="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -r|--remove)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TEAM_RM="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -c|--check)
 | 
			
		||||
                CHECK=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -l|--list)
 | 
			
		||||
                LIST=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --)
 | 
			
		||||
                shift
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
            *)
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
 | 
			
		||||
        for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
 | 
			
		||||
            if [[ -d "${pkgbase}" ]];then
 | 
			
		||||
 | 
			
		||||
                if [[ ! -d "${pkgbase}/.git" ]]; then
 | 
			
		||||
                    error "Not a Git repository: ${pkgbase}"
 | 
			
		||||
                    continue
 | 
			
		||||
                fi
 | 
			
		||||
                ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                    local gitname
 | 
			
		||||
                    gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
 | 
			
		||||
                    if (( CHECK )); then
 | 
			
		||||
                        local team
 | 
			
		||||
                        team=$(team_from_yaml)
 | 
			
		||||
                        res=$(check_repo_team  "${gitname}" "${team}" | yq -rP '.name')
 | 
			
		||||
                        if [[ "$res" == "null" ]]; then
 | 
			
		||||
                            error "[%s] does not have team (%s) assigned" "$pkgbase" "${team}"
 | 
			
		||||
                        else
 | 
			
		||||
                            msg "[%s] has team (%s) assigned" "$pkgbase" "${team}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( LIST )); then
 | 
			
		||||
                        list_repo_teams "${gitname}" | yq -rP '.[] | .name'
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if [[ -n ${TEAM_ADD} ]]; then
 | 
			
		||||
 | 
			
		||||
                        if ! add_team_to_repo "${gitname}" "${TEAM_ADD}"; then
 | 
			
		||||
                            warning "failed to add team: ${TEAM_ADD}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        if [[ "$(team_from_yaml)" != "${TEAM_ADD}" ]] \
 | 
			
		||||
                        || [[ "$(team_from_yaml)" == "null" ]]; then
 | 
			
		||||
                            update_yaml_team "${TEAM_ADD}"
 | 
			
		||||
                            git add "${REPO_DB}"
 | 
			
		||||
                            git commit -m "Set team ${TEAM_ADD}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if [[ -n ${TEAM_RM} ]]; then
 | 
			
		||||
 | 
			
		||||
                        if ! remove_team_from_repo "${gitname}" "${TEAM_RM}"; then
 | 
			
		||||
                            warning "failed to add team: ${TEAM_RM}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    msg "Querying ${pkgbase} ..."
 | 
			
		||||
                    if ! show_db; then
 | 
			
		||||
                        warning "Could not query ${REPO_DB}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                )
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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,64 @@ 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
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								src/lib/pkg/ci.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/lib/pkg/ci.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_CI_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_CI_SH=1
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        config         Configure ci and build agent
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} config libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_ci() {
 | 
			
		||||
    if (( $# < 1 )); then
 | 
			
		||||
        artixpkg_ci_usage
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # option checking
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            artixpkg_ci_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        config)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/ci/config.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
            artixpkg_ci_config "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            die "invalid command: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										154
									
								
								src/lib/pkg/ci/config.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								src/lib/pkg/ci/config.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,154 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_CI_CONFIG_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_CI_CONFIG_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_config_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -a, --agent NAME       Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                               Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -s, --switch           Switch agent
 | 
			
		||||
        -j, --jobs N           Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} --agent ${AGENTS[1]} libfoo
 | 
			
		||||
        $ ${COMMAND} --switch --agent ${AGENTS[1]} libfoo
 | 
			
		||||
        $ ${COMMAND} *
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_config() {
 | 
			
		||||
    # options
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
    local paths=()
 | 
			
		||||
 | 
			
		||||
    local AGENT=${AGENTS[0]}
 | 
			
		||||
    local SWITCH=0
 | 
			
		||||
 | 
			
		||||
    # variables
 | 
			
		||||
    local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    local path realpath pkgbase
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            artixpkg_ci_config_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -s|--switch)
 | 
			
		||||
            SWITCH=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT="$2"
 | 
			
		||||
            RUNCMD+=" $1 ${AGENT}"
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        -j|--jobs)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            jobs=$2
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --)
 | 
			
		||||
            shift
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            paths=("$@")
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # check if invoked without any path from within a packaging repo
 | 
			
		||||
    if (( ${#paths[@]} == 0 )); then
 | 
			
		||||
        if [[ -f PKGBUILD ]]; then
 | 
			
		||||
            paths=(".")
 | 
			
		||||
        else
 | 
			
		||||
            artixpkg_ci_config_usage
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # parallelization
 | 
			
		||||
    if [[ ${jobs} != 1 ]] && (( ${#paths[@]} > 1 )); then
 | 
			
		||||
        if [[ -n ${BOLD} ]]; then
 | 
			
		||||
            export ARTOOLS_COLOR=always
 | 
			
		||||
        fi
 | 
			
		||||
        if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${paths[@]}"; then
 | 
			
		||||
            die 'Failed to configure some packages, please check the output'
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for path in "${paths[@]}"; do
 | 
			
		||||
        if ! realpath=$(realpath -e "${path}"); then
 | 
			
		||||
            error "No such directory: ${path}"
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        pkgbase=$(basename "${realpath}")
 | 
			
		||||
        pkgbase=${pkgbase%.git}
 | 
			
		||||
 | 
			
		||||
        if [[ ! -d "${path}/.git" ]]; then
 | 
			
		||||
            error "Not a Git repository: ${path}"
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
        ( cd "${path}" || return
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_CI} ]]; then
 | 
			
		||||
 | 
			
		||||
                [[ -d .artixlinux ]] || mkdir .artixlinux
 | 
			
		||||
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                git add "${REPO_CI}"
 | 
			
		||||
                git commit -m "add ci support"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
 | 
			
		||||
                msg "Creating repo db ..."
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
                    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
                    source PKGBUILD
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                fi
 | 
			
		||||
                git add "${REPO_DB}"
 | 
			
		||||
                git commit -m "create repo db"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if (( SWITCH )); then
 | 
			
		||||
                msg "Switching to agent (${AGENT}) ..."
 | 
			
		||||
                write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                git add "${REPO_CI}"
 | 
			
		||||
                git commit -m "switch agent"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
        )
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
@@ -17,6 +17,19 @@ readonly ARTIX_DB=(
 | 
			
		||||
    galaxy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly ARTIX_DB_MAP=(
 | 
			
		||||
    goblins
 | 
			
		||||
    gremlins
 | 
			
		||||
    stable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly ARTIX_TEAMS=(
 | 
			
		||||
    "${ARTIX_DB[2]}"
 | 
			
		||||
    "${ARTIX_DB[5]}"
 | 
			
		||||
    "${ARTIX_DB[8]}"
 | 
			
		||||
    "${ARTIX_DB[11]}"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly REPO_DB='.artixlinux/pkgbase.yaml'
 | 
			
		||||
 | 
			
		||||
readonly REPO_CI='.artixlinux/Jenkinsfile'
 | 
			
		||||
@@ -100,6 +113,8 @@ create_repo_db() {
 | 
			
		||||
 | 
			
		||||
    yq -n '"---"' > "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P '.team = null' -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P 'with(
 | 
			
		||||
        .pkgbase;
 | 
			
		||||
            .name = null |
 | 
			
		||||
@@ -132,6 +147,31 @@ create_repo_db() {
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
has_repos_map_key() {
 | 
			
		||||
    local _r="$1"
 | 
			
		||||
    local r
 | 
			
		||||
    if ! $(r="$_r" yq -r '.repos | has(strenv(r))' "${REPO_DB}"); then
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
delete_obsolete_map_keys() {
 | 
			
		||||
    local _r
 | 
			
		||||
    for r in asteroids{-goblins,-gremlins,}; do
 | 
			
		||||
        if $(_r="$r" yq -r '.repos | has(strenv(_r))' "${REPO_DB}"); then
 | 
			
		||||
            local repo
 | 
			
		||||
            repo=".repos.${r}" \
 | 
			
		||||
                yq 'del(eval(strenv(repo)))' -i "${REPO_DB}"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_team() {
 | 
			
		||||
    local team="${1:-${ARTIX_DB[5]}}"
 | 
			
		||||
    team="$team" yq -P '.team = env(team)' -i "${REPO_DB}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_yaml_base() {
 | 
			
		||||
    local version
 | 
			
		||||
    local name
 | 
			
		||||
@@ -273,19 +313,37 @@ update_yaml_move() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_agent() {
 | 
			
		||||
    local agent="orion"
 | 
			
		||||
    if grep @galaxy "${REPO_CI}" &>/dev/null; then
 | 
			
		||||
        agent="taurus"
 | 
			
		||||
    local agent="${AGENTS[0]}"
 | 
			
		||||
    if grep @${AGENTS[1]} "${REPO_CI}" &>/dev/null; then
 | 
			
		||||
        agent="${AGENTS[1]}"
 | 
			
		||||
    fi
 | 
			
		||||
    msg2 "agent: %s" "$agent"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
team_from_yaml() {
 | 
			
		||||
    local team
 | 
			
		||||
    team=$(yq -rP '.team' "${REPO_DB}")
 | 
			
		||||
    printf "$team"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
auto_detect() {
 | 
			
		||||
    local team
 | 
			
		||||
    for repo in "${ARTIX_TEAMS[@]}"; do
 | 
			
		||||
        local _r res
 | 
			
		||||
        res=$(_r=".$repo" yq -rP '.repos | eval(strenv(_r)) | .version' "${REPO_DB}")
 | 
			
		||||
        if [[ "${res}" != "null" ]]; then
 | 
			
		||||
            team=${repo}
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    printf "%s\n" "$team"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_db() {
 | 
			
		||||
    show_agent
 | 
			
		||||
    if ! yq -r "${REPO_DB}" 1>/dev/null 2>/dev/null; then
 | 
			
		||||
        die "${REPO_DB} invalid!"
 | 
			
		||||
    fi
 | 
			
		||||
    yq -rP '. | with_entries(select(.value.name))' "${REPO_DB}"
 | 
			
		||||
    yq -rP 'with_entries(select(.key == "team" or .key == "pkgbase"))' "${REPO_DB}"
 | 
			
		||||
    yq -rP '. | .repos | with_entries(select(.value.version))' "${REPO_DB}"
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
@@ -297,3 +355,24 @@ show_srcinfo_base() {
 | 
			
		||||
show_srcinfo_pkgs() {
 | 
			
		||||
    pkg2yaml . | yq '.pkgnames'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_jenkinsfile() {
 | 
			
		||||
    printf "@Library('artix-ci@%s') import org.artixlinux.RepoPackage\n" "${1}" > "${REPO_CI}"
 | 
			
		||||
    {
 | 
			
		||||
        printf '\n'
 | 
			
		||||
        printf 'PackagePipeline(new RepoPackage(this))\n'
 | 
			
		||||
    } >> "${REPO_CI}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
migrate_agent_branch() {
 | 
			
		||||
    local branch=${AGENTS[0]}
 | 
			
		||||
    for a in "${AGENTS[@]}"; do
 | 
			
		||||
        if grep @"$a" "${REPO_CI}" &>/dev/null; then
 | 
			
		||||
            branch="$a"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    if grep @galaxy "${REPO_CI}" &>/dev/null; then
 | 
			
		||||
        branch=${AGENTS[1]}
 | 
			
		||||
    fi
 | 
			
		||||
    write_jenkinsfile "${branch}"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,10 @@ 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/ci/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -17,21 +21,23 @@ 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
 | 
			
		||||
        -a, --agent NAME           Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                                   Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -t, --team NAME            Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                                   Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --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
 | 
			
		||||
        $ ${COMMAND} --agent ${AGENTS[1]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +54,9 @@ artixpkg_git_clone() {
 | 
			
		||||
    local CLONE_ALL=0
 | 
			
		||||
    local MAINTAINER=
 | 
			
		||||
    local TOPIC=
 | 
			
		||||
    local CONFIGURE_OPTIONS=()
 | 
			
		||||
    local CONFIG_OPTS=()
 | 
			
		||||
    local AGENT_OPTS=()
 | 
			
		||||
    local TEAM_OPTS=()
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +70,7 @@ artixpkg_git_clone() {
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol=https)
 | 
			
		||||
                GIT_REPO_BASE_URL="${GIT_HTTPS}/"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1")
 | 
			
		||||
                CONFIG_OPTS+=("$1")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol)
 | 
			
		||||
@@ -72,7 +80,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 +88,21 @@ 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
 | 
			
		||||
            -t|--team)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TEAM_OPTS=("--add" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                AGENT_OPTS=("$1" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --agent=*)
 | 
			
		||||
                CONFIGURE_OPTIONS+=("${1}")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --all)
 | 
			
		||||
                CLONE_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -167,6 +168,8 @@ artixpkg_git_clone() {
 | 
			
		||||
            warning "Skip cloning ${pkgbase}: Directory exists"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        artixpkg_git_config "${CONFIGURE_OPTIONS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_git_config "${CONFIG_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_ci_config "${AGENT_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,98 +5,27 @@
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_GIT_CONFIG_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_GIT_CONFIG_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/packager.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/packager.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
 | 
			
		||||
@@ -221,7 +124,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,58 +167,6 @@ artixpkg_git_config() {
 | 
			
		||||
                git config user.signingKey "${GPGKEY}"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # topics meta
 | 
			
		||||
            if (( SET_TOPIC )); then
 | 
			
		||||
                if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
                    local topic gitname
 | 
			
		||||
                    topic="maintainer-${packager_name}"
 | 
			
		||||
                    gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
                    if ! add_topic "${gitname}" "${topic}"; then
 | 
			
		||||
                        warning "failed to set the maintainer topic: ${topic}"
 | 
			
		||||
                    fi
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if (( DROP_TOPIC )); then
 | 
			
		||||
                if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
                    local topic gitname
 | 
			
		||||
                    topic="maintainer-${packager_name}"
 | 
			
		||||
                    gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
                    if ! remove_topic "${gitname}" "${topic}"; then
 | 
			
		||||
                        warning "failed to drop the maintainer topic: ${topic}"
 | 
			
		||||
                    fi
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_CI} ]]; then
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                commit_ci
 | 
			
		||||
                CI_ADDED=1
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ -n ${AGENT} ]] && (( ! CI_ADDED )); then
 | 
			
		||||
                msg "Switching ci support for [%s] ..." "${AGENT}"
 | 
			
		||||
                commit_ci
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
 | 
			
		||||
                msg "Creating repo db ..."
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
                    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
                    source PKGBUILD
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                fi
 | 
			
		||||
                git add "${REPO_DB}"
 | 
			
		||||
                git commit -m "Create repo db"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            msg "Querying ${pkgbase} ..."
 | 
			
		||||
            if ! show_db; then
 | 
			
		||||
                warning "Could not query ${REPO_DB}"
 | 
			
		||||
            fi
 | 
			
		||||
        )
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,10 @@ 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/ci/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -20,8 +24,10 @@ 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]
 | 
			
		||||
        -a, --agent NAME      Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                              Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -t, --team NAME       Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                              Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -h, --help            Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
@@ -33,17 +39,12 @@ 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 AGENT_OPTS=("--agent" "${AGENTS[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
 | 
			
		||||
 | 
			
		||||
@@ -53,30 +54,32 @@ artixpkg_git_create() {
 | 
			
		||||
            artixpkg_git_create_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT_OPTS=("$1" "$2")
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        -c|--clone)
 | 
			
		||||
            clone=1
 | 
			
		||||
            CLONE=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -t|--team)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            TEAM="$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 +89,41 @@ artixpkg_git_create() {
 | 
			
		||||
            if ! path=$(realpath -e .); then
 | 
			
		||||
                die "failed to read path from current directory"
 | 
			
		||||
            fi
 | 
			
		||||
        pkgbases=("$(basename "${path}")")
 | 
			
		||||
        clone=0
 | 
			
		||||
        config=1
 | 
			
		||||
    else
 | 
			
		||||
        artixpkg_git_create_usage
 | 
			
		||||
        exit 1
 | 
			
		||||
            pkgbases=("$(basename "${path}")")
 | 
			
		||||
            CLONE=0
 | 
			
		||||
            CONFIG=1
 | 
			
		||||
        else
 | 
			
		||||
            artixpkg_git_create_usage
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # create
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
 | 
			
		||||
        local gitname
 | 
			
		||||
        gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
 | 
			
		||||
        if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
            if ! create_repo "${gitname}" >/dev/null; then
 | 
			
		||||
                die "failed to create 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 "${AGENT_OPTS[@]}" "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( CONFIG )); then
 | 
			
		||||
            artixpkg_git_config "${pkgbase}"
 | 
			
		||||
            artixpkg_ci_config "${AGENT_OPTS[@]}" "${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:
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ artixpkg_git_pull_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME      Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME           Pull all packages of the named topic
 | 
			
		||||
        -m, --maintainer NAME      Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic NAME           Pull all packages of the named topic
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --all                      Pull all existing packages
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
@@ -57,19 +57,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
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ artixpkg_git_push_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME      Push all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME           Push all packages of the named topic
 | 
			
		||||
        -m, --maintainer NAME      Push all packages of the named maintainer
 | 
			
		||||
        -t, --topic NAME           Push all packages of the named topic
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
@@ -55,19 +55,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								src/lib/pkg/packager.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/lib/pkg/packager.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
#!/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
 | 
			
		||||
}
 | 
			
		||||
@@ -38,14 +38,15 @@ artixpkg_repo_add_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push             Push pkgbase
 | 
			
		||||
        -r, --rebuild          Triggers a rebuild
 | 
			
		||||
        -n, --nocheck          Disable the check function
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
        -p, --push              Push pkgbase
 | 
			
		||||
        -r, --rebuild           Triggers a rebuild
 | 
			
		||||
        -n, --nocheck           Disable the check function
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} 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 +65,7 @@ artixpkg_repo_add() {
 | 
			
		||||
    local REBUILD=0
 | 
			
		||||
    local NOCHECK=0
 | 
			
		||||
    local ADD=1
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
@@ -96,8 +98,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
 | 
			
		||||
@@ -124,8 +130,27 @@ artixpkg_repo_add() {
 | 
			
		||||
                    manage-pkgbuild-keys --export
 | 
			
		||||
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
 | 
			
		||||
                    local auto
 | 
			
		||||
                    auto=$(auto_detect)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${auto}" ]]; then
 | 
			
		||||
                        auto=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${auto}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${auto}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    update_yaml_add "${REBUILD}" "${ADD}" "${NOCHECK}" "${DEST}"
 | 
			
		||||
 | 
			
		||||
                    update_yaml_team "${auto}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    local commit_msg
 | 
			
		||||
                    commit_msg=$(get_commit_msg 'add' "${DEST}")
 | 
			
		||||
 | 
			
		||||
@@ -133,6 +158,10 @@ artixpkg_repo_add() {
 | 
			
		||||
                        rm .SRCINFO
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    delete_obsolete_map_keys
 | 
			
		||||
 | 
			
		||||
                    migrate_agent_branch
 | 
			
		||||
 | 
			
		||||
                    if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
 | 
			
		||||
 | 
			
		||||
                        stat_busy 'Staging files'
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,13 @@ artixpkg_repo_move_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [SOURCE_REPO] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push         Push pkgbase
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -p, --push              Push pkgbase
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} 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,6 +35,7 @@ artixpkg_repo_move() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
 | 
			
		||||
    local DEST
 | 
			
		||||
    local SRC
 | 
			
		||||
@@ -57,15 +59,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+=("$@")
 | 
			
		||||
@@ -86,58 +92,116 @@ artixpkg_repo_move() {
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg src_version # dest_version
 | 
			
		||||
                    local auto
 | 
			
		||||
                    auto=$(auto_detect)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${auto}" ]]; then
 | 
			
		||||
                        auto=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${SRC}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            SRC="${auto}"
 | 
			
		||||
                        else
 | 
			
		||||
                            SRC="${auto}-${SRC}"
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${auto}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${auto}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg src_version
 | 
			
		||||
                    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
 | 
			
		||||
                        update_yaml_move "${SRC}" "${DEST}"
 | 
			
		||||
 | 
			
		||||
                            update_yaml_move "${SRC}" "${DEST}"
 | 
			
		||||
 | 
			
		||||
                            if [[ -f .SRCINFO ]]; then
 | 
			
		||||
                                rm .SRCINFO
 | 
			
		||||
                        if [[ -f .SRCINFO ]]; then
 | 
			
		||||
                            rm .SRCINFO
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                        delete_obsolete_map_keys
 | 
			
		||||
 | 
			
		||||
                        migrate_agent_branch
 | 
			
		||||
 | 
			
		||||
                        update_yaml_team "$(auto_detect)"
 | 
			
		||||
 | 
			
		||||
                        if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
 | 
			
		||||
 | 
			
		||||
                            stat_busy 'Staging files'
 | 
			
		||||
                            for f in $(git ls-files --modified); do
 | 
			
		||||
                                if [[ "$f" == "${REPO_DB}" ]]; then
 | 
			
		||||
                                    git add "$f"
 | 
			
		||||
                                fi
 | 
			
		||||
                            done
 | 
			
		||||
                            stat_done
 | 
			
		||||
 | 
			
		||||
                            msg 'Commit'
 | 
			
		||||
                            git commit -m "${commit_msg}"
 | 
			
		||||
 | 
			
		||||
                            if (( PUSH )); then
 | 
			
		||||
                                msg "Push (${pkgbase})"
 | 
			
		||||
                                git push origin master
 | 
			
		||||
                            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 "${pkgbase}" "${ARTIX_DB[5]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[5]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${pkgbase}" "${ARTIX_DB[2]}"; then
 | 
			
		||||
                                    warning "failed to remove team: ${ARTIX_DB[2]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                            elif [[ "${SRC}" == ${ARTIX_DB[5]}* ]] \
 | 
			
		||||
                            && [[ "${DEST}" == ${ARTIX_DB[2]}* ]]; then
 | 
			
		||||
                                if ! add_team_to_repo "${pkgbase}" "${ARTIX_DB[2]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[2]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${pkgbase}" "${ARTIX_DB[5]}"; then
 | 
			
		||||
                                    warning "failed to remove team: ${ARTIX_DB[5]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                            fi
 | 
			
		||||
 | 
			
		||||
                            # team change on cross repo move world <-> galaxy
 | 
			
		||||
                            if [[ "${SRC}" == ${ARTIX_DB[11]}* ]] \
 | 
			
		||||
                            && [[ "${DEST}" == ${ARTIX_DB[5]}* ]]; then
 | 
			
		||||
                                if ! add_team_to_repo "${gitname}" "${ARTIX_DB[5]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[5]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${gitname}" "${ARTIX_DB[11]}"; then
 | 
			
		||||
                                    warning "failed to remove team: ${ARTIX_DB[11]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                            elif [[ "${SRC}" == ${ARTIX_DB[5]}* ]] \
 | 
			
		||||
                            && [[ "${DEST}" == ${ARTIX_DB[11]}* ]]; then
 | 
			
		||||
                                if ! add_team_to_repo "${gitname}" "${ARTIX_DB[11]}"; then
 | 
			
		||||
                                    warning "failed to add team: ${ARTIX_DB[11]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                                if ! remove_team_from_repo "${gitname}" "${ARTIX_DB[5]}"; then
 | 
			
		||||
                                    warning "failed to remove team: ${ARTIX_DB[5]}"
 | 
			
		||||
                                fi
 | 
			
		||||
                            fi
 | 
			
		||||
 | 
			
		||||
                        fi
 | 
			
		||||
 | 
			
		||||
                    else
 | 
			
		||||
                        error "${pkgbase}: invalid move: version $src_version!"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,13 @@ artixpkg_repo_remove_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push         Push pkgbase
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -p, --push              Push pkgbase
 | 
			
		||||
        -h, --help              Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} 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,6 +35,7 @@ artixpkg_repo_remove() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=0
 | 
			
		||||
    local DEST=''
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
@@ -59,8 +61,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
 | 
			
		||||
@@ -79,11 +85,30 @@ artixpkg_repo_remove() {
 | 
			
		||||
                        die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local auto
 | 
			
		||||
                    auto=$(auto_detect)
 | 
			
		||||
 | 
			
		||||
                    if [[ -z "${auto}" ]]; then
 | 
			
		||||
                        auto=$(team_from_yaml)
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if (( AUTO )); then
 | 
			
		||||
                        if [[ "${DEST}" == "${ARTIX_DB_MAP[2]}" ]]; then
 | 
			
		||||
                            DEST="${auto}"
 | 
			
		||||
                        else
 | 
			
		||||
                            DEST="${auto}-${DEST}"
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    local commit_msg
 | 
			
		||||
                    commit_msg=$(get_commit_msg 'remove' "${DEST}")
 | 
			
		||||
 | 
			
		||||
                    update_yaml_remove "${DEST}"
 | 
			
		||||
 | 
			
		||||
                    delete_obsolete_map_keys
 | 
			
		||||
 | 
			
		||||
                    migrate_agent_branch
 | 
			
		||||
 | 
			
		||||
                    if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
 | 
			
		||||
 | 
			
		||||
                        stat_busy 'Staging files'
 | 
			
		||||
 
 | 
			
		||||
@@ -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,10 @@ load_pkg_config(){
 | 
			
		||||
 | 
			
		||||
    DBEXT=${DBEXT:-'gz'}
 | 
			
		||||
 | 
			
		||||
    if [[ -z "${AGENTS[*]}" ]]; then
 | 
			
		||||
        AGENTS=(orion taurus)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,9 +20,11 @@ usage() {
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        repo      Pacman database modification for packge update, move etc
 | 
			
		||||
        admin     Manage topics, teams and obsolete repos
 | 
			
		||||
        ci        Manage CI and build agent
 | 
			
		||||
        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
 | 
			
		||||
@@ -67,6 +69,14 @@ while (( $# )); do
 | 
			
		||||
        artixpkg_git "$@"
 | 
			
		||||
        exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
    ci)
 | 
			
		||||
        _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
        shift
 | 
			
		||||
        # shellcheck source=src/lib/pkg/ci.sh
 | 
			
		||||
        source "${LIBDIR}"/pkg/ci.sh
 | 
			
		||||
        artixpkg_ci "$@"
 | 
			
		||||
        exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
    admin)
 | 
			
		||||
        _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
        shift
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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/deploy.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/deploy.sh
 | 
			
		||||
 | 
			
		||||
# shellcheck source=config/makepkg/x86_64.conf
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
 | 
			
		||||
export PKGDEST
 | 
			
		||||
export GPG_KEY
 | 
			
		||||
export GPG_PASS
 | 
			
		||||
 | 
			
		||||
passfiles=("$@")
 | 
			
		||||
 | 
			
		||||
sign_pkg(){
 | 
			
		||||
    local file_to_sign="$1"
 | 
			
		||||
 | 
			
		||||
    if [ ! -e "$file_to_sign" ]; then
 | 
			
		||||
        error "%s does not exist!" "$file_to_sign"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ -n "${GPG_KEY}" ]] && [[ -n "${GPG_PASS}" ]]; then
 | 
			
		||||
        msg "Signing [%s]" "${file_to_sign##*/}"
 | 
			
		||||
        gpg --homedir /etc/pacman.d/gnupg --no-permission-warning \
 | 
			
		||||
            --no-default-keyring --default-key "${GPG_KEY}" --passphrase "${GPG_PASS}" \
 | 
			
		||||
            -q --detach-sign "$file_to_sign"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check_root PKGDEST,GPG_KEY,GPG_PASS "${BASH_SOURCE[0]}" "$@"
 | 
			
		||||
 | 
			
		||||
for pkg in "${passfiles[@]}"; do
 | 
			
		||||
    msg "Searching %s ..." "$pkg"
 | 
			
		||||
    if pkgfile=$(find_cached_pkgfile "$pkg");then
 | 
			
		||||
        msg2 "Found: %s" "${pkgfile}"
 | 
			
		||||
        [[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig
 | 
			
		||||
        if ! sign_pkg "${pkgfile}"; then
 | 
			
		||||
            die "Failed to sign package!"
 | 
			
		||||
        fi
 | 
			
		||||
        ret=0
 | 
			
		||||
    else
 | 
			
		||||
        ret=1
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit "$ret"
 | 
			
		||||
		Reference in New Issue
	
	Block a user