mirror of
				https://gitlab.archlinux.org/archlinux/devtools.git
				synced 2025-11-04 01:34:42 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			master
			...
			b6a9d91bcb
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b6a9d91bcb | ||
| 
						 | 
					a2945b09a8 | 
@@ -3,7 +3,7 @@ pkgctl-auth(1)
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
pkgctl-auth - Authenticate with services like GitLab.
 | 
			
		||||
pkgctl-auth - Authenticate with serivces like GitLab.
 | 
			
		||||
 | 
			
		||||
Synopsis
 | 
			
		||||
--------
 | 
			
		||||
 
 | 
			
		||||
@@ -39,17 +39,6 @@ placed in the `$XDG_CONFIG_HOME`/nvchecker` directory. This keyfile is
 | 
			
		||||
used for providing the necessary authentication tokens required for
 | 
			
		||||
accessing the GitHub or GitLab API.
 | 
			
		||||
 | 
			
		||||
Combiner Source
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
To utilize the combiner source, the `pkgbase` section must be declared as the
 | 
			
		||||
combiner source. Additionally, individual sections should be added using a
 | 
			
		||||
quoted table key consisting of the `pkgbase` followed by the stage name,
 | 
			
		||||
separated by double colons. For example: `["sudo:stage1"]`.
 | 
			
		||||
 | 
			
		||||
This allows to chain different sources together into one result, or allow
 | 
			
		||||
multi stage transformation of our source via multiple regex.
 | 
			
		||||
 | 
			
		||||
Options
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,9 +49,6 @@ pkgctl diff::
 | 
			
		||||
pkgctl issue::
 | 
			
		||||
	Work with GitLab packaging issues
 | 
			
		||||
 | 
			
		||||
pkgctl license::
 | 
			
		||||
	Check and manage package licenses
 | 
			
		||||
 | 
			
		||||
pkgctl release::
 | 
			
		||||
	Release step to commit, tag and upload build artifacts
 | 
			
		||||
 | 
			
		||||
@@ -73,7 +70,6 @@ pkgctl-build(1)
 | 
			
		||||
pkgctl-db(1)
 | 
			
		||||
pkgctl-diff(1)
 | 
			
		||||
pkgctl-issue(1)
 | 
			
		||||
pkgctl-license(1)
 | 
			
		||||
pkgctl-release(1)
 | 
			
		||||
pkgctl-repo(1)
 | 
			
		||||
pkgctl-search(1)
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,7 @@ export RSYNC_OPTS=(
 | 
			
		||||
  --human-readable
 | 
			
		||||
  --progress
 | 
			
		||||
  --partial
 | 
			
		||||
  # suffix the partial dir with the PID in order to avoid clashes
 | 
			
		||||
  --partial-dir=.partial.$$
 | 
			
		||||
  --partial-dir=.partial
 | 
			
		||||
  --delay-updates
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -442,10 +441,3 @@ relative_date_unit() {
 | 
			
		||||
	done
 | 
			
		||||
	printf "1 second"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# escapes regex metacharacters in a given string
 | 
			
		||||
regex_escape() {
 | 
			
		||||
	# shellcheck disable=SC2001,SC2016
 | 
			
		||||
	sed 's/[\^.\[$()|*+?{\\]/\\&/g' <<<"$1"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -94,19 +94,19 @@ pkgctl_license_check() {
 | 
			
		||||
		pushd "${path}" >/dev/null
 | 
			
		||||
 | 
			
		||||
		if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
			msg_error "${BOLD}${path}:${ALL_OFF} no PKGBUILD found"
 | 
			
		||||
			msg_error "${BOLD}${pkgbase}:${ALL_OFF} no PKGBUILD found"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if [[ ! -f .SRCINFO ]]; then
 | 
			
		||||
			msg_error "${BOLD}${path}:${ALL_OFF} no .SRCINFO found"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
		# reset common PKGBUILD variables
 | 
			
		||||
		unset pkgbase
 | 
			
		||||
 | 
			
		||||
		if ! pkgbase=$(grep --max-count=1 --extended-regexp "pkgbase = (.+)" .SRCINFO | awk '{print $3}'); then
 | 
			
		||||
			msg_error "${BOLD}${path}:${ALL_OFF} pkgbase not found in .SRCINFO"
 | 
			
		||||
		# shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
		if ! . ./PKGBUILD; then
 | 
			
		||||
			msg_error "${BOLD}${pkgbase}:${ALL_OFF} failed to source PKGBUILD"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
		pkgbase=${pkgbase:-$pkgname}
 | 
			
		||||
 | 
			
		||||
		if [[ ! -e LICENSE ]]; then
 | 
			
		||||
			msg_error "${BOLD}${pkgbase}:${ALL_OFF} is missing the LICENSE file"
 | 
			
		||||
 
 | 
			
		||||
@@ -188,7 +188,6 @@ path = [
 | 
			
		||||
    "README.md",
 | 
			
		||||
    "keys/**",
 | 
			
		||||
    ".SRCINFO",
 | 
			
		||||
    ".gitignore",
 | 
			
		||||
    ".nvchecker.toml",
 | 
			
		||||
    "*.install",
 | 
			
		||||
    "*.sysusers",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,6 @@
 | 
			
		||||
DEVTOOLS_INCLUDE_UTIL_PKGBUILD_SH=1
 | 
			
		||||
 | 
			
		||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
 | 
			
		||||
# shellcheck source=src/lib/common.sh
 | 
			
		||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
 | 
			
		||||
# shellcheck source=src/lib/util/makepkg.sh
 | 
			
		||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/makepkg.sh
 | 
			
		||||
 | 
			
		||||
@@ -23,8 +21,6 @@ pkgbuild_set_pkgver() {
 | 
			
		||||
	local new_pkgver=$1
 | 
			
		||||
	local pkgver=${pkgver}
 | 
			
		||||
 | 
			
		||||
	pkgver="$(regex_escape "${pkgver}")"
 | 
			
		||||
 | 
			
		||||
	if [[ $(type -t pkgver) == function ]]; then
 | 
			
		||||
		# TODO: check if die or warn, if we provide _commit _gitcommit setter maybe?
 | 
			
		||||
		warning 'setting pkgver variable has no effect if the PKGBUILD has a pkgver() function'
 | 
			
		||||
 
 | 
			
		||||
@@ -304,11 +304,6 @@ get_upstream_version() {
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if ! output=$(jq --raw-output --exit-status 'select(.name == "'"${pkgbase}"'")' <<< "${output}"); then
 | 
			
		||||
		printf "failed to select pkgbase result from output"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if ! upstream_version=$(jq --raw-output --exit-status '.version' <<< "${output}"); then
 | 
			
		||||
		printf "failed to select version from result"
 | 
			
		||||
		return 1
 | 
			
		||||
@@ -351,16 +346,10 @@ nvchecker_check_config() {
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# check if the config contains any section other than pkgbase
 | 
			
		||||
	if [[ -n ${pkgbase} ]] && property=$(grep --max-count=1 --perl-regexp "^\\[(?!\"?${pkgbase//+/\\+}(:.+)?\"?\\]).+\\]" < "${config}"); then
 | 
			
		||||
	if [[ -n ${pkgbase} ]] && property=$(grep --max-count=1 --perl-regexp "^\\[(?!\"?${pkgbase//+/\\+}\"?\\]).+\\]" < "${config}"); then
 | 
			
		||||
		printf "non-pkgbase section not supported in %s: %s" "${config}" "${property}"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# check if the config is using the 'cmd' source
 | 
			
		||||
	if grep --extended-regexp --quiet '^\s*source\s*=\s*["'\'']cmd["'\''].*' "${config}"; then
 | 
			
		||||
		printf "using the 'cmd' source in %s is disallowed" "${config}"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvchecker_check_error() {
 | 
			
		||||
 
 | 
			
		||||
@@ -150,7 +150,9 @@ install_packages() {
 | 
			
		||||
	pkgnames=("${install_pkgs[@]##*/}")
 | 
			
		||||
 | 
			
		||||
	cp -- "${install_pkgs[@]}" "$copydir/root/"
 | 
			
		||||
	arch-nspawn "$copydir" "${bindmounts_ro[@]}" "${bindmounts_rw[@]}" "${bindmounts_tmpfs[@]}" \
 | 
			
		||||
	arch-nspawn "$copydir" \
 | 
			
		||||
		--machine="$(display_name installing "${pkgnames[@]}")" \
 | 
			
		||||
		"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" "${bindmounts_tmpfs[@]}" \
 | 
			
		||||
		pacman -U --noconfirm --ask=4 -- "${pkgnames[@]/#//root/}"
 | 
			
		||||
	ret=$?
 | 
			
		||||
	rm -- "${pkgnames[@]/#/$copydir/root/}"
 | 
			
		||||
@@ -291,6 +293,33 @@ move_products() {
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Usage: display_name verb pkgname [pkgname...]
 | 
			
		||||
display_name() {
 | 
			
		||||
	local max_hostname max_pkgnames_length max_pid_digits pkgnames tool verb
 | 
			
		||||
 | 
			
		||||
	max_hostname=64  # see gethostname(2)
 | 
			
		||||
	num_joiner_chars=3  # see template string below
 | 
			
		||||
	max_pid_digits=7  # ceil(log(2^22, 10))
 | 
			
		||||
 | 
			
		||||
	tool="${0##*/}"
 | 
			
		||||
	verb="${1?}"
 | 
			
		||||
	shift
 | 
			
		||||
	max_pkgnames_length=$((
 | 
			
		||||
		max_hostname - num_joiner_chars - max_pid_digits - "${#tool}" - "${#verb}"
 | 
			
		||||
	))
 | 
			
		||||
	# Normalize the package name so it doubles as a valid hostname
 | 
			
		||||
	# https://github.com/systemd/systemd/blob/v256/src/basic/hostname-util.c#L83-L136
 | 
			
		||||
	pkgnames="$(
 | 
			
		||||
		tr -s -c 'a-z0-9 ' - <<< "$*" | tr ' ' . | head -c ${max_pkgnames_length}
 | 
			
		||||
	)"
 | 
			
		||||
 | 
			
		||||
	if [[ $# -eq 0 ]]; then
 | 
			
		||||
		printf '%s.%s.%s' "${tool}" "${verb}" $$
 | 
			
		||||
	else
 | 
			
		||||
		printf '%s.%s.%s.%s' "${tool}" "${verb}" "${pkgnames%%-}" $$
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
while getopts 'hcur:I:l:nCTD:d:U:x:t:' arg; do
 | 
			
		||||
@@ -368,6 +397,7 @@ if [[ ! -d $copydir ]] || (( clean_first )); then
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
(( update_first )) && arch-nspawn "$copydir" \
 | 
			
		||||
		--machine="$(display_name updating)" \
 | 
			
		||||
		"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" "${bindmounts_tmpfs[@]}" \
 | 
			
		||||
		pacman -Syuu --noconfirm
 | 
			
		||||
 | 
			
		||||
@@ -396,11 +426,19 @@ nspawn_build_args=(
 | 
			
		||||
	"${bindmounts_tmpfs[@]}"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
	read -r -d $'\n' pkgbase
 | 
			
		||||
	mapfile -t pkgnames
 | 
			
		||||
} < <(sudo -u "$makepkg_user" bash -c '
 | 
			
		||||
		source PKGBUILD
 | 
			
		||||
		printf "%s\n" "${pkgbase:-${pkgname}}" "${pkgname[@]}"
 | 
			
		||||
')
 | 
			
		||||
 | 
			
		||||
if arch-nspawn "$copydir" \
 | 
			
		||||
	"${nspawn_build_args[@]}" \
 | 
			
		||||
	--machine="$(display_name building "${pkgbase}")" \
 | 
			
		||||
	/chrootbuild "${makepkg_args[@]}"
 | 
			
		||||
then
 | 
			
		||||
	mapfile -t pkgnames < <(sudo -u "$makepkg_user" bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"')
 | 
			
		||||
	move_products
 | 
			
		||||
else
 | 
			
		||||
	(( ret += 1 ))
 | 
			
		||||
@@ -413,8 +451,11 @@ if [[ $inspect == always ]] || ( [[ $inspect == failure ]] && (( ret != 0 )) );
 | 
			
		||||
	else
 | 
			
		||||
		error "Build failed, inspecting %s" "$copydir"
 | 
			
		||||
	fi
 | 
			
		||||
	# Use a short machine name without dots so the shell picks it up
 | 
			
		||||
	# as part of the window title
 | 
			
		||||
	arch-nspawn "$copydir" \
 | 
			
		||||
		"${nspawn_build_args[@]}" \
 | 
			
		||||
		--machine="inspecting-$$" \
 | 
			
		||||
		--user=builduser \
 | 
			
		||||
		--chdir=/build
 | 
			
		||||
fi
 | 
			
		||||
@@ -444,7 +485,9 @@ else
 | 
			
		||||
		for remotepkg in "${remotepkgs[@]}"; do
 | 
			
		||||
			if [[ $remotepkg != file://* ]]; then
 | 
			
		||||
				msg2 "Downloading current versions"
 | 
			
		||||
				arch-nspawn "$copydir" pacman --noconfirm -Swdd "${pkgnames[@]}"
 | 
			
		||||
				arch-nspawn "$copydir" \
 | 
			
		||||
					--machine="$(display_name downloading "${pkgnames[@]}")" \
 | 
			
		||||
					pacman --noconfirm -Swdd "${pkgnames[@]}"
 | 
			
		||||
				mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \
 | 
			
		||||
					--dbpath "$copydir"/var/lib/pacman \
 | 
			
		||||
					-Sddp "${pkgnames[@]}")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user