Compare commits
	
		
			4 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e415aa67b9 | |||
| b2512ffe68 | |||
| 1d8b7e83dc | |||
| 
						
						
							
						
						e237afd788
	
				 | 
					
					
						
							
								
								
									
										8
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ run-name: ${{ gitea.actor }}
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - artools/0.32.x
 | 
			
		||||
      - artools/0.33.x
 | 
			
		||||
      - master
 | 
			
		||||
    tags:
 | 
			
		||||
      - 0.*
 | 
			
		||||
@@ -16,13 +16,15 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: checkout repo
 | 
			
		||||
        uses: actions/checkout@main
 | 
			
		||||
      - name: build artools
 | 
			
		||||
      - name: build
 | 
			
		||||
        run: make
 | 
			
		||||
      - name: shellcheck artools
 | 
			
		||||
      - name: shellcheck
 | 
			
		||||
        uses: ludeeus/action-shellcheck@master
 | 
			
		||||
        env:
 | 
			
		||||
          SHELLCHECK_OPTS: -x -e SC2034
 | 
			
		||||
        with:
 | 
			
		||||
          scandir: './build/bin'
 | 
			
		||||
          format: tty
 | 
			
		||||
          severity: error
 | 
			
		||||
          additional_files: 'contrib/completion/bash/artools'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
SHELL=/bin/bash
 | 
			
		||||
 | 
			
		||||
V=0.32
 | 
			
		||||
V=0.33
 | 
			
		||||
BUILDTOOLVER ?= $(V)
 | 
			
		||||
 | 
			
		||||
CHROOTVER=0.12
 | 
			
		||||
@@ -35,13 +35,16 @@ SETARCH_ALIASES = $(wildcard config/setarch-aliases.d/*)
 | 
			
		||||
TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*)
 | 
			
		||||
TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*)
 | 
			
		||||
 | 
			
		||||
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso
 | 
			
		||||
COMPLETIONS = $(addprefix $(BUILDDIR)/,$(patsubst %.in,%,$(wildcard contrib/completion/*/*)))
 | 
			
		||||
 | 
			
		||||
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso completion
 | 
			
		||||
binprogs_base: $(BINPROGS_BASE)
 | 
			
		||||
binprogs_pkg: $(BINPROGS_PKG)
 | 
			
		||||
binprogs_iso: $(BINPROGS_ISO)
 | 
			
		||||
library_base: $(LIBRARY_BASE)
 | 
			
		||||
library_pkg: $(LIBRARY_PKG)
 | 
			
		||||
library_iso: $(LIBRARY_ISO)
 | 
			
		||||
completion: $(COMPLETIONS)
 | 
			
		||||
 | 
			
		||||
edit = sed -e "s|@datadir[@]|$(DATADIR)|g" \
 | 
			
		||||
	-e "s|@libdir[@]|$(LIBDIR)|g" \
 | 
			
		||||
@@ -69,6 +72,8 @@ $(eval $(call buildInScript,build/bin,src/pkg/,.in,755))
 | 
			
		||||
$(eval $(call buildInScript,build/bin,src/iso/,.in,755))
 | 
			
		||||
$(eval $(call buildInScript,build/lib,src/lib/,,644))
 | 
			
		||||
 | 
			
		||||
