Compare commits
	
		
			56 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| fa245021bf | |||
| fd74b22bc2 | |||
| 538e5051e5 | |||
| ba2542c697 | |||
| 23c6cecdcc | |||
| 828844fd9a | |||
| 760f5e8281 | |||
| bb1585ad7b | |||
| be6506d6ee | |||
| 35a9c2f305 | |||
| 5347f45cc5 | |||
| c7f11a5bd5 | |||
| f3794ff2ad | |||
| c6811cca48 | |||
| a1f296ff2b | |||
| ac5e0f4b3d | |||
| 2ecfb04dc6 | |||
| e81eac2021 | |||
| e612d2c6d2 | |||
| 2bed697813 | |||
| ba4ac669e7 | |||
| 47babd20fd | |||
| d35422a74e | |||
| 94b8957494 | |||
| a0a485294c | |||
| 7b67601e44 | |||
| 8db0c1ca39 | |||
| 190340e375 | |||
| f7a61731ba | |||
| e959ce10c3 | |||
| d2bbf9d8c4 | |||
| 1dafa0fb38 | |||
| 982a9ed678 | |||
| 19a6ff09f1 | |||
| fac634cf14 | |||
| 71ed464c33 | |||
| f7286a0661 | |||
| aee7c07a04 | |||
| fbcfa79426 | |||
| 87bd203d3e | |||
| ac0472d9ff | |||
| e80c07d2fc | |||
| 7584684bea | |||
| e415aa67b9 | |||
| b2512ffe68 | |||
| 1d8b7e83dc | |||
| e237afd788 | |||
| 5d7f006ad9 | |||
| 72104728ac | |||
| 423896750a | |||
| ad09046044 | |||
| c335cab68c | |||
| 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' | ||||
|  | ||||
|   | ||||
							
								
								
									
										14
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								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,9 @@ install_pkg: binprogs_pkg | ||||
| 	for a in $(SETARCH_ALIASES); do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done | ||||
| 	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides | ||||
|  | ||||
| 	install -Dm0644 $(BUILDDIR)/contrib/completion/bash/artixpkg $(DESTDIR)$(PREFIX)/share/bash-completion/completions/artixpkg | ||||
| 	install -Dm0644 $(BUILDDIR)/contrib/completion/zsh/_artixpkg $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_artixpkg | ||||
|  | ||||
| install_iso: binprogs_iso | ||||
| 	install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install -dm0755 $(DESTDIR)$(PREFIX)/bin | ||||
| @@ -144,5 +152,5 @@ dist: | ||||
| check: $(BINPROGS_SRC_BASE) $(BINPROGS_SRC_PKG) $(BINPROGS_SRC_ISO) config/makepkg/x86_64.conf contrib/makepkg/PKGBUILD.proto | ||||
| 	shellcheck -x $^ | ||||
|  | ||||
| .PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check | ||||
| .PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check contrib | ||||
| .DELETE_ON_ERROR: | ||||
|   | ||||
| @@ -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,15 @@ | ||||
|  | ||||
| # default packaging org | ||||
| # GIT_ORG='packages' | ||||
|  | ||||
| # default archiving org | ||||
| # GIT_ORG_ARCHIVE='landfill' | ||||
|  | ||||
| # default jenkins agents | ||||
| # AGENTS=(orion taurus) | ||||
|  | ||||
| # whether to include custom maintainer line when importing from arch | ||||
| # PATCH_MAINTAINER=false | ||||
|  | ||||
| # override the default git url for patches repo | ||||
| # PATCH_URL=${GIT_SSH}:artix/artix-patches.git | ||||
|   | ||||
| @@ -25,7 +25,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u' | ||||
|  | ||||
| #-- The package required by makepkg to download VCS sources | ||||
| #  Format: 'protocol::package' | ||||
| VCSCLIENTS=('bzr::bzr' | ||||
| VCSCLIENTS=('bzr::breezy' | ||||
|             'fossil::fossil' | ||||
|             'git::git' | ||||
|             'hg::mercurial' | ||||
| @@ -41,19 +41,18 @@ CHOST="x86_64-pc-linux-gnu" | ||||
| #-- Compiler and Linker Flags | ||||
| #CPPFLAGS="" | ||||
| CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ | ||||
|         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ | ||||
|         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \ | ||||
|         -fstack-clash-protection -fcf-protection" | ||||
|         # -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" | ||||
| CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" | ||||
| LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \ | ||||
|          -Wl,-z,pack-relative-relocs" | ||||
| LTOFLAGS="-flto=auto" | ||||
| RUSTFLAGS="" | ||||
| #-- Make Flags: change this for DistCC/SMP systems | ||||
| #MAKEFLAGS="-j2" | ||||
| #-- Debugging flags | ||||
| DEBUG_CFLAGS="-g" | ||||
| DEBUG_CXXFLAGS="$DEBUG_CFLAGS" | ||||
| DEBUG_RUSTFLAGS="-C debuginfo=2" | ||||
|  | ||||
| ######################################################################### | ||||
| # BUILD ENVIRONMENT | ||||
| @@ -82,7 +81,7 @@ BUILDENV=(!distcc color !ccache check !sign) | ||||
| #   These are default values for the options=() settings | ||||
| ######################################################################### | ||||
| # | ||||
| # Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto) | ||||
| # Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps) | ||||
| #  A negated option will do the opposite of the comments below. | ||||
| # | ||||
| #-- strip:      Strip symbols from binaries/libraries | ||||
| @@ -94,6 +93,7 @@ BUILDENV=(!distcc color !ccache check !sign) | ||||
| #-- purge:      Remove files specified by PURGE_TARGETS | ||||
| #-- debug:      Add debugging flags as specified in DEBUG_* variables | ||||
| #-- lto:        Add compile flags for building with link time optimization | ||||
| #-- autodeps:   Automatically add depends/provides | ||||
| # | ||||
| OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto) | ||||
|  | ||||
| @@ -113,6 +113,8 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) | ||||
| PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) | ||||
| #-- Directory to store source code in for debug packages | ||||
| DBGSRCDIR="/usr/src/debug" | ||||
| #-- Prefix and directories for library autodeps | ||||
| LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32') | ||||
|  | ||||
| ######################################################################### | ||||
| # PACKAGE OUTPUT | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
							
								
								
									
										117
									
								
								config/pacman/iso-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								config/pacman/iso-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| # | ||||
| # /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 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
| 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 | ||||
							
								
								
									
										105
									
								
								config/pacman/iso-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								config/pacman/iso-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| # | ||||
| # /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 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
| 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 | ||||
							
								
								
									
										105
									
								
								config/pacman/iso-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								config/pacman/iso-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| # | ||||
| # /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 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
| 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 | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
| @@ -36,6 +36,8 @@ NoProgressBar | ||||
| #CheckSpace | ||||
| VerbosePkgLists | ||||
| ParallelDownloads = 5 | ||||
| DownloadUser = alpm | ||||
| #DisableSandbox | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
|   | ||||
							
								
								
									
										295
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										295
									
								
								contrib/completion/bash/artixpkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,295 @@ | ||||
