Compare commits
	
		
			34 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e8e4aa553f | |||
| d8b1038bd6 | |||
| f9a2dc9dbe | |||
| e04adbf5e6 | |||
| af1514ad5f | |||
| 32925a05c4 | |||
| 77017f8009 | |||
| 645563b0c5 | |||
| fb8da6fedd | |||
| c31acae021 | |||
| ca1082a8e5 | |||
| 6f12273730 | |||
| b9b15f549d | |||
| c81b643fb2 | |||
| 4362707456 | |||
| 5d8cdf19fe | |||
| 7084a086fa | |||
| 8744bb5355 | |||
| 75747a7d9d | |||
| 75d1e7ce2a | |||
| 38284c5c14 | |||
| 5e7decee42 | |||
| dc606af137 | |||
| 5253f81f0a | |||
| 00ed72f96e | |||
| 70839d8609 | |||
| 65a29f73cc | |||
| d72df66e99 | |||
| 221cc796c0 | |||
| 3ed0c310a3 | |||
| b1213d5c2c | |||
| 26dffde972 | |||
| 915eca6c2e | |||
| a52e32d740 | 
							
								
								
									
										28
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/lint.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | name: Artools shellcheck | ||||||
|  | run-name: ${{ gitea.actor }} | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - ci | ||||||
|  |     tags: | ||||||
|  |       - 0.* | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   lint: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: checkout repo | ||||||
|  |         uses: actions/checkout@main | ||||||
|  |       - name: Run ShellCheck shell-linter | ||||||
|  |         uses: azohra/shell-linter@latest | ||||||
|  |         with: | ||||||
|  |           path: "src/base/*.in,src/pkg/*.in,src/iso/*.in" | ||||||
|  |           severity: "error" | ||||||
|  |       - name: Run ShellCheck action-shellcheck | ||||||
|  |         uses: ludeeus/action-shellcheck@master | ||||||
|  |         env: | ||||||
|  |           SHELLCHECK_OPTS: -x -s bash | ||||||
|  |         with: | ||||||
|  |           additional_files: "src/base/*.in*" | ||||||
|  |           #scandir: 'src/base' | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| SHELL=/bin/bash | SHELL=/bin/bash | ||||||
|  |  | ||||||
| V=0.31 | V=0.32 | ||||||
| BUILDTOOLVER ?= $(V) | BUILDTOOLVER ?= $(V) | ||||||
|  |  | ||||||
| CHROOTVER=0.12 | CHROOTVER=0.12 | ||||||
|   | |||||||
| @@ -44,7 +44,8 @@ CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ | |||||||
|         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ |         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ | ||||||
|         -fstack-clash-protection -fcf-protection" |         -fstack-clash-protection -fcf-protection" | ||||||
| CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" | CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" | ||||||
| LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \ | ||||||
|  |          -Wl,-z,pack-relative-relocs" | ||||||
| LTOFLAGS="-flto=auto" | LTOFLAGS="-flto=auto" | ||||||
| RUSTFLAGS="" | RUSTFLAGS="" | ||||||
| #-- Make Flags: change this for DistCC/SMP systems | #-- Make Flags: change this for DistCC/SMP systems | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ artixpkg_admin_usage() { | |||||||
|     COMMANDS |     COMMANDS | ||||||
|         transfer          Transfer obsolete repository to landfill |         transfer          Transfer obsolete repository to landfill | ||||||
|         query             Query maintainers and topics |         query             Query maintainers and topics | ||||||
|  |         topic             Manage topics | ||||||
|  |  | ||||||
|     OPTIONS |     OPTIONS | ||||||
|         -h, --help     Show this help text |         -h, --help     Show this help text | ||||||
| @@ -55,6 +56,14 @@ artixpkg_admin() { | |||||||
|             artixpkg_admin_query "$@" |             artixpkg_admin_query "$@" | ||||||
|             exit 0 |             exit 0 | ||||||
|         ;; |         ;; | ||||||
|  |         topic) | ||||||
|  |             _ARTOOLS_COMMAND+=" $1" | ||||||
|  |             shift | ||||||
|  |             # shellcheck source=src/lib/pkg/admin/query.sh | ||||||
|  |             source "${LIBDIR}"/pkg/admin/topic.sh | ||||||
|  |             artixpkg_admin_topic "$@" | ||||||
|  |             exit 0 | ||||||
|  |         ;; | ||||||
|         -*) |         -*) | ||||||
|             die "invalid argument: %s" "$1" |             die "invalid argument: %s" "$1" | ||||||
|         ;; |         ;; | ||||||
|   | |||||||
| @@ -19,8 +19,8 @@ artixpkg_admin_query_usage() { | |||||||
|         -h, --help                 Show this help text |         -h, --help                 Show this help text | ||||||
|  |  | ||||||
|     EXAMPLES |     EXAMPLES | ||||||
|         $ ${COMMAND} --maintainer maintainer-mynickname |         $ ${COMMAND} --maintainer tux | ||||||
|         $ ${COMMAND} --topic myopic |         $ ${COMMAND} --topic mytopic | ||||||
| _EOF_ | _EOF_ | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										139
									
								
								src/lib/pkg/admin/topic.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								src/lib/pkg/admin/topic.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | [[ -z ${ARTOOLS_INCLUDE_ADMIN_TOPIC_SH:-} ]] || return 0 | ||||||
|  | ARTOOLS_INCLUDE_ADMIN_TOPIC_SH=1 | ||||||
|  |  | ||||||
|  | set -e | ||||||
|  |  | ||||||
|  |  | ||||||
|  | artixpkg_admin_topic_usage() { | ||||||
|  |     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|  |     cat <<- _EOF_ | ||||||
|  |     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 | ||||||
|  |  | ||||||
|  |     EXAMPLES | ||||||
|  |         $ ${COMMAND} --add mytopic libfoo | ||||||
|  |         $ ${COMMAND} --del mytopic libbar | ||||||
|  |         $ ${COMMAND} --add mytopic libfoo libbar | ||||||
|  |         $ ${COMMAND} --del mytopic libfoo libbar | ||||||
|  | _EOF_ | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | artixpkg_admin_topic() { | ||||||
|  |     if (( $# < 1 )); then | ||||||
|  |         artixpkg_admin_topic_usage | ||||||
|  |         exit 0 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # options | ||||||
|  |     local pkgbases=() | ||||||
|  |     local pkgbase | ||||||
|  |  | ||||||
|  |     local ADD_TOPIC | ||||||
|  |     local DEL_TOPIC | ||||||
|  |     local ADD=0 | ||||||
|  |     local DEL=0 | ||||||
|  |     local jobs= | ||||||
|  |     jobs=$(nproc) | ||||||
|  |  | ||||||
|  |     local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|  |  | ||||||
|  |     while (( $# )); do | ||||||
|  |         case $1 in | ||||||
|  |             -a|--add) | ||||||
|  |                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||||
|  |                 ADD_TOPIC="$2" | ||||||
|  |                 ADD=1 | ||||||
|  |                 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" | ||||||
|  |                 DEL=1 | ||||||
|  |                 RUNCMD+=" -d ${DEL_TOPIC}" | ||||||
|  |                 shift 2 | ||||||
|  |             ;; | ||||||
|  |             --del=*) | ||||||
|  |                 DEL_TOPIC="${1#*=}" | ||||||
|  |                 DEL=1 | ||||||
|  |                 RUNCMD+=" --del=${DEL_TOPIC}" | ||||||
|  |                 shift | ||||||
|  |             ;; | ||||||
|  |             -h|--help) | ||||||
|  |                 artixpkg_admin_topic_usage | ||||||
|  |                 exit 0 | ||||||
|  |             ;; | ||||||
|  |             -j|--jobs) | ||||||
|  |                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||||
|  |                 jobs=$2 | ||||||
|  |                 shift 2 | ||||||
|  |             ;; | ||||||
|  |             --) | ||||||
|  |                 shift | ||||||
|  |                 break | ||||||
|  |             ;; | ||||||
|  |             -*) | ||||||
|  |                 die "invalid argument: %s" "$1" | ||||||
|  |             ;; | ||||||
|  |             *) | ||||||
|  |                 break | ||||||
|  |             ;; | ||||||
|  |         esac | ||||||
|  |     done | ||||||
|  |  | ||||||
|  |     pkgbases+=("$@") | ||||||
|  |  | ||||||
|  |     if [[ -n ${GIT_TOKEN} ]]; then | ||||||
|  |  | ||||||
|  |         # parallelization | ||||||
|  |         if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then | ||||||
|  |             if [[ -n ${BOLD} ]]; then | ||||||
|  |                 export ARTOOLS_COLOR=always | ||||||
|  |             fi | ||||||
|  |             if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${pkgbases[@]}"; then | ||||||
|  |                 die 'Failed to manage some topic, please check the output' | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|  |             exit 0 | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         for pkgbase in "${pkgbases[@]}"; do | ||||||
|  |  | ||||||
|  |             # 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 | ||||||
|  |             fi | ||||||
|  |  | ||||||
|  |         done | ||||||
|  |  | ||||||
|  |     fi | ||||||
|  | } | ||||||
| @@ -137,7 +137,6 @@ update_yaml_base() { | |||||||
|     local name |     local name | ||||||
|     local pkgnames |     local pkgnames | ||||||
|     local arches |     local arches | ||||||
|     local pkgbase |  | ||||||
|  |  | ||||||
|     pkgbase="${pkgbase:-${pkgname}}" |     pkgbase="${pkgbase:-${pkgname}}" | ||||||
|     version="$(get_full_version)" |     version="$(get_full_version)" | ||||||
|   | |||||||
| @@ -20,6 +20,8 @@ artixpkg_git_clone_usage() { | |||||||
|         -m, --maintainer=NAME      Clone all packages of the named maintainer |         -m, --maintainer=NAME      Clone all packages of the named maintainer | ||||||
|         --protocol https           Clone the repository over https |         --protocol https           Clone the repository over https | ||||||
|         -t, --topic=NAME           Clone all packages of the named topic |         -t, --topic=NAME           Clone all packages of the named topic | ||||||
|  |         -a, --agent=NAME           Set the CI agent (default: official) | ||||||
|  |                                    Possible values: [official, galaxy] | ||||||
|         -j, --jobs N               Run up to N jobs in parallel (default: $(nproc)) |         -j, --jobs N               Run up to N jobs in parallel (default: $(nproc)) | ||||||
|         --all                      Clone all existing packages, useful for cache warming |         --all                      Clone all existing packages, useful for cache warming | ||||||
|         -h, --help                 Show this help text |         -h, --help                 Show this help text | ||||||
| @@ -27,8 +29,9 @@ artixpkg_git_clone_usage() { | |||||||
|     EXAMPLES |     EXAMPLES | ||||||
|         $ ${COMMAND} libfoo linux libbar |         $ ${COMMAND} libfoo linux libbar | ||||||
|         $ ${COMMAND} --maintainer tux |         $ ${COMMAND} --maintainer tux | ||||||
|         $ ${COMMAND} --topic myopic |         $ ${COMMAND} --topic mytopic | ||||||
|         $ ${COMMAND} -j 8 --topic myopic |         $ ${COMMAND} -j 8 --topic mytopic | ||||||
|  |         $ ${COMMAND} --agent galaxy libfoo | ||||||
| _EOF_ | _EOF_ | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -90,6 +93,15 @@ artixpkg_git_clone() { | |||||||
|                 TOPIC="${1#*=}" |                 TOPIC="${1#*=}" | ||||||
|                 shift |                 shift | ||||||
|             ;; |             ;; | ||||||
|  |             -a|--agent) | ||||||
|  |                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||||
|  |                 CONFIGURE_OPTIONS+=("$1" "$2") | ||||||
|  |                 shift 2 | ||||||
|  |             ;; | ||||||
|  |             --agent=*) | ||||||
|  |                 CONFIGURE_OPTIONS+=("${1}") | ||||||
|  |                 shift | ||||||
|  |             ;; | ||||||
|             --all) |             --all) | ||||||
|                 CLONE_ALL=1 |                 CLONE_ALL=1 | ||||||
|                 shift |                 shift | ||||||
|   | |||||||
| @@ -13,7 +13,11 @@ set -e | |||||||
|  |  | ||||||
| commit_ci(){ | commit_ci(){ | ||||||
|     [[ -d .artixlinux ]] || mkdir .artixlinux |     [[ -d .artixlinux ]] || mkdir .artixlinux | ||||||
|  |     if [[ ${AGENT} == ${ARTIX_DB[11]} ]]; then | ||||||
|  |         printf "@Library('artix-ci@${AGENT}') import org.artixlinux.RepoPackage\n" > "${REPO_CI}" | ||||||
|  |     else | ||||||
|         printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}" |         printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}" | ||||||
|  |     fi | ||||||
|     { |     { | ||||||
|         printf '\n' |         printf '\n' | ||||||
|         printf 'PackagePipeline(new RepoPackage(this))\n' |         printf 'PackagePipeline(new RepoPackage(this))\n' | ||||||
| @@ -30,14 +34,18 @@ artixpkg_git_config_usage() { | |||||||
|  |  | ||||||
|     OPTIONS |     OPTIONS | ||||||
|         -m, --maintainer       Set the maintainer topic via gitea api |         -m, --maintainer       Set the maintainer topic via gitea api | ||||||
|         -u, --upstream         Add upstream arch remote |         -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 |         --protocol https       Configure remote url to use https | ||||||
|         -j, --jobs N           Run up to N jobs in parallel (default: $(nproc)) |         -j, --jobs N           Run up to N jobs in parallel (default: $(nproc)) | ||||||
|         -h, --help             Show this help text |         -h, --help             Show this help text | ||||||
|  |  | ||||||
|     EXAMPLES |     EXAMPLES | ||||||
|         $ ${COMMAND} --maintainer tux |         $ ${COMMAND} --maintainer libfoo | ||||||
|         $ ${COMMAND} --upstream libfoo |         $ ${COMMAND} --agent=galaxy libfoo | ||||||
|  |         $ ${COMMAND} -a galaxy libfoo | ||||||
|  |         $ ${COMMAND} --drop libfoo | ||||||
|         $ ${COMMAND} * |         $ ${COMMAND} * | ||||||
| _EOF_ | _EOF_ | ||||||
| } | } | ||||||
| @@ -101,10 +109,12 @@ artixpkg_git_config() { | |||||||
|     local paths=() |     local paths=() | ||||||
|  |  | ||||||
|     local SET_TOPIC=0 |     local SET_TOPIC=0 | ||||||
|     local UPSTREAM=0 |     local DROP_TOPIC=0 | ||||||
|  |     local AGENT= | ||||||
|  |     local CI_ADDED=0 | ||||||
|  |  | ||||||
|     # variables |     # variables | ||||||
|     local -r command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} |     local RUNCMD=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|     local path realpath pkgbase |     local path realpath pkgbase | ||||||
|     local PACKAGER GPGKEY packager_name packager_email |     local PACKAGER GPGKEY packager_name packager_email | ||||||
|  |  | ||||||
| @@ -116,10 +126,21 @@ artixpkg_git_config() { | |||||||
|         ;; |         ;; | ||||||
|         -m|--maintainer) |         -m|--maintainer) | ||||||
|             SET_TOPIC=1 |             SET_TOPIC=1 | ||||||
|  |             RUNCMD+=" -m" | ||||||
|             shift |             shift | ||||||
|         ;; |         ;; | ||||||
|         -u|--upstream) |         -d|--drop) | ||||||
|             UPSTREAM=1 |             DROP_TOPIC=1 | ||||||
|  |             RUNCMD+=" -d" | ||||||
|  |             shift | ||||||
|  |         ;; | ||||||
|  |         -a|--agent) | ||||||
|  |             (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||||
|  |             AGENT="$2" | ||||||
|  |             shift 2 | ||||||
|  |         ;; | ||||||
|  |         --agent=*) | ||||||
|  |             AGENT="${1#*=}" | ||||||
|             shift |             shift | ||||||
|         ;; |         ;; | ||||||
|         --protocol=https) |         --protocol=https) | ||||||
| @@ -199,7 +220,7 @@ artixpkg_git_config() { | |||||||
|         if [[ -n ${BOLD} ]]; then |         if [[ -n ${BOLD} ]]; then | ||||||
|             export ARTOOLS_COLOR=always |             export ARTOOLS_COLOR=always | ||||||
|         fi |         fi | ||||||
|         if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${paths[@]}"; then |         if ! parallel --bar --jobs "${jobs}" "${RUNCMD}" ::: "${paths[@]}"; then | ||||||
|             die 'Failed to configure some packages, please check the output' |             die 'Failed to configure some packages, please check the output' | ||||||
|             exit 1 |             exit 1 | ||||||
|         fi |         fi | ||||||
| @@ -253,17 +274,27 @@ artixpkg_git_config() { | |||||||
|                     fi |                     fi | ||||||
|                 fi |                 fi | ||||||
|             fi |             fi | ||||||
|             if (( UPSTREAM )); then |  | ||||||
|                 local remote_url |             if (( DROP_TOPIC )); then | ||||||
|                 remote_url="${GIT_UPSTREAM_URL}/${pkgbase}".git |                 if [[ -n ${GIT_TOKEN} ]]; then | ||||||
|                 if ! git remote add upstream "${remote_url}"; then |                     local topic gitname | ||||||
|                     warning "failed to set the upstream: ${remote_url}" |                     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 | ||||||
|             fi |             fi | ||||||
|  |  | ||||||
|             if [[ ! -f ${REPO_CI} ]]; then |             if [[ ! -f ${REPO_CI} ]]; then | ||||||
|                 msg "Adding ci support ..." |                 msg "Adding ci support ..." | ||||||
|                 commit_ci |                 commit_ci | ||||||
|  |                 CI_ADDED=1 | ||||||
|  |             fi | ||||||
|  |  | ||||||
|  |             if [[ -n ${AGENT} ]] && (( ! CI_ADDED )); then | ||||||
|  |                 msg "Switching ci support for [%s] ..." "${AGENT}" | ||||||
|  |                 commit_ci | ||||||
|             fi |             fi | ||||||
|  |  | ||||||
|             if [[ ! -f ${REPO_DB} ]]; then |             if [[ ! -f ${REPO_DB} ]]; then | ||||||
|   | |||||||
| @@ -20,7 +20,8 @@ artixpkg_git_create_usage() { | |||||||
|  |  | ||||||
|     OPTIONS |     OPTIONS | ||||||
|         -c, --clone           Clone the Git repository after creation |         -c, --clone           Clone the Git repository after creation | ||||||
|         -t, --team=NAME       Assign team name [default: world] |         -t, --team=NAME       Assign team name (default: world) | ||||||
|  |                               Possible values: [system, world, lib32, galaxy] | ||||||
|         -h, --help            Show this help text |         -h, --help            Show this help text | ||||||
|  |  | ||||||
|     EXAMPLES |     EXAMPLES | ||||||
| @@ -34,9 +35,15 @@ artixpkg_git_create() { | |||||||
|     local pkgbase |     local pkgbase | ||||||
|     local clone=0 |     local clone=0 | ||||||
|     local config=0 |     local config=0 | ||||||
|     local TEAM='world' |     local TEAM="${ARTIX_DB[5]}" | ||||||
|  |     local AGENT=() | ||||||
|  |  | ||||||
|     local TEAMS=(system world lib32) |     local TEAMS=( | ||||||
|  |         "${ARTIX_DB[2]}" | ||||||
|  |         "${ARTIX_DB[5]}" | ||||||
|  |         "${ARTIX_DB[8]}" | ||||||
|  |         "${ARTIX_DB[11]}" | ||||||
|  |         ) | ||||||
|     # variables |     # variables | ||||||
|     local path |     local path | ||||||
|  |  | ||||||
| @@ -101,10 +108,13 @@ artixpkg_git_create() { | |||||||
|             fi |             fi | ||||||
|             msg_success "Successfully created ${pkgbase}" |             msg_success "Successfully created ${pkgbase}" | ||||||
|         fi |         fi | ||||||
|  |         if [[ ${TEAM} == ${ARTIX_DB[11]} ]]; then | ||||||
|  |             AGENT+=(--agent="${TEAM}") | ||||||
|  |         fi | ||||||
|         if (( clone )); then |         if (( clone )); then | ||||||
|             artixpkg_git_clone "${pkgbase}" |             artixpkg_git_clone "${AGENT[@]}" "${pkgbase}" | ||||||
|         elif (( config )); then |         elif (( config )); then | ||||||
|             artixpkg_git_config |             artixpkg_git_config "${AGENT[@]}" | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|     done |     done | ||||||
|   | |||||||
| @@ -11,31 +11,27 @@ source "${LIBDIR}"/pkg/db/db.sh | |||||||
| set -e | set -e | ||||||
|  |  | ||||||
|  |  | ||||||
| check_pkgbuild_validity() { | show_agent() { | ||||||
|     # shellcheck source=contrib/makepkg/PKGBUILD.proto |     local agent="orion" | ||||||
|     . ./PKGBUILD |     msg "Checking agent ..." | ||||||
|  |     if grep @galaxy "${REPO_CI}" &>/dev/null; then | ||||||
|     # skip when there are no sources available |         agent="taurus" | ||||||
|     if (( ! ${#source[@]} )); then |  | ||||||
|         return |  | ||||||
|     fi |     fi | ||||||
|  |     msg2 "agent: %s" "$agent" | ||||||
|  | } | ||||||
|  |  | ||||||
|     # validate sources hash algo is at least > sha1 | has_remote_changes() { | ||||||
|     local bad_algos=("cksums" "md5sums" "sha1sums") |     local status | ||||||
|     local good_hash_algo=false |     msg "Checking for remote changes ..." | ||||||
|  |     git fetch origin &>/dev/null | ||||||
|     # from makepkg libmakepkg/util/schema.sh |     status=$(git status -sb --porcelain) | ||||||
|     for integ in "${known_hash_algos[@]}"; do |     if [[ "$status" == *behind* ]]; then | ||||||
|         local sumname="${integ}sums" |         msg2 "changes: yes" | ||||||
|         if [[ -n ${!sumname} ]] && ! in_array "${sumname}" "${bad_algos[@]}"; then |         error "Remote changes detected! Please pull (%s)" "${pkgbase}" | ||||||
|             good_hash_algo=true |         return 0 | ||||||
|             break |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|  |  | ||||||
|     if ! $good_hash_algo; then |  | ||||||
|         die "PKGBUILD lacks a secure cryptographic checksum, insecure algorithms: ${bad_algos[*]}" |  | ||||||
|     fi |     fi | ||||||
|  |     msg2 "changes: no" | ||||||
|  |     return 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| artixpkg_repo_usage() { | artixpkg_repo_usage() { | ||||||
|   | |||||||
| @@ -8,6 +8,30 @@ ARTOOLS_INCLUDE_REPO_ADD_SH=1 | |||||||
| set -e | set -e | ||||||
|  |  | ||||||
|  |  | ||||||
|  | check_pkgbuild_validity() { | ||||||
|  |     # skip when there are no sources available | ||||||
|  |     if (( ! ${#source[@]} )); then | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # validate sources hash algo is at least > sha1 | ||||||
|  |     local bad_algos=("cksums" "md5sums" "sha1sums") | ||||||
|  |     local good_hash_algo=false | ||||||
|  |  | ||||||
|  |     # from makepkg libmakepkg/util/schema.sh | ||||||
|  |     for integ in "${known_hash_algos[@]}"; do | ||||||
|  |         local sumname="${integ}sums" | ||||||
|  |         if [[ -n ${!sumname} ]] && ! in_array "${sumname}" "${bad_algos[@]}"; then | ||||||
|  |             good_hash_algo=true | ||||||
|  |             break | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  |  | ||||||
|  |     if ! $good_hash_algo; then | ||||||
|  |         die "PKGBUILD lacks a secure cryptographic checksum, insecure algorithms: ${bad_algos[*]}" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
| artixpkg_repo_add_usage() { | artixpkg_repo_add_usage() { | ||||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} |     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|     cat <<- _EOF_ |     cat <<- _EOF_ | ||||||
| @@ -86,6 +110,8 @@ artixpkg_repo_add() { | |||||||
|             fi |             fi | ||||||
|             ( cd "${pkgbase}" || return |             ( cd "${pkgbase}" || return | ||||||
|  |  | ||||||
|  |                 if ! has_remote_changes; then | ||||||
|  |  | ||||||
|                     if [[ ! -f PKGBUILD ]]; then |                     if [[ ! -f PKGBUILD ]]; then | ||||||
|                         die "No PKGBUILD found in (%s)" "${pkgbase}" |                         die "No PKGBUILD found in (%s)" "${pkgbase}" | ||||||
|                     fi |                     fi | ||||||
| @@ -93,12 +119,20 @@ artixpkg_repo_add() { | |||||||
|                     # shellcheck source=contrib/makepkg/PKGBUILD.proto |                     # shellcheck source=contrib/makepkg/PKGBUILD.proto | ||||||
|                     source PKGBUILD |                     source PKGBUILD | ||||||
|  |  | ||||||
|  |                     check_pkgbuild_validity | ||||||
|  |  | ||||||
|  |                     manage-pkgbuild-keys --export | ||||||
|  |  | ||||||
|                     update_yaml_base |                     update_yaml_base | ||||||
|                     update_yaml_add "${REBUILD}" "${ADD}" "${NOCHECK}" "${DEST}" |                     update_yaml_add "${REBUILD}" "${ADD}" "${NOCHECK}" "${DEST}" | ||||||
|  |  | ||||||
|                     local commit_msg |                     local commit_msg | ||||||
|                     commit_msg=$(get_commit_msg 'add' "${DEST}") |                     commit_msg=$(get_commit_msg 'add' "${DEST}") | ||||||
|  |  | ||||||
|  |                     if [[ -f .SRCINFO ]]; then | ||||||
|  |                         rm .SRCINFO | ||||||
|  |                     fi | ||||||
|  |  | ||||||
|                     if [[ -n $(git status --porcelain --untracked-files=no) ]]; then |                     if [[ -n $(git status --porcelain --untracked-files=no) ]]; then | ||||||
|  |  | ||||||
|                         stat_busy 'Staging files' |                         stat_busy 'Staging files' | ||||||
| @@ -126,6 +160,8 @@ artixpkg_repo_add() { | |||||||
|                             warning "Could not query ${REPO_DB}" |                             warning "Could not query ${REPO_DB}" | ||||||
|                         fi |                         fi | ||||||
|                     fi |                     fi | ||||||
|  |  | ||||||
|  |                 fi | ||||||
|             ) |             ) | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,31 +10,22 @@ set -e | |||||||
|  |  | ||||||
| patch_pkgbase(){ | patch_pkgbase(){ | ||||||
|     local name="$1" |     local name="$1" | ||||||
|     local pkgbuild |  | ||||||
|     pkgbuild=PKGBUILD |  | ||||||
|  |  | ||||||
|     sed -e 's|arch-meson|artix-meson|' -i "${pkgbuild}" |  | ||||||
|  |  | ||||||
|     case "${name}" in |     case "${name}" in | ||||||
|         glibc) |         linux|linux-lts|linux-zen|linux-hardened|linux-rt*) | ||||||
|             sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \ |             sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i PKGBUILD | ||||||
|                 -e '/nscd.service/d' \ |  | ||||||
|                 -i "${pkgbuild}" |  | ||||||
|         ;; |  | ||||||
|         linux|linux-lts|linux-zen|linux-hardened|linux-rt|linux-rt-lts) |  | ||||||
|             sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i "${pkgbuild}" |  | ||||||
|             sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \ |             sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \ | ||||||
|                 -i config |                 -i config | ||||||
|         ;; |         ;; | ||||||
|         gstreamer|gst-plugins-*|licenses) |         *) | ||||||
|             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \ |             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \ | ||||||
|                 -e 's|(Arch Linux)|(Artix Linux)|' \ |                 -e 's|(Arch Linux)|(Artix Linux)|' \ | ||||||
|                 -i "${pkgbuild}" |                 -e 's|arch-meson|artix-meson|' \ | ||||||
|  |                 -i PKGBUILD | ||||||
|         ;; |         ;; | ||||||
|     esac |     esac | ||||||
|  |     git --no-pager diff PKGBUILD | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| artixpkg_repo_import_usage() { | artixpkg_repo_import_usage() { | ||||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} |     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|     cat <<- _EOF_ |     cat <<- _EOF_ | ||||||
| @@ -42,11 +33,13 @@ artixpkg_repo_import_usage() { | |||||||
|  |  | ||||||
|     OPTIONS |     OPTIONS | ||||||
|         --tag TAG          Switch the current workspace to a specified version tag |         --tag TAG          Switch the current workspace to a specified version tag | ||||||
|  |         --del              Delete files before rsync import | ||||||
|         -h, --help         Show this help text |         -h, --help         Show this help text | ||||||
|  |  | ||||||
|     EXAMPLES |     EXAMPLES | ||||||
|         $ ${COMMAND} libfoo |         $ ${COMMAND} libfoo | ||||||
|         $ ${COMMAND} libfoo --tag TAG |         $ ${COMMAND} --tag TAG libfoo | ||||||
|  |         $ ${COMMAND} --tag TAG --del libfoo | ||||||
| _EOF_ | _EOF_ | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -70,16 +63,26 @@ artixpkg_repo_import() { | |||||||
|         --exclude '.gitignore' |         --exclude '.gitignore' | ||||||
|         --exclude 'README.md' |         --exclude 'README.md' | ||||||
|         --exclude '*.service' |         --exclude '*.service' | ||||||
|         --exclude '*.timer' |         --exclude '.SRCINFO' | ||||||
|         --exclude '*.socket' |         --exclude '*.socket' | ||||||
|  |         --exclude '*.timer' | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     while (( $# )); do |     while (( $# )); do | ||||||
|         case $1 in |         case $1 in | ||||||
|  |             --tag) | ||||||
|  |                 (( $# <= 1 )) && die "missing argument for %s" "$1" | ||||||
|  |                 TAG="$2" | ||||||
|  |                 shift 2 | ||||||
|  |             ;; | ||||||
|             --tag=*) |             --tag=*) | ||||||
|                 TAG="${1#*=}" |                 TAG="${1#*=}" | ||||||
|                 shift |                 shift | ||||||
|             ;; |             ;; | ||||||
|  |             --del) | ||||||
|  |                 rsync_args+=(--delete-before) | ||||||
|  |                 shift | ||||||
|  |             ;; | ||||||
|             -h|--help) |             -h|--help) | ||||||
|                 artixpkg_repo_import_usage |                 artixpkg_repo_import_usage | ||||||
|                 exit 0 |                 exit 0 | ||||||
| @@ -111,9 +114,8 @@ artixpkg_repo_import() { | |||||||
|                 fi |                 fi | ||||||
|                 stat_done |                 stat_done | ||||||
|  |  | ||||||
|                 stat_busy "Fetching upstream tags" |                 msg2 "Fetching upstream tags" | ||||||
|                 git fetch --tags upstream main |                 git fetch --tags upstream main | ||||||
|                 stat_done |  | ||||||
|  |  | ||||||
|                 local latest version |                 local latest version | ||||||
|                 latest=$(git describe --tags FETCH_HEAD) |                 latest=$(git describe --tags FETCH_HEAD) | ||||||
| @@ -122,7 +124,12 @@ artixpkg_repo_import() { | |||||||
|                     version="${TAG}" |                     version="${TAG}" | ||||||
|                 fi |                 fi | ||||||
|  |  | ||||||
|                 stat_busy "Importing upstream changeset for ${version}" |                 if ! has_remote_changes; then | ||||||
|  |                     show_agent | ||||||
|  |                     msg "Querying ${pkgbase} ..." | ||||||
|  |                     if ! show_db; then | ||||||
|  |                         warning "Could not query ${REPO_DB}" | ||||||
|  |                     fi | ||||||
|  |  | ||||||
|                     git checkout "${version}" -b "${version}" &>/dev/null |                     git checkout "${version}" -b "${version}" &>/dev/null | ||||||
|                     local temp |                     local temp | ||||||
| @@ -132,11 +139,12 @@ artixpkg_repo_import() { | |||||||
|                     git checkout master &>/dev/null |                     git checkout master &>/dev/null | ||||||
|                     git branch -D "${version}" &>/dev/null |                     git branch -D "${version}" &>/dev/null | ||||||
|  |  | ||||||
|                 stat_done |                     msg "Importing upstream changeset for ${version}" | ||||||
|  |  | ||||||
|                     rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/ #&>/dev/null |                     rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/ #&>/dev/null | ||||||
|  |  | ||||||
|  |                     msg2 "Patching ${pkgbase} ..." | ||||||
|                     patch_pkgbase "${pkgbase}" |                     patch_pkgbase "${pkgbase}" | ||||||
|  |                 fi | ||||||
|             ) |             ) | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -80,15 +80,31 @@ artixpkg_repo_move() { | |||||||
|             fi |             fi | ||||||
|             ( cd "${pkgbase}" || return |             ( cd "${pkgbase}" || return | ||||||
|  |  | ||||||
|  |                 if ! has_remote_changes; then | ||||||
|  |  | ||||||
|                     if [[ ! -f PKGBUILD ]]; then |                     if [[ ! -f PKGBUILD ]]; then | ||||||
|                         die "No PKGBUILD found in (%s)" "${pkgbase}" |                         die "No PKGBUILD found in (%s)" "${pkgbase}" | ||||||
|                     fi |                     fi | ||||||
|  |  | ||||||
|                 local commit_msg |                     local commit_msg src_version dest_version | ||||||
|                     commit_msg=$(get_commit_msg 'move' "${DEST}" "${SRC}") |                     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 | ||||||
|  |  | ||||||
|  |                         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 | ||||||
|  |                             fi | ||||||
|  |  | ||||||
|                             if [[ -n $(git status --porcelain --untracked-files=no) ]]; then |                             if [[ -n $(git status --porcelain --untracked-files=no) ]]; then | ||||||
|  |  | ||||||
|                                 stat_busy 'Staging files' |                                 stat_busy 'Staging files' | ||||||
| @@ -111,7 +127,24 @@ artixpkg_repo_move() { | |||||||
|                                 if ! show_db; then |                                 if ! show_db; then | ||||||
|                                     warning "Could not query ${REPO_DB}" |                                     warning "Could not query ${REPO_DB}" | ||||||
|                                 fi |                                 fi | ||||||
|  |  | ||||||
|                             fi |                             fi | ||||||
|  |  | ||||||
|  |                         elif (( ret < 0 )); then | ||||||
|  |  | ||||||
|  |                             error "${pkgbase}: invalid move: version $src_version < $dest_version!" | ||||||
|  |  | ||||||
|  |                         else | ||||||
|  |                             error "${pkgbase}: invalid move: version $src_version = $dest_version!" | ||||||
|  |  | ||||||
|  |                         fi | ||||||
|  |  | ||||||
|  |                     else | ||||||
|  |                         error "${pkgbase}: invalid move: version $src_version!" | ||||||
|  |                     fi | ||||||
|  |  | ||||||
|  |                 fi | ||||||
|  |  | ||||||
|             ) |             ) | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -73,6 +73,8 @@ artixpkg_repo_remove() { | |||||||
|             fi |             fi | ||||||
|             ( cd "${pkgbase}" || return |             ( cd "${pkgbase}" || return | ||||||
|  |  | ||||||
|  |                 if ! has_remote_changes; then | ||||||
|  |  | ||||||
|                     if [[ ! -f PKGBUILD ]]; then |                     if [[ ! -f PKGBUILD ]]; then | ||||||
|                         die "No PKGBUILD found in (%s)" "${pkgbase}" |                         die "No PKGBUILD found in (%s)" "${pkgbase}" | ||||||
|                     fi |                     fi | ||||||
| @@ -106,6 +108,8 @@ artixpkg_repo_remove() { | |||||||
|                         fi |                         fi | ||||||
|  |  | ||||||
|                     fi |                     fi | ||||||
|  |  | ||||||
|  |                 fi | ||||||
|             ) |             ) | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,18 +8,6 @@ ARTOOLS_INCLUDE_REPO_SHOW_SH=1 | |||||||
| set -e | set -e | ||||||
|  |  | ||||||
|  |  | ||||||
| has_changeset(){ |  | ||||||
|     git fetch origin &>/dev/null |  | ||||||
|  |  | ||||||
|     if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then |  | ||||||
|         msg2 "changes: yes" |  | ||||||
|         git status -sb |  | ||||||
|         return 0 |  | ||||||
|     fi |  | ||||||
|     msg2 "changes: no" |  | ||||||
|     return 1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| artixpkg_repo_show_usage() { | artixpkg_repo_show_usage() { | ||||||
|     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} |     local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} | ||||||
|     cat <<- _EOF_ |     cat <<- _EOF_ | ||||||
| @@ -84,15 +72,13 @@ artixpkg_repo_show() { | |||||||
|             fi |             fi | ||||||
|             ( cd "${pkgbase}" || return |             ( cd "${pkgbase}" || return | ||||||
|  |  | ||||||
|                 msg "Checking origin for changes" |                 if ! has_remote_changes; then | ||||||
|                 if has_changeset; then |  | ||||||
|                     warning "Remote changes detected! Please update (%s)" "${pkgbase}" |  | ||||||
|                 fi |  | ||||||
|  |  | ||||||
|                     if [[ ! -f PKGBUILD ]]; then |                     if [[ ! -f PKGBUILD ]]; then | ||||||
|                         die "No PKGBUILD found in (%s)" "${pkgbase}" |                         die "No PKGBUILD found in (%s)" "${pkgbase}" | ||||||
|                     fi |                     fi | ||||||
|  |  | ||||||
|  |                     show_agent | ||||||
|  |  | ||||||
|                     msg "Querying ${pkgbase} ..." |                     msg "Querying ${pkgbase} ..." | ||||||
|                     if ! show_db; then |                     if ! show_db; then | ||||||
|                         warning "Could not query ${REPO_DB}" |                         warning "Could not query ${REPO_DB}" | ||||||
| @@ -107,6 +93,7 @@ artixpkg_repo_show() { | |||||||
|                         msg "Showing srcinfo pkgs ..." |                         msg "Showing srcinfo pkgs ..." | ||||||
|                         show_srcinfo_pkgs |                         show_srcinfo_pkgs | ||||||
|                     fi |                     fi | ||||||
|  |                 fi | ||||||
|  |  | ||||||
|             ) |             ) | ||||||
|         fi |         fi | ||||||
|   | |||||||
| @@ -97,6 +97,8 @@ STARTDIR=$(pwd) | |||||||
| (( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT | (( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT | ||||||
| TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) | TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) | ||||||
|  |  | ||||||
|  | changed=0 | ||||||
|  |  | ||||||
| for _pkgname in "${pkgname[@]}"; do | for _pkgname in "${pkgname[@]}"; do | ||||||
|     comparepkg=$_pkgname |     comparepkg=$_pkgname | ||||||
|     pkgurl= |     pkgurl= | ||||||
| @@ -151,10 +153,16 @@ for _pkgname in "${pkgname[@]}"; do | |||||||
|     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then |     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then | ||||||
|         message="Sonames differ in $_pkgname!" |         message="Sonames differ in $_pkgname!" | ||||||
|         (( WARN )) && warning "$message" || msg "$message" |         (( WARN )) && warning "$message" || msg "$message" | ||||||
|         printf "%s\n" "$diff_output" |         printf "%s\n" "$diff_output" 2>&1 | tee "${pkgfile##*/}-checkpkg.log" | ||||||
|  |         changed=1 | ||||||
|     else |     else | ||||||
|         msg "No soname differences for %s." "$_pkgname" |         msg "No soname differences for %s." "$_pkgname" | ||||||
|     fi |     fi | ||||||
| done | done | ||||||
|  |  | ||||||
| (( RMDIR )) || msg "Files saved to %s" "$TEMPDIR" | if ! (( RMDIR )); then | ||||||
|  |     msg "Files saved to %s" "$TEMPDIR" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | exit "$changed" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -79,14 +79,13 @@ IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}") | |||||||
| load_makepkg_config | load_makepkg_config | ||||||
| HOME=$ORIG_HOME | HOME=$ORIG_HOME | ||||||
|  |  | ||||||
| msg "Running checkpkg" | [[ -d $PKGDEST ]]    || PKGDEST=$PWD | ||||||
|  | [[ -d $SRCDEST ]]    || SRCDEST=$PWD | ||||||
|  | [[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD | ||||||
|  | [[ -d $LOGDEST ]]    || LOGDEST=$PWD | ||||||
|  |  | ||||||
| if chroot-run \ | msg "Running checkpkg" | ||||||
|     -b "-B:${PWD}:/startdir -B:${SRCDEST}:/srcdest" \ | mapfile -t pkgnames < <(bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"') | ||||||
|     "$copydir" true |  | ||||||
| then |  | ||||||
|     mapfile -t pkgnames < <(sudo -u "$makepkg_user" bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"') |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \ | mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \ | ||||||
|     --dbpath "$copydir"/var/lib/pacman \ |     --dbpath "$copydir"/var/lib/pacman \ | ||||||
| @@ -109,15 +108,4 @@ for remotepkg in "${remotepkgs[@]}"; do | |||||||
|     fi |     fi | ||||||
| done | done | ||||||
|  |  | ||||||
| pkgfiles="${remotepkgs[@]/#file:\/\//}" | sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}" | ||||||
|  |  | ||||||
| sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${pkgfiles[@]}" |  | ||||||
|  |  | ||||||
| msg "Running namcap" |  | ||||||
| #msg2 "Checking %s\n" "PKGBUILD" |  | ||||||
| sudo -u "$makepkg_user" namcap PKGBUILD 2>&1 | tee "PKGBUILD-namcap.log" |  | ||||||
|  |  | ||||||
| for pkgfile in "${pkgfiles[@]}"; do |  | ||||||
|     #msg2 "Checking %s\n" "${pkgfile##*/}" |  | ||||||
|     sudo -u "$makepkg_user" namcap "$pkgfile" 2>&1 | tee "${pkgfile##*/}-namcap.log" |  | ||||||
| done |  | ||||||
|   | |||||||
| @@ -1,73 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # SPDX-License-Identifier: GPL-3.0-or-later |  | ||||||
|  |  | ||||||
| LIBDIR=${LIBDIR:-'@libdir@'} |  | ||||||
|  |  | ||||||
| # shellcheck source=src/lib/base/message.sh |  | ||||||
| source "${LIBDIR}"/base/message.sh |  | ||||||
|  |  | ||||||
| usage() { |  | ||||||
|     cat <<- _EOF_ |  | ||||||
|         Usage: ${BASH_SOURCE[0]##*/} |  | ||||||
|  |  | ||||||
|         Export the PGP keys from a PKGBUILDs validpgpkeys array into the keys/pgp/ |  | ||||||
|         subdirectory. Useful for distributing packager validated source signing |  | ||||||
|         keys alongside PKGBUILDs. |  | ||||||
|  |  | ||||||
|         OPTIONS |  | ||||||
|             -h, --help      Show this help text |  | ||||||
| _EOF_ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # option checking |  | ||||||
| while (( $# )); do |  | ||||||
|     case $1 in |  | ||||||
|         -h|--help) usage; exit 0 ;; |  | ||||||
|         *) die "invalid argument: %s" "$1" ;; |  | ||||||
|     esac |  | ||||||
| done |  | ||||||
|  |  | ||||||
| if [[ ! -f PKGBUILD ]]; then |  | ||||||
|     die "This must be run a directory containing a PKGBUILD." |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| mapfile -t validpgpkeys < <( |  | ||||||
|     # shellcheck source=contrib/makepkg/PKGBUILD.proto |  | ||||||
|     . ./PKGBUILD |  | ||||||
|     if (( ${#validpgpkeys[@]} )); then |  | ||||||
|         printf "%s\n" "${validpgpkeys[@]}" |  | ||||||
|     fi |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| msg "Exporting ${#validpgpkeys[@]} PGP keys..." |  | ||||||
| if (( ${#validpgpkeys[@]} == 0 )); then |  | ||||||
|     exit 0 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT |  | ||||||
| TEMPDIR=$(mktemp -d --tmpdir export-pkgbuild-keys.XXXXXXXXXX) |  | ||||||
|  |  | ||||||
| mkdir -p keys/pgp |  | ||||||
| error=0 |  | ||||||
|  |  | ||||||
| for key in "${validpgpkeys[@]}"; do |  | ||||||
|     gpg --output "$TEMPDIR/$key.asc" --armor --export --export-options export-minimal "$key" 2>/dev/null |  | ||||||
|  |  | ||||||
|     # gpg does not give a non-zero return value if it fails to export... |  | ||||||
|     if [[ -f $TEMPDIR/$key.asc ]]; then |  | ||||||
|         msg2 "Exported $key" |  | ||||||
|         mv "$TEMPDIR/$key.asc" "keys/pgp/$key.asc" |  | ||||||
|     else |  | ||||||
|         if [[ -f keys/pgp/$key.asc ]]; then |  | ||||||
|             warning "Failed to update key: $key" |  | ||||||
|         else |  | ||||||
|             error "Key unavailable: $key" |  | ||||||
|             error=1 |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| if (( error )); then |  | ||||||
|     die "Failed to export all \'validpgpkeys\' entries." |  | ||||||
| fi |  | ||||||
							
								
								
									
										97
									
								
								src/pkg/manage-pkgbuild-keys.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								src/pkg/manage-pkgbuild-keys.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | |||||||
|  | #!/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 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | usage() { | ||||||
|  |     cat <<- _EOF_ | ||||||
|  |         Usage: ${BASH_SOURCE[0]##*/} | ||||||
|  |  | ||||||
|  |         Export or import the PGP keys from a PKGBUILDs validpgpkeys array into/from the keys/pgp/ | ||||||
|  |         subdirectory. Useful for distributing packager validated source signing | ||||||
|  |         keys alongside PKGBUILDs. | ||||||
|  |  | ||||||
|  |         OPTIONS | ||||||
|  |             -i, --import    Import keys | ||||||
|  |             -e, --export    Export keys | ||||||
|  |             -h, --help      Show this help text | ||||||
|  | _EOF_ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | action= | ||||||
|  |  | ||||||
|  | # option checking | ||||||
|  | while (( $# )); do | ||||||
|  |     case $1 in | ||||||
|  |         -i|--import) action="import"; shift ;; | ||||||
|  |         -e|--export) action="export"; shift ;; | ||||||
|  |         -h|--help) usage; exit 0 ;; | ||||||
|  |         *) die "invalid argument: %s" "$1" ;; | ||||||
|  |     esac | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if [[ ! -f PKGBUILD ]]; then | ||||||
|  |     die "This must be run a directory containing a PKGBUILD." | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | mapfile -t validpgpkeys < <( | ||||||
|  |     # shellcheck source=contrib/makepkg/PKGBUILD.proto | ||||||
|  |     . ./PKGBUILD | ||||||
|  |     if (( ${#validpgpkeys[@]} )); then | ||||||
|  |         printf "%s\n" "${validpgpkeys[@]}" | ||||||
|  |     fi | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | if [[ "$action" == 'export' ]]; then | ||||||
|  |     msg "Exporting ${#validpgpkeys[@]} PGP keys..." | ||||||
|  |     if (( ${#validpgpkeys[@]} == 0 )); then | ||||||
|  |         exit 0 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT | ||||||
|  |     TEMPDIR=$(mktemp -d --tmpdir export-pkgbuild-keys.XXXXXXXXXX) | ||||||
|  |  | ||||||
|  |     mkdir -p keys/pgp | ||||||
|  |     error=0 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     for key in "${validpgpkeys[@]}"; do | ||||||
|  |         gpg --output "$TEMPDIR/$key.asc" --armor --export --export-options export-minimal "$key" 2>/dev/null | ||||||
|  |  | ||||||
|  |         # gpg does not give a non-zero return value if it fails to export... | ||||||
|  |         if [[ -f $TEMPDIR/$key.asc ]]; then | ||||||
|  |             msg2 "Exported $key" | ||||||
|  |             mv "$TEMPDIR/$key.asc" "keys/pgp/$key.asc" | ||||||
|  |         else | ||||||
|  |             if [[ -f keys/pgp/$key.asc ]]; then | ||||||
|  |                 warning "Failed to update key: $key" | ||||||
|  |             else | ||||||
|  |                 error "Key unavailable: $key" | ||||||
|  |                 error=1 | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  | elif [[ "$action" == 'import' ]]; then | ||||||
|  |     msg "Ensuring required PGP keys are present..." | ||||||
|  |     for key in "${validpgpkeys[@]}"; do | ||||||
|  |         msg2 "Checking for $key..." | ||||||
|  |         if ! gpg --recv-keys $key || gpg --fingerprint $key; then | ||||||
|  |             if [[ -f keys/pgp/$key.asc ]]; then | ||||||
|  |                 msg2 "Importing key from local..." | ||||||
|  |                 gpg --import keys/pgp/$key.asc | ||||||
|  |             else | ||||||
|  |                 error "Key unavailable: $key" | ||||||
|  |                 error=1 | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if (( error )); then | ||||||
|  |     die "Failed to $action all \'validpgpkeys\' entries." | ||||||
|  | fi | ||||||
| @@ -36,5 +36,10 @@ for pkg in "${passfiles[@]}"; do | |||||||
|         msg2 "Found: %s" "${pkgfile}" |         msg2 "Found: %s" "${pkgfile}" | ||||||
|         [[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig |         [[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig | ||||||
|         sign_pkg "${pkgfile}" |         sign_pkg "${pkgfile}" | ||||||
|  |         ret=0 | ||||||
|  |     else | ||||||
|  |         ret=1 | ||||||
|     fi |     fi | ||||||
| done | done | ||||||
|  |  | ||||||
|  | exit "$ret" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user