$(foreach completion,$(wildcard contrib/completion/*),$(eval $(call buildInScript,build/$(completion),$(completion)/,.in,444)))
 | 
			
		||||
 | 
			
		||||
conf_base:
 | 
			
		||||
	@install -d $(BUILDDIR)/pacman.conf.d $(BUILDDIR)/artools
 | 
			
		||||
	@cp -a $(PACMAN_CONFIGS) $(BUILDDIR)/pacman.conf.d
 | 
			
		||||
@@ -110,6 +115,8 @@ install_pkg: binprogs_pkg
 | 
			
		||||
	for a in $(SETARCH_ALIASES); do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done
 | 
			
		||||
	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
 | 
			
		||||
 | 
			
		||||
	install -Dm0644 $(BUILDDIR)/contrib/completion/bash/$(TOOLS) $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$(TOOLS)
 | 
			
		||||
 | 
			
		||||
install_iso: binprogs_iso
 | 
			
		||||
	install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
 | 
			
		||||
	install -dm0755 $(DESTDIR)$(PREFIX)/bin
 | 
			
		||||
@@ -144,5 +151,5 @@ dist:
 | 
			
		||||
check: $(BINPROGS_SRC_BASE) $(BINPROGS_SRC_PKG) $(BINPROGS_SRC_ISO) config/makepkg/x86_64.conf contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
	shellcheck -x $^
 | 
			
		||||
 | 
			
		||||
.PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check
 | 
			
		||||
.PHONY: all binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso clean install install_base install_pkg install_iso uninstall dist check contrib
 | 
			
		||||
.DELETE_ON_ERROR:
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
 | 
			
		||||
 | 
			
		||||
#-- The package required by makepkg to download VCS sources
 | 
			
		||||
#  Format: 'protocol::package'
 | 
			
		||||
VCSCLIENTS=('bzr::bzr'
 | 
			
		||||
VCSCLIENTS=('bzr::breezy'
 | 
			
		||||
            'fossil::fossil'
 | 
			
		||||
            'git::git'
 | 
			
		||||
            'hg::mercurial'
 | 
			
		||||
@@ -41,7 +41,7 @@ CHOST="x86_64-pc-linux-gnu"
 | 
			
		||||
#-- Compiler and Linker Flags
 | 
			
		||||
#CPPFLAGS=""
 | 
			
		||||
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
 | 
			
		||||
        -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
 | 
			
		||||
        -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
 | 
			
		||||
        -fstack-clash-protection -fcf-protection"
 | 
			
		||||
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
 | 
			
		||||
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										328
									
								
								contrib/completion/bash/artools.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										328
									
								
								contrib/completion/bash/artools.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,328 @@
 | 
			
		||||
#/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
_artixpkg_pkgbase() {
 | 
			
		||||
    local LIBDIR
 | 
			
		||||
    LIBDIR=${LIBDIR:-'/usr/share/artools/lib'}
 | 
			
		||||
    source "${LIBDIR}"/pkg/git/config.sh
 | 
			
		||||
    source "${LIBDIR}"/pkg/util.sh
 | 
			
		||||
    ls -1 "${TREE_DIR_ARTIX}" | tr '\n' ' '
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_artixpkg_completion() {
 | 
			
		||||
    local cur prev comps comps_all repos autorepos teams agents ARTIX_DB ARTIX_TEAMS AGENTS ARTIX_DB_MAP cwords comp_cword_exflag
 | 
			
		||||
 | 
			
		||||
    # TODO: get list, from /src/lib/pkg/db/db.sh?
 | 
			
		||||
    ARTIX_DB=(
 | 
			
		||||
        system-goblins
 | 
			
		||||
        system-gremlins
 | 
			
		||||
        system
 | 
			
		||||
        world-goblins
 | 
			
		||||
        world-gremlins
 | 
			
		||||
        world
 | 
			
		||||
        lib32-goblins
 | 
			
		||||
        lib32-gremlins
 | 
			
		||||
        lib32
 | 
			
		||||
        galaxy-goblins
 | 
			
		||||
        galaxy-gremlins
 | 
			
		||||
        galaxy
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # TODO: get from db.sh
 | 
			
		||||
    ARTIX_TEAMS=(
 | 
			
		||||
        "${ARTIX_DB[2]}"
 | 
			
		||||
        "${ARTIX_DB[5]}"
 | 
			
		||||
        "${ARTIX_DB[8]}"
 | 
			
		||||
        "${ARTIX_DB[11]}"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # TODO: get from db.sh
 | 
			
		||||
    AGENTS=(
 | 
			
		||||
        orion
 | 
			
		||||
        taurus
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # TODO: get from db.sh
 | 
			
		||||
    ARTIX_DB_MAP=(
 | 
			
		||||
        goblins
 | 
			
		||||
        gremlins
 | 
			
		||||
        stable
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    for ((i = 0; i < ${#COMP_WORDS[@]} - 1; i++)); do
 | 
			
		||||
        word="${COMP_WORDS[i]}"
 | 
			
		||||
        comps_all+=" $word"
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            comps+=" $word"
 | 
			
		||||
            ((comp_cword_exflag++))
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    comps="${comps:1}"
 | 
			
		||||
    comps_all="${comps_all:1}"
 | 
			
		||||
 | 
			
		||||
    repos=""
 | 
			
		||||
    for word in "${ARTIX_DB[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            repos+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    repos="${repos:1}"
 | 
			
		||||
    autorepos=""
 | 
			
		||||
    for word in "${ARTIX_DB_MAP[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            autorepos+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    autorepos="${autorepos:1}"
 | 
			
		||||
    teams=""
 | 
			
		||||
    for word in "${ARTIX_TEAMS[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            teams+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    teams="${teams:1}"
 | 
			
		||||
    agents=""
 | 
			
		||||
    for word in "${AGENTS[@]}"; do
 | 
			
		||||
        if [[ $word != -* ]]; then
 | 
			
		||||
            agents+=" $word"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
    agents="${agents:1}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    case "${comp_cword_exflag}" in
 | 
			
		||||
        1)
 | 
			
		||||
            COMPREPLY=($(compgen -W "admin ci git repo version -h --help" -- "${cur}"))
 | 
			
		||||
            return 0
 | 
			
		||||
            ;;
 | 
			
		||||
        2)
 | 
			
		||||
            case ${prev} in
 | 
			
		||||
                admin)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "query team topic transfer -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                ci)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "config -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                git)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "clone config create pull push -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                repo)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "add remove move import show -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                version)
 | 
			
		||||
                    COMPREPLY=($(compgen -W "-h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
            esac
 | 
			
		||||
            ;;  
 | 
			
		||||
        *)
 | 
			
		||||
            case "${comps}" in
 | 
			
		||||
                "artixpkg repo add"*)
 | 
			
		||||
                    local repoAddCommon="-p --push -r --rebuild -n --nocheck -h --help"
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3)
 | 
			
		||||
                            case "${comps_all}" in
 | 
			
		||||
                                *-m*|*--manual*)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "$repoAddCommon $repos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                                *)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-m --manual $repoAddCommon $autorepos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                            esac
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$repoAddCommon $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo remove"*)
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3)
 | 
			
		||||
                            case "${comps_all}" in
 | 
			
		||||
                                *-m*|*--manual*)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-p --push -h --help $autorepos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                                *)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-m --manual -p --push -h --help $repos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                            esac
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo move"*)
 | 
			
		||||
                    case "${comp_cword_exflag}" in
 | 
			
		||||
                        3|4)
 | 
			
		||||
                            case "${comps_all}" in
 | 
			
		||||
                                *-m*|*--manual*)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-p --push -h --help $autorepos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                                *)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-m --manual -p --push -h --help $repos" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                            esac
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-p --push -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo import"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "--tag")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "--del -h --help --tag $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg repo show")
 | 
			
		||||
                    COMPREPLY=($(compgen -W "-b --base -p --pkgs -h --help" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git clone"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "--protocol")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "https" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-t"|"--team")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-m"|"--maintainer"|"-s"|"--search"|"-t"|"--team"|"-j"|"--jobs")
 | 
			
		||||
                            # these flags expect a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer --protocol -s --search -t --team -a --agent -j --jobs --all -h --help" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git config"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "--protocol")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "https" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-j"|"--jobs")
 | 
			
		||||
                            # these flags expect a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "--protocol -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git create"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-t"|"--team")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-c --clone -a --agent -t --team -h --help" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git pull"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-t"|"--topic"|"-m"|"--maintainer"|"-j"|"--jobs")
 | 
			
		||||
                            # these flags expect a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            case "${comps_all}" in
 | 
			
		||||
                                *--all*)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                                *)
 | 
			
		||||
                                    COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs --all -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                                    ;;
 | 
			
		||||
                            esac
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg git push"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-m"|"--maintainer"|"-t"|"--topic"|"-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer -t --topic -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg ci config"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        "-a"|"--agent")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$agents" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --agent -s --switch -j --jobs -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin query"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-m"|"--maintainer"|"-t"|"--topic")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-m --maintainer -t --topic -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin team"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--add"|"-r"|"--remove")
 | 
			
		||||
                            COMPREPLY=($(compgen -W "$teams" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --add -c --check -l --list -r --remove -h --help $(_artixpkg_pkgbase)" -- ${cur}))
 | 
			
		||||
                            ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                    ;;
 | 
			
		||||
                "artixpkg admin topic"*)
 | 
			
		||||
                    case "${prev}" in
 | 
			
		||||
                        "-a"|"--add"|"-d"|"--del"|"-j"|"--jobs")
 | 
			
		||||
                            # this flag expects a parameter
 | 
			
		||||
                            COMPREPLY=()
 | 
			
		||||
                            ;;
 | 
			
		||||
                        *)
 | 
			
		||||
                            COMPREPLY=($(compgen -W "-a --add -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
 | 
			
		||||
@@ -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,9 +17,10 @@ artixpkg_admin_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        transfer          Transfer obsolete repository to landfill
 | 
			
		||||
        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
 | 
			
		||||
@@ -40,14 +45,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 +54,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 +70,14 @@ 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
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
 
 | 
			
		||||
@@ -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,10 +14,10 @@ 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
 | 
			
		||||
        -d, --del NAME             Delete a topic 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
 | 
			
		||||
@@ -57,12 +57,6 @@ artixpkg_admin_topic() {
 | 
			
		||||
                RUNCMD+=" -a ${ADD_TOPIC}"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --add=*)
 | 
			
		||||
                ADD_TOPIC="${1#*=}"
 | 
			
		||||
                ADD=1
 | 
			
		||||
                RUNCMD+=" --add=${ADD_TOPIC}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -d|--del)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                DEL_TOPIC="$2"
 | 
			
		||||
@@ -70,12 +64,6 @@ artixpkg_admin_topic() {
 | 
			
		||||
                RUNCMD+=" -d ${DEL_TOPIC}"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --del=*)
 | 
			
		||||
                DEL_TOPIC="${1#*=}"
 | 
			
		||||
                DEL=1
 | 
			
		||||
                RUNCMD+=" --del=${DEL_TOPIC}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_admin_topic_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
@@ -115,19 +103,17 @@ 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}"
 | 
			
		||||
                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}"
 | 
			
		||||
                fi
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,10 @@ 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}" "${waste_org}"
 | 
			
		||||
        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})"
 | 
			
		||||
@@ -79,7 +79,7 @@ transfer_repo() {
 | 
			
		||||
    local new_owner="$2"
 | 
			
		||||
    local json url
 | 
			
		||||
    json="{ \"new_owner\": \"$new_owner\",  \"team_ids\": [] }"
 | 
			
		||||
    url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/transfer"
 | 
			
		||||
    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,29 @@ 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								src/lib/pkg/ci.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/lib/pkg/ci.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_CI_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_CI_SH=1
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        config         Configure ci and build agent
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} config libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_ci() {
 | 
			
		||||
    if (( $# < 1 )); then
 | 
			
		||||
        artixpkg_ci_usage
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # option checking
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            artixpkg_ci_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        config)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/ci/config.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
            artixpkg_ci_config "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            die "invalid command: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										162
									
								
								src/lib/pkg/ci/config.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								src/lib/pkg/ci/config.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_CI_CONFIG_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_CI_CONFIG_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_config_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -a, --agent NAME       Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                               Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -s, --switch           Switch agent
 | 
			
		||||
        -j, --jobs N           Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} --agent ${AGENTS[1]} libfoo
 | 
			
		||||
        $ ${COMMAND} --switch --agent ${AGENTS[1]} libfoo
 | 
			
		||||
        $ ${COMMAND} *
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
artixpkg_ci_config() {
 | 
			
		||||
    # options
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
    local paths=()
 | 
			
		||||
 | 
			
		||||
    local AGENT=${AGENTS[0]}
 | 
			
		||||
    local SWITCH=0
 | 
			
		||||
 | 
			
		||||
    # variables
 | 
			
		||||
    local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    local path realpath pkgbase
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            artixpkg_ci_config_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -s|--switch)
 | 
			
		||||
            SWITCH=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT="$2"
 | 
			
		||||
            RUNCMD+=" $1 ${AGENT}"
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        -j|--jobs)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            jobs=$2
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --)
 | 
			
		||||
            shift
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            paths=("$@")
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # check if invoked without any path from within a packaging repo
 | 
			
		||||
    if (( ${#paths[@]} == 0 )); then
 | 
			
		||||
        if [[ -f PKGBUILD ]]; then
 | 
			
		||||
            paths=(".")
 | 
			
		||||
        else
 | 
			
		||||
            artixpkg_ci_config_usage
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # parallelization
 | 
			
		||||
    if [[ ${jobs} != 1 ]] && (( ${#paths[@]} > 1 )); then
 | 
			
		||||
        if [[ -n ${BOLD} ]]; then
 | 
			
		||||
            export ARTOOLS_COLOR=always
 | 
			
		||||
        fi
 | 
			
		||||
        if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${paths[@]}"; then
 | 
			
		||||
            die 'Failed to configure some packages, please check the output'
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for path in "${paths[@]}"; do
 | 
			
		||||
        if ! realpath=$(realpath -e "${path}"); then
 | 
			
		||||
            error "No such directory: ${path}"
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        pkgbase=$(basename "${realpath}")
 | 
			
		||||
        pkgbase=${pkgbase%.git}
 | 
			
		||||
 | 
			
		||||
        if [[ ! -d "${path}/.git" ]]; then
 | 
			
		||||
            error "Not a Git repository: ${path}"
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
        ( cd "${path}" || return
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_CI} ]]; then
 | 
			
		||||
 | 
			
		||||
                [[ -d .artixlinux ]] || mkdir .artixlinux
 | 
			
		||||
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                git add "${REPO_CI}"
 | 
			
		||||
                git commit -m "add ci support"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
 | 
			
		||||
                msg "Creating repo db ..."
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
                    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
                    source PKGBUILD
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                fi
 | 
			
		||||
                git add "${REPO_DB}"
 | 
			
		||||
                git commit -m "create repo db"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if (( SWITCH )); then
 | 
			
		||||
                msg "Switching to agent (${AGENT}) ..."
 | 
			
		||||
                write_jenkinsfile "${AGENT}"
 | 
			
		||||
 | 
			
		||||
                git add "${REPO_CI}"
 | 
			
		||||
                git commit -m "switch agent"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
        )
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
@@ -17,6 +17,24 @@ 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 AGENTS=(
 | 
			
		||||
    orion
 | 
			
		||||
    taurus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
readonly REPO_DB='.artixlinux/pkgbase.yaml'
 | 
			
		||||
 | 
			
		||||
readonly REPO_CI='.artixlinux/Jenkinsfile'
 | 
			
		||||
@@ -100,6 +118,8 @@ create_repo_db() {
 | 
			
		||||
 | 
			
		||||
    yq -n '"---"' > "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P '.team = null' -i "${REPO_DB}"
 | 
			
		||||
 | 
			
		||||
    yq -P 'with(
 | 
			
		||||
        .pkgbase;
 | 
			
		||||
            .name = null |
 | 
			
		||||
@@ -132,6 +152,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 +318,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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,10 @@ ARTOOLS_INCLUDE_GIT_CLONE_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/git/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/git/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/ci/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -17,21 +21,23 @@ artixpkg_git_clone_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME      Clone all packages of the named maintainer
 | 
			
		||||
        --protocol https           Clone the repository over https
 | 
			
		||||
        -t, --topic=NAME           Clone all packages of the named topic
 | 
			
		||||
        -a, --agent=NAME           Set the CI agent (default: official)
 | 
			
		||||
                                   Possible values: [official, galaxy]
 | 
			
		||||
        -m, --maintainer NAME      Clone all packages of the named maintainer
 | 
			
		||||
        -s, --search TOPIC         Clone all packages of the named topic
 | 
			
		||||
        -a, --agent NAME           Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                                   Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -t, --team NAME            Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                                   Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --protocol https           Clone the repository over https
 | 
			
		||||
        --all                      Clone all existing packages, useful for cache warming
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --topic mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic mytopic
 | 
			
		||||
        $ ${COMMAND} --agent galaxy libfoo
 | 
			
		||||
        $ ${COMMAND} --search mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --search mytopic
 | 
			
		||||
        $ ${COMMAND} --agent ${AGENTS[1]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +54,9 @@ artixpkg_git_clone() {
 | 
			
		||||
    local CLONE_ALL=0
 | 
			
		||||
    local MAINTAINER=
 | 
			
		||||
    local TOPIC=
 | 
			
		||||
    local CONFIGURE_OPTIONS=()
 | 
			
		||||
    local CONFIG_OPTS=()
 | 
			
		||||
    local AGENT_OPTS=()
 | 
			
		||||
    local TEAM_OPTS=()
 | 
			
		||||
    local jobs=
 | 
			
		||||
    jobs=$(nproc)
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +70,7 @@ artixpkg_git_clone() {
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol=https)
 | 
			
		||||
                GIT_REPO_BASE_URL="${GIT_HTTPS}/"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1")
 | 
			
		||||
                CONFIG_OPTS+=("$1")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --protocol)
 | 
			
		||||
@@ -72,7 +80,7 @@ artixpkg_git_clone() {
 | 
			
		||||
                else
 | 
			
		||||
                    die "unsupported protocol: %s" "$2"
 | 
			
		||||
                fi
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                CONFIG_OPTS+=("$1" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -m|--maintainer)
 | 
			
		||||
@@ -80,28 +88,21 @@ artixpkg_git_clone() {
 | 
			
		||||
                MAINTAINER="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --maintainer=*)
 | 
			
		||||
                MAINTAINER="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -t|--topic)
 | 
			
		||||
            -s|--search)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TOPIC="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --topic=*)
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            -t|--team)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TEAM_OPTS=("--add" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                AGENT_OPTS=("$1" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --agent=*)
 | 
			
		||||
                CONFIGURE_OPTIONS+=("${1}")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --all)
 | 
			
		||||
                CLONE_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -167,6 +168,8 @@ artixpkg_git_clone() {
 | 
			
		||||
            warning "Skip cloning ${pkgbase}: Directory exists"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        artixpkg_git_config "${CONFIGURE_OPTIONS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_git_config "${CONFIG_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_ci_config "${AGENT_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,46 +5,20 @@
 | 
			
		||||
[[ -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_
 | 
			
		||||
}
 | 
			
		||||
@@ -107,13 +81,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 +92,6 @@ artixpkg_git_config() {
 | 
			
		||||
            artixpkg_git_config_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -m|--maintainer)
 | 
			
		||||
            SET_TOPIC=1
 | 
			
		||||
            RUNCMD+=" -m"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -d|--drop)
 | 
			
		||||
            DROP_TOPIC=1
 | 
			
		||||
            RUNCMD+=" -d"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT="$2"
 | 
			
		||||
            RUNCMD+=" -a ${AGENT}"
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --agent=*)
 | 
			
		||||
            AGENT="${1#*=}"
 | 
			
		||||
            RUNCMD+=" -a ${AGENT}"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        --protocol=https)
 | 
			
		||||
            proto_force=1
 | 
			
		||||
            shift
 | 
			
		||||
@@ -221,7 +169,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 +212,6 @@ artixpkg_git_config() {
 | 
			
		||||
                git config user.signingKey "${GPGKEY}"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # topics meta
 | 
			
		||||
            if (( SET_TOPIC )); then
 | 
			
		||||
                if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
                    local topic gitname
 | 
			
		||||
                    topic="maintainer-${packager_name}"
 | 
			
		||||
                    gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
                    if ! add_topic "${gitname}" "${topic}"; then
 | 
			
		||||
                        warning "failed to set the maintainer topic: ${topic}"
 | 
			
		||||
                    fi
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if (( DROP_TOPIC )); then
 | 
			
		||||
                if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
                    local topic gitname
 | 
			
		||||
                    topic="maintainer-${packager_name}"
 | 
			
		||||
                    gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
                    if ! remove_topic "${gitname}" "${topic}"; then
 | 
			
		||||
                        warning "failed to drop the maintainer topic: ${topic}"
 | 
			
		||||
                    fi
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_CI} ]]; then
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                commit_ci
 | 
			
		||||
                CI_ADDED=1
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ -n ${AGENT} ]] && (( ! CI_ADDED )); then
 | 
			
		||||
                msg "Switching ci support for [%s] ..." "${AGENT}"
 | 
			
		||||
                commit_ci
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
 | 
			
		||||
                msg "Creating repo db ..."
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
                    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
                    source PKGBUILD
 | 
			
		||||
                    update_yaml_base
 | 
			
		||||
                fi
 | 
			
		||||
                git add "${REPO_DB}"
 | 
			
		||||
                git commit -m "Create repo db"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            msg "Querying ${pkgbase} ..."
 | 
			
		||||
            if ! show_db; then
 | 
			
		||||
                warning "Could not query ${REPO_DB}"
 | 
			
		||||
            fi
 | 
			
		||||
        )
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,10 @@ ARTOOLS_INCLUDE_GIT_CREATE_SH=1
 | 
			
		||||
source "${LIBDIR}"/pkg/git/clone.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/git/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/git/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/ci/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/ci/config.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/admin/team.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/admin/team.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
@@ -20,8 +24,10 @@ artixpkg_git_create_usage() {
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -c, --clone           Clone the Git repository after creation
 | 
			
		||||
        -t, --team=NAME       Assign team name (default: world)
 | 
			
		||||
                              Possible values: [system, world, lib32, galaxy]
 | 
			
		||||
        -a, --agent NAME      Set the CI agent (default: ${AGENTS[0]})
 | 
			
		||||
                              Possible values: $(yaml_array ${AGENTS[@]})
 | 
			
		||||
        -t, --team NAME       Assign team name (default: ${ARTIX_TEAMS[1]})
 | 
			
		||||
                              Possible values: $(yaml_array ${ARTIX_TEAMS[@]})
 | 
			
		||||
        -h, --help            Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
@@ -33,17 +39,12 @@ artixpkg_git_create() {
 | 
			
		||||
    # options
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local clone=0
 | 
			
		||||
    local config=0
 | 
			
		||||
    local TEAM="${ARTIX_DB[5]}"
 | 
			
		||||
    local AGENT=()
 | 
			
		||||
    local CLONE=0
 | 
			
		||||
    local CONFIG=0
 | 
			
		||||
 | 
			
		||||
    local AGENT_OPTS=("--agent" "${AGENTS[0]}")
 | 
			
		||||
    local TEAM_OPTS=("--team" "${ARTIX_TEAMS[1]}")
 | 
			
		||||
 | 
			
		||||
    local TEAMS=(
 | 
			
		||||
        "${ARTIX_DB[2]}"
 | 
			
		||||
        "${ARTIX_DB[5]}"
 | 
			
		||||
        "${ARTIX_DB[8]}"
 | 
			
		||||
        "${ARTIX_DB[11]}"
 | 
			
		||||
        )
 | 
			
		||||
    # variables
 | 
			
		||||
    local path
 | 
			
		||||
 | 
			
		||||
@@ -53,30 +54,32 @@ artixpkg_git_create() {
 | 
			
		||||
            artixpkg_git_create_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT_OPTS=("$1" "$2")
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        -c|--clone)
 | 
			
		||||
            clone=1
 | 
			
		||||
            CLONE=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -t|--team)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            TEAM="$2"
 | 
			
		||||
            TEAM_OPTS=("$1" "$2")
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --team=*)
 | 
			
		||||
            TEAM="${1#*=}"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            pkgbases=("$@")
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${TEAM}" "${TEAMS[@]}"; then
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${TEAM_OPTS[1]}" "${ARTIX_TEAMS[@]}"; then
 | 
			
		||||
        die "${TEAM} does not exist!"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
@@ -86,41 +89,41 @@ artixpkg_git_create() {
 | 
			
		||||
            if ! path=$(realpath -e .); then
 | 
			
		||||
                die "failed to read path from current directory"
 | 
			
		||||
            fi
 | 
			
		||||
        pkgbases=("$(basename "${path}")")
 | 
			
		||||
        clone=0
 | 
			
		||||
        config=1
 | 
			
		||||
    else
 | 
			
		||||
        artixpkg_git_create_usage
 | 
			
		||||
        exit 1
 | 
			
		||||
            pkgbases=("$(basename "${path}")")
 | 
			
		||||
            CLONE=0
 | 
			
		||||
            CONFIG=1
 | 
			
		||||
        else
 | 
			
		||||
            artixpkg_git_create_usage
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # create
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
 | 
			
		||||
        local gitname
 | 
			
		||||
        gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
 | 
			
		||||
        if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
            if ! create_repo "${gitname}" >/dev/null; then
 | 
			
		||||
                die "failed to create project: ${pkgbase}"
 | 
			
		||||
                die "failed to create repository: ${pkgbase}"
 | 
			
		||||
            else
 | 
			
		||||
                msg_success "Successfully created ${pkgbase}"
 | 
			
		||||
            fi
 | 
			
		||||
            if ! add_team_to_repo "${gitname}" "${TEAM}" >/dev/null; then
 | 
			
		||||
                warning "failed to assign team: ${TEAM}"
 | 
			
		||||
            fi
 | 
			
		||||
            msg_success "Successfully created ${pkgbase}"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ ${TEAM} == "${ARTIX_DB[11]}" ]]; then
 | 
			
		||||
            AGENT+=(--agent="${TEAM}")
 | 
			
		||||
        fi
 | 
			
		||||
        if (( clone )); then
 | 
			
		||||
            artixpkg_git_clone "${AGENT[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( config )); then
 | 
			
		||||
            artixpkg_git_config "${AGENT[@]}"
 | 
			
		||||
 | 
			
		||||
        if (( CLONE )); then
 | 
			
		||||
            artixpkg_git_clone "${AGENT_OPTS[@]}" "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( CONFIG )); then
 | 
			
		||||
            artixpkg_git_config "${pkgbase}"
 | 
			
		||||
            artixpkg_ci_config "${AGENT_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
            artixpkg_admin_team "${TEAM_OPTS[@]}" "${pkgbase}"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # some convenience hints if not in auto clone/config mode
 | 
			
		||||
    if (( ! clone )) && (( ! config )); then
 | 
			
		||||
    if (( ! CLONE )) && (( ! CONFIG )); then
 | 
			
		||||
        cat <<- _EOF_
 | 
			
		||||
 | 
			
		||||
        For new clones:
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ artixpkg_git_pull_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME      Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME           Pull all packages of the named topic
 | 
			
		||||
        -m, --maintainer NAME      Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic NAME           Pull all packages of the named topic
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --all                      Pull all existing packages
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
@@ -57,19 +57,11 @@ artixpkg_git_pull() {
 | 
			
		||||
                MAINTAINER="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --maintainer=*)
 | 
			
		||||
                MAINTAINER="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -t|--topic)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TOPIC="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --topic=*)
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --all)
 | 
			
		||||
                PULL_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ artixpkg_git_push_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME      Push all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME           Push all packages of the named topic
 | 
			
		||||
        -m, --maintainer NAME      Push all packages of the named maintainer
 | 
			
		||||
        -t, --topic NAME           Push all packages of the named topic
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
@@ -55,19 +55,11 @@ artixpkg_git_push() {
 | 
			
		||||
                MAINTAINER="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --maintainer=*)
 | 
			
		||||
                MAINTAINER="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -t|--topic)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TOPIC="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --topic=*)
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -j|--jobs)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                jobs=$2
 | 
			
		||||
 
 | 
			
		||||
@@ -38,14 +38,17 @@ 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
 | 
			
		||||
        -m, --manual            Disable auto repo
 | 
			
		||||
                                Possible auto values: $(yaml_array ${ARTIX_DB_MAP[@]})
 | 
			
		||||
        -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} --auto --push ${ARTIX_DB_MAP[2]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -64,6 +67,7 @@ artixpkg_repo_add() {
 | 
			
		||||
    local REBUILD=0
 | 
			
		||||
    local NOCHECK=0
 | 
			
		||||
    local ADD=1
 | 
			
		||||
    local AUTO=1
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
@@ -71,6 +75,10 @@ artixpkg_repo_add() {
 | 
			
		||||
                artixpkg_repo_add_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -m|--manual)
 | 
			
		||||
                AUTO=0
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -p|--push)
 | 
			
		||||
                PUSH=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -96,8 +104,14 @@ artixpkg_repo_add() {
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
        die "${DEST} does not exist!"
 | 
			
		||||
    if (( AUTO )); then
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
@@ -124,8 +138,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 +166,8 @@ artixpkg_repo_add() {
 | 
			
		||||
                        rm .SRCINFO
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    delete_obsolete_map_keys
 | 
			
		||||
 | 
			
		||||
                    if [[ -n $(git status --porcelain --untracked-files=no) ]]; then
 | 
			
		||||
 | 
			
		||||
                        stat_busy 'Staging files'
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,15 @@ artixpkg_repo_move_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [SOURCE_REPO] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push         Push pkgbase
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -m, --manual            Disable auto repo
 | 
			
		||||
                                Possible auto values: $(yaml_array ${ARTIX_DB_MAP[@]})
 | 
			
		||||
        -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} --auto --push ${ARTIX_DB_MAP[1]} ${ARTIX_DB_MAP[2]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -34,6 +37,7 @@ artixpkg_repo_move() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=1
 | 
			
		||||
 | 
			
		||||
    local DEST
 | 
			
		||||
    local SRC
 | 
			
		||||
@@ -44,6 +48,10 @@ artixpkg_repo_move() {
 | 
			
		||||
                artixpkg_repo_move_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -m|--manual)
 | 
			
		||||
                AUTO=0
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -p|--push)
 | 
			
		||||
                PUSH=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -61,11 +69,20 @@ artixpkg_repo_move() {
 | 
			
		||||
    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 (( AUTO )); then
 | 
			
		||||
        if ! in_array "${SRC}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
            die "${SRC} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    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 +103,114 @@ 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
 | 
			
		||||
 | 
			
		||||
                        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,15 @@ artixpkg_repo_remove_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push         Push pkgbase
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -m, --manual            Disable auto repo
 | 
			
		||||
                                Possible auto values: $(yaml_array ${ARTIX_DB_MAP[@]})
 | 
			
		||||
        -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} --auto --push ${ARTIX_DB_MAP[2]} libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -34,6 +37,7 @@ artixpkg_repo_remove() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
 | 
			
		||||
    local PUSH=0
 | 
			
		||||
    local AUTO=1
 | 
			
		||||
    local DEST=''
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
@@ -42,6 +46,10 @@ artixpkg_repo_remove() {
 | 
			
		||||
                artixpkg_repo_remove_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -m|--manual)
 | 
			
		||||
                AUTO=0
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -p|--push)
 | 
			
		||||
                PUSH=1
 | 
			
		||||
                shift
 | 
			
		||||
@@ -59,8 +67,14 @@ artixpkg_repo_remove() {
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
        die "${DEST} does not exist!"
 | 
			
		||||
    if (( AUTO )); then
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB_MAP[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
            die "${DEST} does not exist!"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
@@ -79,11 +93,28 @@ 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
 | 
			
		||||
 | 
			
		||||
                    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:-''}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,9 +20,10 @@ usage() {
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        repo      Pacman database modification for packge update, move etc
 | 
			
		||||
        repo      Pacman database modification for package updates, moves, etc.
 | 
			
		||||
        git       Manage Git packaging repositories and their configuration
 | 
			
		||||
        admin     Managegement of topics and obsolete repos
 | 
			
		||||
        agent     Manage CI and build agent
 | 
			
		||||
        admin     Manage topics, teams and obsolete repos
 | 
			
		||||
        version   Show artixpkg version information
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
@@ -67,6 +68,14 @@ while (( $# )); do
 | 
			
		||||
        artixpkg_git "$@"
 | 
			
		||||
        exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
    ci)
 | 
			
		||||
        _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
        shift
 | 
			
		||||
        # shellcheck source=src/lib/pkg/ci.sh
 | 
			
		||||
        source "${LIBDIR}"/pkg/ci.sh
 | 
			
		||||
        artixpkg_ci "$@"
 | 
			
		||||
        exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
    admin)
 | 
			
		||||
        _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
        shift
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,8 @@ usage() {
 | 
			
		||||
    printf '                       [default: %s]\n' "${repo}"
 | 
			
		||||
    printf '    -a <arch>          Build arch chroot\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${arch}"
 | 
			
		||||
    printf '    -e <name>          Export PACKAGER\n'
 | 
			
		||||
    printf "                       format: 'John Doe <john@doe.com>'\n"
 | 
			
		||||
    printf '    -c                 Recreate the chroot before building\n'
 | 
			
		||||
    printf '    -m                 Major rebuild\n'
 | 
			
		||||
    printf '    -N                 Disable check() function\n'
 | 
			
		||||
@@ -44,13 +46,14 @@ usage() {
 | 
			
		||||
    exit "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opts='hcCNmnr:d:a:'
 | 
			
		||||
opts='hcCNmnr:d:a:e:'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        r) chroots_pkg="$OPTARG" ;;
 | 
			
		||||
        d) repo="$OPTARG" ;;
 | 
			
		||||
        a) arch="$OPTARG" ;;
 | 
			
		||||
        e) packager="$OPTARG" ;;
 | 
			
		||||
        c) create_first=true ;;
 | 
			
		||||
        m) rebuild=true ;;
 | 
			
		||||
        C) mkchrootpkg_args+=(-C) ;;
 | 
			
		||||
@@ -90,6 +93,10 @@ else
 | 
			
		||||
    set_arch="${arch}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -n "${packager}" ]]; then
 | 
			
		||||
    export PACKAGER=${packager}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Architecture-specific Mount
 | 
			
		||||
arch_mounts=()
 | 
			
		||||
if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								src/pkg/packagersign.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/pkg/packagersign.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
#!/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
 | 
			
		||||
 | 
			
		||||
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##*/}"
 | 
			
		||||
        if ! gpg --homedir /etc/pacman.d/gnupg --no-permission-warning \
 | 
			
		||||
            --no-default-keyring --default-key "${GPGP_KEY}" --passphrase "${GPGP_PASS}" \
 | 
			
		||||
            -q --detach-sign "$file_to_sign"; then
 | 
			
		||||
           return 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check_root "" "${BASH_SOURCE[0]}" "$@"
 | 
			
		||||
 | 
			
		||||
for pkg in "${passfiles[@]}"; do
 | 
			
		||||
    msg "Searching %s ..." "$pkg"
 | 
			
		||||
    if pkgfile=$(find_cached_pkgfile "$pkg");then
 | 
			
		||||
        msg2 "Found: %s" "${pkgfile}"
 | 
			
		||||
        [[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig
 | 
			
		||||
        if ! sign_pkg "${pkgfile}"; then
 | 
			
		||||
            die "Failed to sign package!"
 | 
			
		||||
        fi
 | 
			
		||||
        ret=0
 | 
			
		||||
    else
 | 
			
		||||
        ret=1
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit "$ret"
 | 
			
		||||
		Reference in New Issue
	
	Block a user