| #/usr/bin/env bash | ||||
|  | ||||
| LIBDIR=${LIBDIR:-'@libdir@'} | ||||
|  | ||||
| _artixpkg_pkgbase() { | ||||
|     source "${LIBDIR}"/pkg/git/config.sh | ||||
|     source "${LIBDIR}"/pkg/util.sh | ||||
|     ls -1 "${TREE_DIR_ARTIX}" | tr '\n' ' ' | ||||
| } | ||||
|  | ||||
| _artixpkg_remotepkgbase() { | ||||
|     curl -s "https://checkupdates.artixlinux.org/api/1.0/packages?startswith=$1" | ||||
| } | ||||
|  | ||||
| _artixpkg_maintainers() { | ||||
|     curl -s "https://checkupdates.artixlinux.org/api/1.0/maintainers" | ||||
| } | ||||
|  | ||||
| _artixpkg_completion() { | ||||
|     local cur prev comps comps_all repos autorepos teams agents cwords comp_cword_exflag | ||||
|     source "${LIBDIR}"/pkg/db/db.sh 2>/dev/null | ||||
|  | ||||
|     cur="${COMP_WORDS[COMP_CWORD]}" | ||||
|     prev="${COMP_WORDS[COMP_CWORD-1]}" | ||||
|  | ||||
|     for ((i = COMP_CWORD - 1; i >= 0; i--)); do | ||||
|         if [[ ${COMP_WORDS[i]} != -* ]]; then | ||||
|             last_non_flag_word="${COMP_WORDS[i]}" | ||||
|             break | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     comps="" | ||||
|     comps_all="" | ||||
|     comp_cword_exflag=0 | ||||
|     comp_cword_all=0 | ||||
|     for ((i = 0; i < ${#COMP_WORDS[@]} - 1; i++)); do | ||||
|         word="${COMP_WORDS[i]}" | ||||
|         comps_all+=" $word" | ||||
|         ((comp_cword_all++)) | ||||
|         if [[ $word != -* ]]; then | ||||
|             comps+=" $word" | ||||
|             ((comp_cword_exflag++)) | ||||
|         fi | ||||
|     done | ||||
|     comps="${comps:1}" | ||||
|     comps_all="${comps_all:1}" | ||||
|  | ||||
|     repos="" | ||||
|     for word in "${ARTIX_DB[@]}"; do | ||||
|         if [[ $word != -* ]]; then | ||||
|             repos+=" $word" | ||||
|         fi | ||||
|     done | ||||
|     repos="${repos:1}" | ||||
|     autorepos="" | ||||
|     for word in "${ARTIX_DB_MAP[@]}"; do | ||||
|         if [[ $word != -* ]]; then | ||||
|             autorepos+=" $word" | ||||
|         fi | ||||
|     done | ||||
|     autorepos="${autorepos:1}" | ||||
|     teams="" | ||||
|     for word in "${ARTIX_TEAMS[@]}"; do | ||||
|         if [[ $word != -* ]]; then | ||||
|             teams+=" $word" | ||||
|         fi | ||||
|     done | ||||
|     teams="${teams:1}" | ||||
|     agents="" | ||||
|     for word in "${AGENTS[@]}"; do | ||||
|         if [[ $word != -* ]]; then | ||||
|             agents+=" $word" | ||||
|         fi | ||||
|     done | ||||
|     agents="${agents:1}" | ||||
|  | ||||
|  | ||||
|     case "${comp_cword_exflag}" in | ||||
|         1) | ||||
|             COMPREPLY=($(compgen -W "admin git repo version -h --help" -- "${cur}")) | ||||
|             return 0 | ||||
|             ;; | ||||
|         2) | ||||
|             case ${prev} in | ||||
|                 admin) | ||||
|                     COMPREPLY=($(compgen -W "maintainer query team topic transfer -h --help" -- ${cur})) | ||||
|                     ;; | ||||
|                 git) | ||||
|                     COMPREPLY=($(compgen -W "ci clone config create pull push -h --help" -- ${cur})) | ||||
|                     ;; | ||||
|                 repo) | ||||
|                     COMPREPLY=($(compgen -W "add remove move import show -h --help" -- ${cur})) | ||||
|                     ;; | ||||
|                 version) | ||||
|                     COMPREPLY=($(compgen -W "-h --help" -- ${cur})) | ||||
|                     ;; | ||||
|             esac | ||||
|             ;;   | ||||
|         *) | ||||
|             case "${comps}" in | ||||
|                 "artixpkg repo add"*) | ||||
|                     local repoAddCommon="-p --push -r --rebuild -n --nocheck -h --help" | ||||
|                     case "${comp_cword_exflag}" in | ||||
|                         3) | ||||
|                             COMPREPLY=($(compgen -W "$repoAddCommon $autorepos $repos" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "$repoAddCommon $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg repo remove"*) | ||||
|                     case "${comp_cword_exflag}" in | ||||
|                         3) | ||||
|                             COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg repo move"*) | ||||
|                     case "${comp_cword_exflag}" in | ||||
|                         3|4) | ||||
|                             COMPREPLY=($(compgen -W "-p --push -h --help $autorepos $repos" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg repo import"*) | ||||
|                     case "${prev}" in | ||||
|                         "--tag") | ||||
|                             # this flag expects a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "--del -h --help --tag $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg repo show") | ||||
|                     COMPREPLY=($(compgen -W "-b --base -p --pkgs -h --help" -- ${cur})) | ||||
|                     ;; | ||||
|                 "artixpkg git clone"*) | ||||
|                     case "${prev}" in | ||||
|                         "-a"|"--agent") | ||||
|                             COMPREPLY=($(compgen -W "$agents" -- ${cur})) | ||||
|                             ;; | ||||
|                         "--protocol") | ||||
|                             COMPREPLY=($(compgen -W "https" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-t"|"--team") | ||||
|                             COMPREPLY=($(compgen -W "$teams" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-m"|"--maintainer") | ||||
|                             COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-s"|"--search"|"-j"|"--jobs") | ||||
|                             # these flags expect a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-m --maintainer --protocol -s --search -t --team -a --agent -j --jobs --all -h --help $(_artixpkg_remotepkgbase ${cur})" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg git config"*) | ||||
|                     case "${prev}" in | ||||
|                         "--protocol") | ||||
|                             COMPREPLY=($(compgen -W "https" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-j"|"--jobs") | ||||
|                             # these flags expect a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "--protocol -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg git create"*) | ||||
|                     case "${prev}" in | ||||
|                         "-a"|"--agent") | ||||
|                             COMPREPLY=($(compgen -W "$agents" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-t"|"--team") | ||||
|                             COMPREPLY=($(compgen -W "$teams" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-c --clone -a --agent -t --team -h --help" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg git pull"*) | ||||
|                     case "${prev}" in | ||||
|                         "-m"|"--maintainer") | ||||
|                             COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-t"|"--topic"|"-j"|"--jobs") | ||||
|                             # these flags expect a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             case "${comps_all}" in | ||||
|                                 *--all*) | ||||
|                                     COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help" -- ${cur})) | ||||
|                                     ;; | ||||
|                                 *) | ||||
|                                     COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs --all -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                                     ;; | ||||
|                             esac | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg git push"*) | ||||
|                     case "${prev}" in | ||||
|                         "-m"|"--maintainer") | ||||
|                             COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-t"|"--topic"|"-j"|"--jobs") | ||||
|                             # this flag expects a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg git ci"*) | ||||
|                     case "${prev}" in | ||||
|                         "-a"|"--agent") | ||||
|                             COMPREPLY=($(compgen -W "$agents" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-a --agent -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg admin maintainer"*) | ||||
|                     case "${comp_cword_all}" in | ||||
|                         3) | ||||
|                             COMPREPLY=($(compgen -W "-a --adopt --o --orphan -h --help" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg admin query"*) | ||||
|                     case "${prev}" in | ||||
|                         "-m"|"--maintainer") | ||||
|                             COMPREPLY=($(compgen -W "$(_artixpkg_maintainers)" -- ${cur})) | ||||
|                             ;; | ||||
|                         "-t"|"--topic") | ||||
|                             # this flag expects a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-m --maintainer -t --topic -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg admin team"*) | ||||
|                     case "${prev}" in | ||||
|                         "-a"|"--add"|"-r"|"--remove") | ||||
|                             COMPREPLY=($(compgen -W "$teams" -- ${cur})) | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-a --add -c --check -l --list -r --remove -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg admin topic"*) | ||||
|                     case "${prev}" in | ||||
|                         "-a"|"--add"|"-r"|"--remove"|"-j"|"--jobs") | ||||
|                             # this flag expects a parameter | ||||
|                             COMPREPLY=() | ||||
|                             ;; | ||||
|                         *) | ||||
|                             COMPREPLY=($(compgen -W "-a --add -r --remove -d --del -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                             ;; | ||||
|                     esac | ||||
|                     ;; | ||||
|                 "artixpkg admin transfer"*) | ||||
|                     COMPREPLY=($(compgen -W "-h --help $(_artixpkg_pkgbase)" -- ${cur})) | ||||
|                     ;; | ||||
|             esac | ||||
|             ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| complete -F _artixpkg_completion artixpkg | ||||
							
								
								
									
										205
									
								
								contrib/completion/zsh/_artixpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								contrib/completion/zsh/_artixpkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,205 @@ | ||||
| #compdef artixpkg | ||||
|  | ||||
| local -a addcmd admincmd cicmd clonecmd configcmd createcmd gitcmd importcmd \ | ||||
|          initialcmd maintainercmd movecmd querycmd pullcmd pushcmd removecmd \ | ||||
|          repocmd showcmd teamcmd topiccmd transfercmd versioncmd | ||||
| _regex_words maintainer '' \ | ||||
|                         '-a' \ | ||||
|                         '--adopt' \ | ||||
|                         '-h' \ | ||||
|                         '--help' \ | ||||
|                         '-o' \ | ||||
|                         '--orphan' | ||||
| maintainercmd=("$reply[@]") | ||||
|  | ||||
| _regex_words query '' \ | ||||
|                    '-h' \ | ||||
|                    '--help' \ | ||||
|                    '-m' \ | ||||
|                    '-t' | ||||
| querycmd=("$reply[@]") | ||||
|  | ||||
| _regex_words team '' \ | ||||
|                   '-a' \ | ||||
|                   '--add' \ | ||||
|                   '-c' \ | ||||
|                   '--check' \ | ||||
|                   '-h' \ | ||||
|                   '--help' \ | ||||
|                   '-r' \ | ||||
|                   '--remove' | ||||
| teamcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words topic '' \ | ||||
|                    '-a' \ | ||||
|                    '--add' \ | ||||
|                    '-d' \ | ||||
|                    '--delete' \ | ||||
|                    '-h' \ | ||||
|                    '--help' \ | ||||
|                    '-j' \ | ||||
|                    '--jobs' \ | ||||
|                    '-r' \ | ||||
|                    '--remove' | ||||
| topiccmd=("$reply[@]") | ||||
|  | ||||
| _regex_words transfer '' \ | ||||
|                       '-h' \ | ||||
|                       '--help' | ||||
| transfercmd=("$reply[@]") | ||||
|  | ||||
|  | ||||
| _regex_words admin '' \ | ||||
|                    '-h:Help text' \ | ||||
|                    '--help:Help text' \ | ||||
|                    'maintainer:Manage repo maintainer:$maintainercmd' \ | ||||
|                    'query:Query maintainers and topics:$querycmd' \ | ||||
|                    'team:Manage repo team:$teamcmd' \ | ||||
|                    'topic:Manage topics:$topiccmd' \ | ||||
|                    'transfer:Transfer obsolete repositories to landfill:$transfercmd' | ||||
| admincmd=("$reply[@]") | ||||
|  | ||||
| _regex_words ci '' \ | ||||
|                 '-a' \ | ||||
|                 '--agent' \ | ||||
|                 '-h' \ | ||||
|                 '--help' | ||||
| cicmd=("$reply[@]") | ||||
|  | ||||
| _regex_words clone '' \ | ||||
|                    '-a' \ | ||||
|                    '--agent' \ | ||||
|                    '--all' \ | ||||
|                    '-h' \ | ||||
|                    '--help' \ | ||||
|                    '-j' \ | ||||
|                    '--jobs' \ | ||||
|                    '-m' \ | ||||
|                    '--maintainer' \ | ||||
|                    '--protocol' \ | ||||
|                    '-s' \ | ||||
|                    '--search' \ | ||||
|                    '-t' \ | ||||
|                    '--team' | ||||
| clonecmd=("$reply[@]") | ||||
|  | ||||
| _regex_words config '' \ | ||||
|                     '-h' \ | ||||
|                     '--help' \ | ||||
|                     '-j' \ | ||||
|                     '--jobs' \ | ||||
|                     '--protocol' | ||||
| configcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words create '' \ | ||||
|                     '-a' \ | ||||
|                     '--agent' \ | ||||
|                     '-c' \ | ||||
|                     '--create' \ | ||||
|                     '-h' \ | ||||
|                     '--help' \ | ||||
|                     '-t' \ | ||||
|                     '--team' | ||||
| createcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words pull '' \ | ||||
|                   '--all' \ | ||||
|                   '-h' \ | ||||
|                   '--help' \ | ||||
|                   '-j' \ | ||||
|                   '--jobs' \ | ||||
|                   '-m' \ | ||||
|                   '--maintainer' \ | ||||
|                   '-t' \ | ||||
|                   '--topic' | ||||
| pullcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words push '' \ | ||||
|                   '-h' \ | ||||
|                   '--help' \ | ||||
|                   '-j' \ | ||||
|                   '--jobs' \ | ||||
|                   '-m' \ | ||||
|                   '--maintainer' \ | ||||
|                   '-t' \ | ||||
|                   '--topic' | ||||
| pushcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words git '' \ | ||||
|                  'ci:Configure CI agent:$cicmd' \ | ||||
|                  'clone:Clone a package:$clonecmd' \ | ||||
|                  'config:Configure a clone:$configcmd' \ | ||||
|                  'create:Create a new gitea package repository:$createcmd' \ | ||||
|                  '-h:Help text' \ | ||||
|                  '--help:Help text' \ | ||||
|                  'pull:Pull a package repository:$pullcmd' \ | ||||
|                  'push:Push a package repository:$pushcmd' | ||||
| gitcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words add '' \ | ||||
|                  '-h' \ | ||||
|                  '--help' \ | ||||
|                  '-n' \ | ||||
|                  '--nocheck' \ | ||||
|                  '-p' \ | ||||
|                  '--push' \ | ||||
|                  '-r' \ | ||||
|                  '--rebuild' | ||||
| addcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words import '' \ | ||||
|                     '--del' \ | ||||
|                     '-h' \ | ||||
|                     '--help' \ | ||||
|                     '--tag' | ||||
| importcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words move '' \ | ||||
|                   '-h' \ | ||||
|                   '--help' \ | ||||
|                   '-p' \ | ||||
|                   '--push' | ||||
| movecmd=("$reply[@]") | ||||
|  | ||||
| _regex_words remove '' \ | ||||
|                     '-h' \ | ||||
|                     '--help' \ | ||||
|                     '-p' \ | ||||
|                     '--push' | ||||
| removecmd=("$reply[@]") | ||||
|  | ||||
| _regex_words show '' \ | ||||
|                   '-b' \ | ||||
|                   '--base' \ | ||||
|                   '-h' \ | ||||
|                   '--help' \ | ||||
|                   '-p' \ | ||||
|                   '--pkgs' | ||||
| showcmd=("$reply[@]") | ||||
|  | ||||
| _regex_words repo '' \ | ||||
|                   'add:Add pkgbase to repo:$addcmd' \ | ||||
|                   '-h:Help text' \ | ||||
|                   '--help:Help text' \ | ||||
|                   'import:Import latest tag from arch upstream:$importcmd' \ | ||||
|                   'move:Move pkgbase between repos:$movecmd' \ | ||||
|                   'remove:Remove pkgbase from repo:$removecmd' \ | ||||
|                   'show:Show pkgbase repo db:$showcmd' | ||||
| repocmd=("$reply[@]") | ||||
|  | ||||
| _regex_words version '' \ | ||||
|                      '-h' \ | ||||
|                      '--help' | ||||
| versioncmd=("$reply[@]") | ||||
|  | ||||
| _regex_words initial '' \ | ||||
|                      'admin:Manage topics:$admincmd' \ | ||||
|                      'git:Manage git:$gitcmd' \ | ||||
|                      '-h:Help text' \ | ||||
|                      '--help:Help text' \ | ||||
|                      'repo:Pacman database modification:$repocmd' \ | ||||
|                      'version:Show artixpkg version:$versioncmd' | ||||
| initialcmd=("$reply[@]") | ||||
|  | ||||
| _regex_arguments _artixpkg /$'[^\0]##\0'/ "${initialcmd[@]}" | ||||
| _artixpkg "$@" | ||||
| @@ -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} maintainer --adopt libfoo libbar | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| @@ -40,14 +48,7 @@ artixpkg_admin() { | ||||
|             artixpkg_admin_usage | ||||
|             exit 0 | ||||
|         ;; | ||||
|         transfer) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|             # shellcheck source=src/lib/pkg/admin/transfer.sh | ||||
|             source "${LIBDIR}"/pkg/admin/transfer.sh | ||||
|             artixpkg_admin_transfer "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|  | ||||
|         query) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
| @@ -56,6 +57,14 @@ artixpkg_admin() { | ||||
|             artixpkg_admin_query "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         team) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|             # shellcheck source=src/lib/pkg/admin/team.sh | ||||
|             source "${LIBDIR}"/pkg/admin/team.sh | ||||
|             artixpkg_admin_team "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         topic) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
| @@ -64,6 +73,22 @@ artixpkg_admin() { | ||||
|             artixpkg_admin_topic "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         transfer) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|             # shellcheck source=src/lib/pkg/admin/transfer.sh | ||||
|             source "${LIBDIR}"/pkg/admin/transfer.sh | ||||
|             artixpkg_admin_transfer "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         maintainer) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|             # shellcheck source=src/lib/pkg/admin/maintainer.sh | ||||
|             source "${LIBDIR}"/pkg/admin/maintainer.sh | ||||
|             artixpkg_admin_maintainer "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         -*) | ||||
|             die "invalid argument: %s" "$1" | ||||
|         ;; | ||||
|   | ||||
							
								
								
									
										139
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								src/lib/pkg/admin/maintainer.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| [[ -z ${ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH:-} ]] || return 0 | ||||
| ARTOOLS_INCLUDE_ADMIN_MAINTAINER_SH=1 | ||||
|  | ||||
|  | ||||
| set -e | ||||
|  | ||||
|  | ||||
| artixpkg_admin_maintainer_usage() { | ||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||
|     cat <<- _EOF_ | ||||
|     Usage: ${COMMAND} [OPTIONS] [PKGBASE]... | ||||
|  | ||||
|     OPTIONS | ||||
|         -a, --adopt            Adopt repo | ||||
|         -o, --orphan           Orphan repo | ||||
|         -h, --help             Show this help text | ||||
|  | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} --adopt libfoo | ||||
|         $ ${COMMAND} --orphan libfoo libbar | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| artixpkg_admin_maintainer() { | ||||
|     if (( $# < 1 )); then | ||||
|         artixpkg_admin_maintainer_usage | ||||
|         exit 0 | ||||
|     fi | ||||
|  | ||||
|     # options | ||||
|     local pkgbases=() | ||||
|     local pkgbase | ||||
|  | ||||
|     local ADOPT=0 | ||||
|     local ORPHAN=0 | ||||
|  | ||||
|     local packager_name | ||||
|     local maintainer | ||||
|  | ||||
|     local -r orphan="orphan" | ||||
|  | ||||
|  | ||||
|     local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||
|  | ||||
|     while (( $# )); do | ||||
|         case $1 in | ||||
|             -h|--help) | ||||
|                 artixpkg_admin_maintainer_usage | ||||
|                 exit 0 | ||||
|             ;; | ||||
|             -a|--adopt) | ||||
|                 ADOPT=1 | ||||
|                 RUNCMD+=" $1" | ||||
|                 shift | ||||
|             ;; | ||||
|             -o|--orphan) | ||||
|                 ORPHAN=1 | ||||
|                 RUNCMD+=" $1" | ||||
|                 shift | ||||
|             ;; | ||||
|             --) | ||||
|                 shift | ||||
|                 break | ||||
|             ;; | ||||
|             -*) | ||||
|                 die "invalid argument: %s" "$1" | ||||
|             ;; | ||||
|             *) | ||||
|                 break | ||||
|             ;; | ||||
|         esac | ||||
|     done | ||||
|  | ||||
|     pkgbases+=("$@") | ||||
|  | ||||
|     # shellcheck source=src/lib/pkg/packager.sh | ||||
|     source "${LIBDIR}"/pkg/packager.sh | ||||
|  | ||||
|     if [[ -n ${PACKAGER} ]]; then | ||||
|         if ! packager_name=$(get_packager_name "${PACKAGER}") || \ | ||||
|             ! packager_email=$(get_packager_email "${PACKAGER}"); then | ||||
|             die "invalid PACKAGER format '${PACKAGER}' in makepkg.conf" | ||||
|         fi | ||||
|         if ! is_packager_name_valid "${packager_name}"; then | ||||
|             die "invalid PACKAGER '${PACKAGER}' in makepkg.conf" | ||||
|         fi | ||||
|         if is_packager_email_official "${packager_email}"; then | ||||
|             maintainer="maintainer-${packager_name}" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|  | ||||
|     if [[ -n ${GIT_TOKEN} ]]; then | ||||
|  | ||||
|         # parallelization | ||||
|         if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then | ||||
|             # force colors in parallel if parent process is colorized | ||||
|             if [[ -n ${BOLD} ]]; then | ||||
|                 export ARTOOLS_COLOR=always | ||||
|             fi | ||||
|             if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${pkgbases[@]}"; then | ||||
|                 die 'Failed to manange some packages, please check the output' | ||||
|                 exit 1 | ||||
|             fi | ||||
|             exit 0 | ||||
|         fi | ||||
|  | ||||
|         for pkgbase in "${pkgbases[@]}"; do | ||||
|             local gitname | ||||
|             gitname=$(get_compliant_name "${pkgbase}") | ||||
|  | ||||
|             if (( ADOPT )); then | ||||
|                 if ! add_topic "${gitname}" "$maintainer"; then | ||||
|                     warning "failed to add topic: $maintainer" | ||||
|                 fi | ||||
|                 if ! remove_topic "${gitname}" "$orphan"; then | ||||
|                     warning "failed to remove topic: $orphan" | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|             if (( ORPHAN )); then | ||||
|                 if ! add_topic "${gitname}" "$orphan"; then | ||||
|                     warning "failed to add topic: $orphan" | ||||
|                 fi | ||||
|                 if ! remove_topic "${gitname}" "$maintainer"; then | ||||
|                     warning "failed to remove topic: $maintainer" | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|         done | ||||
|  | ||||
|     fi | ||||
| } | ||||
| @@ -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,63 @@ search_topic() { | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| list_repo_teams() { | ||||
|     local pkgbase="$1" | ||||
|     local url | ||||
|     url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams" | ||||
|  | ||||
|     stat_busy "List repo teams [$pkgbase]" | ||||
|     api_get "$url" \ | ||||
|         -H 'accept: application/json' \ | ||||
|         -H "Authorization: token ${GIT_TOKEN}" | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| check_repo_team() { | ||||
|     local pkgbase="$1" | ||||
|     local team="$2" | ||||
|     local url | ||||
|     url="${API_URL}/repos/${GIT_ORG}/$pkgbase/teams/$team" | ||||
|  | ||||
|     stat_busy "Check if team ($team) is assigned to [$pkgbase]" | ||||
|     api_get "$url" \ | ||||
|         -H 'accept: application/json' \ | ||||
|         -H "Authorization: token ${GIT_TOKEN}" | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| archive_repo() { | ||||
|     local pkgbase="$1" | ||||
|     local org="$2" | ||||
|     local url | ||||
|     local json | ||||
|     url="${API_URL}/repos/$org/$pkgbase" | ||||
|     json="{ \"archived\": true }" | ||||
|  | ||||
|     stat_busy "Archive repo [$pkgbase] in org ($org)" | ||||
|     api_patch "$url" \ | ||||
|         -H "accept: application/json" \ | ||||
|         -H "content-type: application/json" \ | ||||
|         -H "Authorization: token ${GIT_TOKEN}" \ | ||||
|         -d "$json" | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| remove_all_topics() { | ||||
|     local pkgbase="$1" | ||||
|     local org="$2" | ||||
|     local url | ||||
|     local json | ||||
|     url="${API_URL}/repos/$org/$pkgbase/topics" | ||||
|     json="{ \"topics\": [] }" | ||||
|  | ||||
|     stat_busy "Delete all topics from [$pkgbase]" | ||||
|     api_put "$url" \ | ||||
|         -H 'accept: application/json' \ | ||||
|         -H 'Content-Type: application/json' \ | ||||
|         -H "Authorization: token ${GIT_TOKEN}" \ | ||||
|         -d "$json" | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| #}}} | ||||
|   | ||||
| @@ -17,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}" | ||||
| } | ||||
|   | ||||
| @@ -18,6 +18,7 @@ artixpkg_git_usage() { | ||||
|         create         Create a new Gitea package repository | ||||
|         pull           Pull a package repository | ||||
|         push           Push a package repository | ||||
|         ci             Configure CI agent | ||||
|  | ||||
|     OPTIONS | ||||
|         -h, --help     Show this help text | ||||
| @@ -25,9 +26,10 @@ artixpkg_git_usage() { | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} clone libfoo linux libbar | ||||
|         $ ${COMMAND} clone --maintainer tux | ||||
|         $ ${COMMAND} config --topic mytopic | ||||
|         $ ${COMMAND} config --maintainer tux | ||||
|         $ ${COMMAND} clone --search mytopic | ||||
|         $ ${COMMAND} config libfoo | ||||
|         $ ${COMMAND} create -c libfoo | ||||
|         $ ${COMMAND} ci -a ${AGENTS[1]} libfoo | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| @@ -60,6 +62,14 @@ artixpkg_git() { | ||||
|             artixpkg_git_config "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         ci) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|             # shellcheck source=src/lib/pkg/git/ci.sh | ||||
|             source "${LIBDIR}"/pkg/git/ci.sh | ||||
|             artixpkg_git_ci "$@" | ||||
|             exit 0 | ||||
|         ;; | ||||
|         create) | ||||
|             _ARTOOLS_COMMAND+=" $1" | ||||
|             shift | ||||
|   | ||||
							
								
								
									
										132
									
								
								src/lib/pkg/git/ci.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								src/lib/pkg/git/ci.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,132 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| [[ -z ${ARTOOLS_INCLUDE_GIT_CI_SH:-} ]] || return 0 | ||||
| ARTOOLS_INCLUDE_GIT_CI_SH=1 | ||||
|  | ||||
| # shellcheck source=src/lib/pkg/db/db.sh | ||||
| source "${LIBDIR}"/pkg/db/db.sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
|  | ||||
| artixpkg_git_ci_usage() { | ||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||
|     cat <<- _EOF_ | ||||
|     Usage: ${COMMAND} [OPTIONS] [PKGBASE]... | ||||
|  | ||||
|     OPTIONS | ||||
|         -a, --agent NAME       Set the CI agent (default: ${AGENTS[0]}) | ||||
|                                Possible values: $(yaml_array ${AGENTS[@]}) | ||||
|         -h, --help             Show this help text | ||||
|  | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} --agent ${AGENTS[1]} libfoo | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
|  | ||||
| artixpkg_git_ci() { | ||||
|     # options | ||||
|     local paths=() | ||||
|  | ||||
|     local AGENT=${AGENTS[0]} | ||||
|     local SWITCH=0 | ||||
|     local CREATED=0 | ||||
|  | ||||
|     # variables | ||||
|     local path realpath pkgbase | ||||
|  | ||||
|     while (( $# )); do | ||||
|         case $1 in | ||||
|         -h|--help) | ||||
|             artixpkg_git_ci_usage | ||||
|             exit 0 | ||||
|         ;; | ||||
|         -a|--agent) | ||||
|             (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||
|             AGENT="$2" | ||||
|             SWITCH=1 | ||||
|             shift 2 | ||||
|         ;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|         ;; | ||||
|         -*) | ||||
|             die "invalid argument: %s" "$1" | ||||
|         ;; | ||||
|         *) | ||||
|             paths=("$@") | ||||
|             break | ||||
|         ;; | ||||
|         esac | ||||
|     done | ||||
|  | ||||
|     # check if invoked without any path from within a packaging repo | ||||
|     if (( ${#paths[@]} == 0 )); then | ||||
|         if [[ -f PKGBUILD ]]; then | ||||
|             paths=(".") | ||||
|         else | ||||
|             artixpkg_git_ci_usage | ||||
|             exit 1 | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     for path in "${paths[@]}"; do | ||||
|         if ! realpath=$(realpath -e "${path}"); then | ||||
|             error "No such directory: ${path}" | ||||
|             continue | ||||
|         fi | ||||
|  | ||||
|         pkgbase=$(basename "${realpath}") | ||||
|         pkgbase=${pkgbase%.git} | ||||
|  | ||||
|         if [[ ! -d "${path}/.git" ]]; then | ||||
|             error "Not a Git repository: ${path}" | ||||
|             continue | ||||
|         fi | ||||
|         ( cd "${path}" || return | ||||
|  | ||||
|             if [[ ! -f ${REPO_CI} ]]; then | ||||
|  | ||||
|                 [[ -d .artixlinux ]] || mkdir .artixlinux | ||||
|  | ||||
|                 msg "Adding ci support ..." | ||||
|                 write_jenkinsfile "${AGENT}" | ||||
|  | ||||
|                 git add "${REPO_CI}" | ||||
|                 git commit -m "add ci support" | ||||
|  | ||||
|                 CREATED=1 | ||||
|             fi | ||||
|  | ||||
|             if [[ ! -f ${REPO_DB} ]]; then | ||||
|  | ||||
|                 msg "Creating repo db ..." | ||||
|                 create_repo_db | ||||
|  | ||||
|                 if [[ -f PKGBUILD ]]; then | ||||
|                     # shellcheck source=contrib/makepkg/PKGBUILD.proto | ||||
|                     source PKGBUILD | ||||
|                     update_yaml_base | ||||
|                 fi | ||||
|                 git add "${REPO_DB}" | ||||
|                 git commit -m "create repo db" | ||||
|  | ||||
|             fi | ||||
|  | ||||
|             if (( SWITCH )); then | ||||
|                 msg "Switching to agent (${AGENT}) ..." | ||||
|                 write_jenkinsfile "${AGENT}" | ||||
|  | ||||
|                 if (( ! CREATED )); then | ||||
|                     git add "${REPO_CI}" | ||||
|                     git commit -m "switch agent" | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|         ) | ||||
|     done | ||||
| } | ||||
| @@ -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/git/ci.sh | ||||
| source "${LIBDIR}"/pkg/git/ci.sh | ||||
| # shellcheck source=src/lib/pkg/admin/team.sh | ||||
| source "${LIBDIR}"/pkg/admin/team.sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
| @@ -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_git_ci "${AGENT_OPTS[@]}" "${pkgbase}" | ||||
|         artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}" | ||||
|     done | ||||
| } | ||||
|   | ||||
| @@ -5,98 +5,24 @@ | ||||
| [[ -z ${ARTOOLS_INCLUDE_GIT_CONFIG_SH:-} ]] || return 0 | ||||
| ARTOOLS_INCLUDE_GIT_CONFIG_SH=1 | ||||
|  | ||||
| # shellcheck source=src/lib/pkg/db/db.sh | ||||
| source "${LIBDIR}"/pkg/db/db.sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
|  | ||||
| commit_ci(){ | ||||
|     [[ -d .artixlinux ]] || mkdir .artixlinux | ||||
|     if [[ ${AGENT} == "${ARTIX_DB[11]}" ]]; then | ||||
|         printf "@Library('artix-ci@%s') import org.artixlinux.RepoPackage\n" "${AGENT}" > "${REPO_CI}" | ||||
|     else | ||||
|         printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}" | ||||
|     fi | ||||
|     { | ||||
|         printf '\n' | ||||
|         printf 'PackagePipeline(new RepoPackage(this))\n' | ||||
|     } >> "${REPO_CI}" | ||||
|  | ||||
|     git add "${REPO_CI}" | ||||
|     git commit -m "initial ci commit" | ||||
| } | ||||
|  | ||||
| artixpkg_git_config_usage() { | ||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||
|     cat <<- _EOF_ | ||||
|     Usage: ${COMMAND} [OPTIONS] [PKGBASE]... | ||||
|  | ||||
|     OPTIONS | ||||
|         -m, --maintainer       Set the maintainer topic via gitea api | ||||
|         -d, --drop             Drop the maintainer topic via gitea api | ||||
|         -a, --agent NAME       Set the CI agent (default: official) | ||||
|                                Possible values: [official, galaxy] | ||||
|         --protocol https       Configure remote url to use https | ||||
|         -j, --jobs N           Run up to N jobs in parallel (default: $(nproc)) | ||||
|         -h, --help             Show this help text | ||||
|  | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} --maintainer libfoo | ||||
|         $ ${COMMAND} --agent galaxy libfoo | ||||
|         $ ${COMMAND} --drop libfoo | ||||
|         $ ${COMMAND} * | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| get_packager_name() { | ||||
|     local packager=$1 | ||||
|     local packager_pattern="(.+) <(.+@.+)>" | ||||
|     local name | ||||
|  | ||||
|     if [[ ! $packager =~ $packager_pattern ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     name=$(echo "${packager}"|sed -E "s/${packager_pattern}/\1/") | ||||
|     printf "%s" "${name}" | ||||
| } | ||||
|  | ||||
| get_packager_email() { | ||||
|     local packager=$1 | ||||
|     local packager_pattern="(.+) <(.+@.+)>" | ||||
|     local email | ||||
|  | ||||
|     if [[ ! $packager =~ $packager_pattern ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     email=$(echo "${packager}"|sed -E "s/${packager_pattern}/\2/") | ||||
|     printf "%s" "${email}" | ||||
| } | ||||
|  | ||||
| is_packager_name_valid() { | ||||
|     local packager_name=$1 | ||||
|     if [[ -z ${packager_name} ]]; then | ||||
|         return 1 | ||||
|     elif [[ ${packager_name} == "John Tux" ]]; then | ||||
|         return 1 | ||||
|     elif [[ ${packager_name} == "Unknown Packager" ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| is_packager_email_official() { | ||||
|     local packager_email=$1 | ||||
|     if [[ -z ${packager_email} ]]; then | ||||
|         return 1 | ||||
|     elif [[ $packager_email =~ .+@artixlinux.org ]]; then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| artixpkg_git_config() { | ||||
|     # options | ||||
|     local GIT_REPO_BASE_URL=${GIT_HTTPS} | ||||
| @@ -107,13 +33,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 +44,6 @@ artixpkg_git_config() { | ||||
|             artixpkg_git_config_usage | ||||
|             exit 0 | ||||
|         ;; | ||||
|         -m|--maintainer) | ||||
|             SET_TOPIC=1 | ||||
|             RUNCMD+=" -m" | ||||
|             shift | ||||
|         ;; | ||||
|         -d|--drop) | ||||
|             DROP_TOPIC=1 | ||||
|             RUNCMD+=" -d" | ||||
|             shift | ||||
|         ;; | ||||
|         -a|--agent) | ||||
|             (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||
|             AGENT="$2" | ||||
|             RUNCMD+=" -a ${AGENT}" | ||||
|             shift 2 | ||||
|         ;; | ||||
|         --agent=*) | ||||
|             AGENT="${1#*=}" | ||||
|             RUNCMD+=" -a ${AGENT}" | ||||
|             shift | ||||
|         ;; | ||||
|         --protocol=https) | ||||
|             proto_force=1 | ||||
|             shift | ||||
| @@ -188,8 +88,10 @@ artixpkg_git_config() { | ||||
|  | ||||
|     # Load makepkg.conf variables to be available for packager identity | ||||
|     msg "Collecting packager identity from makepkg.conf" | ||||
|     # shellcheck source=config/makepkg/x86_64.conf | ||||
|     load_makepkg_config | ||||
|  | ||||
|     # shellcheck source=src/lib/pkg/packager.sh | ||||
|     source "${LIBDIR}"/pkg/packager.sh | ||||
|  | ||||
|     if [[ -n ${PACKAGER} ]]; then | ||||
|         if ! packager_name=$(get_packager_name "${PACKAGER}") || \ | ||||
|             ! packager_email=$(get_packager_email "${PACKAGER}"); then | ||||
| @@ -221,7 +123,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 +166,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/git/ci.sh | ||||
| source "${LIBDIR}"/pkg/git/ci.sh | ||||
| # shellcheck source=src/lib/pkg/admin/team.sh | ||||
| source "${LIBDIR}"/pkg/admin/team.sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
| @@ -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_git_ci "${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,16 +14,14 @@ artixpkg_git_push_usage() { | ||||
|     Usage: ${COMMAND} [OPTIONS] [PKGBASE]... | ||||
|  | ||||
|     OPTIONS | ||||
|         -m, --maintainer=NAME      Push all packages of the named maintainer | ||||
|         -t, --topic=NAME           Push all packages of the named topic | ||||
|         -j, --jobs N               Run up to N jobs in parallel (default: $(nproc)) | ||||
|         -m, --maintainer NAME      Push all packages of the named maintainer | ||||
|         -t, --topic NAME           Push all packages of the named topic | ||||
|         -h, --help                 Show this help text | ||||
|  | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} libfoo linux libbar | ||||
|         $ ${COMMAND} --maintainer tux | ||||
|         $ ${COMMAND} --topic mytopic | ||||
|         $ ${COMMAND} -j 8 --topic mytopic | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| @@ -38,11 +36,6 @@ artixpkg_git_push() { | ||||
|     # options | ||||
|     local MAINTAINER= | ||||
|     local TOPIC= | ||||
|     local CONFIGURE_OPTIONS=() | ||||
|     local jobs= | ||||
|     jobs=$(nproc) | ||||
|  | ||||
|     local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||
|  | ||||
|     while (( $# )); do | ||||
|         case $1 in | ||||
| @@ -55,24 +48,11 @@ artixpkg_git_push() { | ||||
|                 MAINTAINER="$2" | ||||
|                 shift 2 | ||||
|             ;; | ||||
|             --maintainer=*) | ||||
|                 MAINTAINER="${1#*=}" | ||||
|                 shift | ||||
|             ;; | ||||
|             -t|--topic) | ||||
|                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||
|                 TOPIC="$2" | ||||
|                 shift 2 | ||||
|             ;; | ||||
|             --topic=*) | ||||
|                 TOPIC="${1#*=}" | ||||
|                 shift | ||||
|             ;; | ||||
|             -j|--jobs) | ||||
|                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||
|                 jobs=$2 | ||||
|                 shift 2 | ||||
|             ;; | ||||
|             --) | ||||
|                 shift | ||||
|                 break | ||||
| @@ -98,19 +78,6 @@ artixpkg_git_push() { | ||||
|         mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort) | ||||
|     fi | ||||
|  | ||||
|     # parallelization | ||||
|     if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then | ||||
|         # force colors in parallel if parent process is colorized | ||||
|         if [[ -n ${BOLD} ]]; then | ||||
|             export ARTOOLS_COLOR=always | ||||
|         fi | ||||
|         if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${pkgbases[@]}"; then | ||||
|             die 'Failed to push some packages, please check the output' | ||||
|             exit 1 | ||||
|         fi | ||||
|         exit 0 | ||||
|     fi | ||||
|  | ||||
|     for pkgbase in "${pkgbases[@]}"; do | ||||
|         if [[ -d ${pkgbase} ]]; then | ||||
|             ( cd "${pkgbase}" || return | ||||
|   | ||||
							
								
								
									
										54
									
								
								src/lib/pkg/packager.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/lib/pkg/packager.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| get_packager_name() { | ||||
|     local packager=$1 | ||||
|     local packager_pattern="(.+) <(.+@.+)>" | ||||
|     local name | ||||
|  | ||||
|     if [[ ! $packager =~ $packager_pattern ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     name=$(echo "${packager}"|sed -E "s/${packager_pattern}/\1/") | ||||
|     printf "%s" "${name}" | ||||
| } | ||||
|  | ||||
| get_packager_email() { | ||||
|     local packager=$1 | ||||
|     local packager_pattern="(.+) <(.+@.+)>" | ||||
|     local email | ||||
|  | ||||
|     if [[ ! $packager =~ $packager_pattern ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     email=$(echo "${packager}"|sed -E "s/${packager_pattern}/\2/") | ||||
|     printf "%s" "${email}" | ||||
| } | ||||
|  | ||||
| is_packager_name_valid() { | ||||
|     local packager_name=$1 | ||||
|     if [[ -z ${packager_name} ]]; then | ||||
|         return 1 | ||||
|     elif [[ ${packager_name} == "John Tux" ]]; then | ||||
|         return 1 | ||||
|     elif [[ ${packager_name} == "Unknown Packager" ]]; then | ||||
|         return 1 | ||||
|     fi | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| is_packager_email_official() { | ||||
|     local packager_email=$1 | ||||
|     if [[ -z ${packager_email} ]]; then | ||||
|         return 1 | ||||
|     elif [[ $packager_email =~ .+@artixlinux.org ]]; then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| # shellcheck source=config/makepkg/x86_64.conf | ||||
| load_makepkg_config | ||||
| @@ -11,6 +11,8 @@ source "${LIBDIR}"/pkg/db/db.sh | ||||
| set -e | ||||
|  | ||||
|  | ||||
| load_makepkg_config | ||||
|  | ||||
| has_remote_changes() { | ||||
|     local status | ||||
|     msg "Checking for remote changes ..." | ||||
| @@ -41,9 +43,12 @@ artixpkg_repo_usage() { | ||||
|         -h, --help     Show this help text | ||||
|  | ||||
|     EXAMPLES | ||||
|         $ ${COMMAND} add world libfoo | ||||
|         $ ${COMMAND} remove world libfoo | ||||
|         $ ${COMMAND} move world-gremlins world libfoo | ||||
|         $ ${COMMAND} add ${ARTIX_DB_MAP[2]} libfoo | ||||
|         $ ${COMMAND} remove ${ARTIX_DB_MAP[2]} libfoo | ||||
|         $ ${COMMAND} move ${ARTIX_DB_MAP[1]} ${ARTIX_DB_MAP[2]} libfoo | ||||
|         $ ${COMMAND} add ${ARTIX_DB[4]} libfoo | ||||
|         $ ${COMMAND} remove ${ARTIX_DB[4]} libfoo | ||||
|         $ ${COMMAND} move ${ARTIX_DB[3]} ${ARTIX_DB[4]} libfoo | ||||
|         $ ${COMMAND} import libfoo | ||||
|         $ ${COMMAND} show libfoo | ||||
| _EOF_ | ||||
|   | ||||
| @@ -38,14 +38,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' | ||||
|   | ||||
| @@ -7,22 +7,61 @@ ARTOOLS_INCLUDE_REPO_IMPORT_SH=1 | ||||
|  | ||||
| set -e | ||||
|  | ||||
| PATCHDIR=${PATCHDIR:-"${WORKSPACE_DIR}/artix-patches"} | ||||
|  | ||||
| declare -A arch_map=( | ||||
|     ["archlinux-mirrorlist"]="pacman-mirrorlist" | ||||
|     ["artix-rebuild-order"]="arch-rebuild-order" | ||||
|     ["virtualbox-host-modules-artix"]="virtualbox-host-modules-arch" | ||||
| ) | ||||
|  | ||||
| update_patches(){ | ||||
|     if [[ ! -d "${PATCHDIR}" ]]; then | ||||
|         # ${GIT_ORG} | ||||
|         if ! git clone "${PATCH_URL}" "${PATCHDIR}"; then | ||||
|             error "failed to clone %s" "${PATCHDIR}" | ||||
|         fi | ||||
|     else | ||||
|         if ! git -C "${PATCHDIR}" pull; then | ||||
|            error "Failed to pull artix-patches" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| patch_pkgbase(){ | ||||
|     local name="$1" | ||||
|     case "${name}" in | ||||
|         linux|linux-lts|linux-zen|linux-hardened|linux-rt*) | ||||
|             sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i PKGBUILD | ||||
|             sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \ | ||||
|                 -i config | ||||
|         ;; | ||||
|         *) | ||||
|             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \ | ||||
|                 -e 's|(Arch Linux)|(Artix Linux)|' \ | ||||
|                 -e 's|arch-meson|artix-meson|' \ | ||||
|                 -i PKGBUILD | ||||
|         ;; | ||||
|     esac | ||||
|     local patches="${PATCHDIR}/patches/${name}" | ||||
|     sed -e 's|arch-meson|artix-meson|' -i PKGBUILD | ||||
|  | ||||
|     if "${PATCH_MAINTAINER}" && [ -n "${PACKAGER}" ]; then | ||||
|         sed -e 's|# Maintainer:|# Contributor:|' -i PKGBUILD | ||||
|         printf '%s\n%s\n' "# Maintainer: ${PACKAGER}" "$(cat "PKGBUILD")" >"PKGBUILD" | ||||
|     fi | ||||
|  | ||||
|     if [ -d "${patches}" ]; then | ||||
|         if [ -f "${patches}/env.txt" ]; then | ||||
|             while read -r line; do | ||||
|                 IFS="=" read -r key value <<< "$line" | ||||
|                 if [[ -z "${key}" ]] || [[ -z "${value}" ]]; then | ||||
|                     die "Invalid key value pair in env.txt" | ||||
|                 fi | ||||
|                 if declare -p "${key}" &> /dev/null; then | ||||
|                     die "Environment variable %s already exists." "${key}" | ||||
|                 fi | ||||
|                 export "${key}=${value}" | ||||
|             done < "${patches}/env.txt" | ||||
|         fi | ||||
|         for file in "${patches}"/*; do | ||||
|             if [ -x "${file}" ]; then | ||||
|                 echo "$> ${name}/$(basename "${file}")" | ||||
|                 "${file}" "${TREE_DIR_ARTIX}/${name}" | ||||
|             elif [[ "${file}" == *.diff ]]; then | ||||
|                 echo "$> git apply ${name}/$(basename "${file}")" | ||||
|                 git -C "${TREE_DIR_ARTIX}/${name}" apply "${file}" | ||||
|             fi | ||||
|         done | ||||
|     fi | ||||
|  | ||||
|     git --no-pager diff PKGBUILD | ||||
| } | ||||
|  | ||||
| @@ -96,6 +135,8 @@ artixpkg_repo_import() { | ||||
|         esac | ||||
|     done | ||||
|  | ||||
|     update_patches | ||||
|  | ||||
|     pkgbases+=("$@") | ||||
|  | ||||
|     for pkgbase in "${pkgbases[@]}"; do | ||||
| @@ -108,9 +149,11 @@ artixpkg_repo_import() { | ||||
|             fi | ||||
|             ( cd "${pkgbase}" || return | ||||
|  | ||||
|                 upstream="${arch_map["$pkgbase"]:-$pkgbase}" | ||||
|  | ||||
|                 stat_busy "Checking for upstream url" | ||||
|                 if ! git config --local --get remote.upstream.url &>/dev/null; then | ||||
|                     git remote add upstream "${GIT_UPSTREAM_URL}/${pkgbase}".git | ||||
|                     git remote add upstream "${GIT_UPSTREAM_URL}/${upstream}".git | ||||
|                 fi | ||||
|                 stat_done | ||||
|  | ||||
|   | ||||
| @@ -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,14 @@ load_pkg_config(){ | ||||
|  | ||||
|     DBEXT=${DBEXT:-'gz'} | ||||
|  | ||||
|     PATCH_MAINTAINER=${PATCH_MAINTAINER:-false} | ||||
|  | ||||
|     PATCH_URL=${PATCH_URL:-"${GIT_SSH}:artix/artix-patches.git"} | ||||
|  | ||||
|     if [[ -z "${AGENTS[*]}" ]]; then | ||||
|         AGENTS=(orion taurus) | ||||
|     fi | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -20,9 +20,10 @@ usage() { | ||||
|     Usage: ${COMMAND} [COMMAND] [OPTIONS] | ||||
|  | ||||
|     COMMANDS | ||||
|         repo      Pacman database modification for packge update, move etc | ||||
|         admin     Manage topics, teams and obsolete repos | ||||
|         git       Manage Git packaging repositories and their configuration | ||||
|         admin     Managegement of topics and obsolete repos | ||||
|         repo      Pacman database modification for package updates, moves, etc. | ||||
|  | ||||
|         version   Show artixpkg version information | ||||
|  | ||||
|     OPTIONS | ||||
| @@ -40,8 +41,6 @@ export _ARTOOLS_COMMAND='artixpkg' | ||||
| # shellcheck source=src/lib/pkg/util.sh | ||||
| source "${LIBDIR}"/pkg/util.sh | ||||
|  | ||||
| load_makepkg_config | ||||
|  | ||||
| cd "${TREE_DIR_ARTIX}" | ||||
|  | ||||
| # command checking | ||||
|   | ||||
| @@ -32,6 +32,8 @@ usage() { | ||||
|     printf '                       [default: %s]\n' "${repo}" | ||||
|     printf '    -a <arch>          Build arch chroot\n' | ||||
|     printf '                       [default: %s]\n' "${arch}" | ||||
|     printf '    -e <name>          Export PACKAGER\n' | ||||
|     printf "                       format: 'John Doe <john@doe.com>'\n" | ||||
|     printf '    -c                 Recreate the chroot before building\n' | ||||
|     printf '    -m                 Major rebuild\n' | ||||
|     printf '    -N                 Disable check() function\n' | ||||
| @@ -44,13 +46,14 @@ usage() { | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| opts='hcCNmnr:d:a:' | ||||
| opts='hcCNmnr:d:a:e:' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         r) chroots_pkg="$OPTARG" ;; | ||||
|         d) repo="$OPTARG" ;; | ||||
|         a) arch="$OPTARG" ;; | ||||
|         e) packager="$OPTARG" ;; | ||||
|         c) create_first=true ;; | ||||
|         m) rebuild=true ;; | ||||
|         C) mkchrootpkg_args+=(-C) ;; | ||||
| @@ -90,6 +93,10 @@ else | ||||
|     set_arch="${arch}" | ||||
| fi | ||||
|  | ||||
| if [[ -n "${packager}" ]]; then | ||||
|     export PACKAGER=${packager} | ||||
| fi | ||||
|  | ||||
| # Architecture-specific Mount | ||||
| arch_mounts=() | ||||
| if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then | ||||
|   | ||||
| @@ -9,8 +9,6 @@ source "${LIBDIR}"/base/message.sh | ||||
| # shellcheck source=src/lib/pkg/diff.sh | ||||
| source "${LIBDIR}"/pkg/diff.sh | ||||
|  | ||||
| load_makepkg_config | ||||
|  | ||||
| usage() { | ||||
|     cat <<- _EOF_ | ||||
|         Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] | ||||
|   | ||||
| @@ -181,7 +181,9 @@ else | ||||
|     set_arch="${CARCH}" | ||||
| fi | ||||
|  | ||||
| ${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "$@" | ||||
| chroot_args=(/usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/bin) | ||||
|  | ||||
| ${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "${chroot_args[@]}" "$@" | ||||
|  | ||||
| ret=$? | ||||
|  | ||||
|   | ||||
							
								
								
									
										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" | ||||
| @@ -20,6 +20,7 @@ add() { | ||||
|         msg "Found: %s" "${pkgfile}" | ||||
|         packages+=("${pkgname}") | ||||
|         action='add' | ||||
|         action_args+=(--include-sigs) | ||||
|         ln -sfv "${pkgfile}"{,.sig} "${repo_path}"/ | ||||
|     fi | ||||
| } | ||||
| @@ -41,7 +42,7 @@ repo_action() { | ||||
|     done | ||||
|     ( cd "${repo_path}" || return | ||||
|         if [[ -n "${action}" ]]; then | ||||
|             repo-"${action}" -R "${dest_repo}.${db_ext}" "${packages[@]}" | ||||
|             repo-"${action}" "${action_args[@]}" "${dest_repo}.${db_ext}" "${packages[@]}" | ||||
|         fi | ||||
|     ) | ||||
| } | ||||
| @@ -57,6 +58,7 @@ rm_pkg=false | ||||
|  | ||||
| cmd=${0##*/} | ||||
| dest_repo=${cmd#*-} | ||||
| action_args=(-R) | ||||
|  | ||||
| usage() { | ||||
|     printf "Usage: %s [options]\n" "${cmd}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user