Compare commits

...

7 Commits

Author SHA1 Message Date
Christian Heusel
8af7a50c03 chore(release): version v1.3.1 2025-01-06 10:11:07 +01:00
Christian Heusel
bed2b5db28 fix(gitlab): prevent division by 0 for missing total pages
As it turns out the Gitlab api is not guaranteed to return the
x-total-pages header for larger query result which previously resulted
in a division by zero for pkgctl search as the utlity function assumed
that this value would always be set to a positive integer.

Fixes #255

Link: https://gitlab.com/gitlab-org/gitlab/-/issues/436373
Component: gitlab.sh
Signed-off-by: Christian Heusel <christian@heusel.eu>
2025-01-05 20:19:33 +01:00
Levente Polyak
47d5ea1e89 fix(version): Disable Git user configs to avoid side-effects
The nvchecker upstream version checks are expected to work as is on any
machines without the need of manual Git user configuration. However,
certain user configuration may have a side-effect on version checks.
Subsequently we try to avoid this situation by always disabling Git
config locations.

Component: pkgctl version check
Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2025-01-03 23:35:59 +01:00
Jakub Klinkovský
8df81ecd7c fix: declare local arrays before using mapfile 2025-01-03 19:04:01 +01:00
Jakub Klinkovský
1101de9fb9 fix(offload-build): download logs even when the build fails
Fixes #260
2024-12-14 07:34:34 +01:00
Christian Heusel
d5e1c5fae3 fix: Display issue comments in chronological order
Fixes #259

Fixes: 0df36df ("feat(issue): add subcommand to list group and project issues")
Component: pkgctl issue view
Signed-off-by: Christian Heusel <christian@heusel.eu>
2024-12-13 21:33:51 +01:00
Zhou Qiankang
e8ab01d662 fix(checkpkg): add a default value for terminal width
* Ensures availability when $COLUMNS is not present

Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2024-12-08 23:51:12 +08:00
9 changed files with 52 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
SHELL=/bin/bash -o pipefail SHELL=/bin/bash -o pipefail
V=1.3.0 V=1.3.1
BUILDTOOLVER ?= $(V) BUILDTOOLVER ?= $(V)
PREFIX = /usr/local PREFIX = /usr/local

View File

@@ -140,7 +140,7 @@ for _pkgname in "${pkgname[@]}"; do
bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old" bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old"
bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname" bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname"
diff --side-by-side --suppress-common-lines --width="$COLUMNS" --color=auto "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" diff --side-by-side --suppress-common-lines --width="${COLUMNS:-130}" --color=auto "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname"
find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old" find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old"
find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname" find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname"

View File

@@ -14,6 +14,8 @@ set -o pipefail
archweb_query_all_packages() { archweb_query_all_packages() {
local -a pkgbases
[[ -z ${WORKDIR:-} ]] && setup_workdir [[ -z ${WORKDIR:-} ]] && setup_workdir
stat_busy "Query all released packages" stat_busy "Query all released packages"
@@ -36,6 +38,7 @@ archweb_query_all_packages() {
archweb_query_maintainer_packages() { archweb_query_maintainer_packages() {
local maintainer=$1 local maintainer=$1
local -a pkgbases
[[ -z ${WORKDIR:-} ]] && setup_workdir [[ -z ${WORKDIR:-} ]] && setup_workdir

View File

@@ -119,11 +119,13 @@ gitlab_api_call_paged() {
local next_page=1 local next_page=1
local total_pages=1 local total_pages=1
local known_total_pages=1
local percentage=100
while [[ -n "${next_page}" ]]; do while [[ -n "${next_page}" ]]; do
percentage=$(( 100 * next_page / total_pages )) percentage=$(( 100 * next_page / total_pages ))
printf "📡 Querying GitLab: %s/%s [%s] %%spinner%%" \ printf "📡 Querying GitLab: %s/%s [%s] %%spinner%%" \
"${BOLD}${next_page}" "${total_pages}" "${percentage}%${ALL_OFF}" \ "${BOLD}${next_page}" "${known_total_pages}" "${percentage}%${ALL_OFF}" \
> "${tmp_file}" > "${tmp_file}"
mv "${tmp_file}" "${status_file}" mv "${tmp_file}" "${status_file}"
@@ -148,6 +150,15 @@ gitlab_api_call_paged() {
next_page=$(grep "x-next-page" "${header}" | tr -d '\r' | awk '{ print $2 }') next_page=$(grep "x-next-page" "${header}" | tr -d '\r' | awk '{ print $2 }')
total_pages=$(grep "x-total-pages" "${header}" | tr -d '\r' | awk '{ print $2 }') total_pages=$(grep "x-total-pages" "${header}" | tr -d '\r' | awk '{ print $2 }')
# The api is not guaranteed to return x-total-pages for larger query results
# https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/23931
# https://gitlab.com/gitlab-org/gitlab/-/issues/436373
if (( total_pages == 0 )); then
total_pages=${next_page}
known_total_pages="?"
else
known_total_pages=${total_pages}
fi
done done
jq --slurp add "${api_workdir}"/result.* > "${outfile}" jq --slurp add "${api_workdir}"/result.* > "${outfile}"

View File

@@ -181,7 +181,7 @@ pkgctl_issue_view() {
status_dir=$(mktemp --tmpdir="${WORKDIR}" --directory pkgctl-gitlab-api.XXXXXXXXXX) status_dir=$(mktemp --tmpdir="${WORKDIR}" --directory pkgctl-gitlab-api.XXXXXXXXXX)
printf "📡 Querying GitLab issue notes API..." > "${status_dir}/status" printf "📡 Querying GitLab issue notes API..." > "${status_dir}/status"
term_spinner_start "${status_dir}" term_spinner_start "${status_dir}"
if ! output=$(gitlab_project_issue_notes "${project_path}" "${iid}" "${status_dir}/status"); then if ! output=$(gitlab_project_issue_notes "${project_path}" "${iid}" "${status_dir}/status" "sort=asc&order_by=created_at"); then
term_spinner_stop "${status_dir}" term_spinner_stop "${status_dir}"
msg_error "Failed to fetch comments" msg_error "Failed to fetch comments"
exit 1 exit 1

View File

@@ -65,6 +65,7 @@ pkgctl_repo_clone() {
local CONFIGURE_OPTIONS=() local CONFIGURE_OPTIONS=()
local jobs= local jobs=
jobs=$(nproc) jobs=$(nproc)
local -a pkgbases
# variables # variables
local command=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}} local command=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}

View File

@@ -33,6 +33,7 @@ update_pacman_repo_cache() {
get_pacman_repo_from_pkgbuild() { get_pacman_repo_from_pkgbuild() {
local path=${1:-PKGBUILD} local path=${1:-PKGBUILD}
local repo=${2:-multilib} local repo=${2:-multilib}
local -a pkgnames
# shellcheck source=contrib/makepkg/PKGBUILD.proto # shellcheck source=contrib/makepkg/PKGBUILD.proto
mapfile -t pkgnames < <(source "${path}"; printf "%s\n" "${pkgname[@]}") mapfile -t pkgnames < <(source "${path}"; printf "%s\n" "${pkgname[@]}")
@@ -67,6 +68,7 @@ get_pkgnames_from_repo_pkgbase() {
local repo=$1 local repo=$1
shift shift
local pkgbases=("$@") local pkgbases=("$@")
local -a pkgnames
# update the pacman repo cache if it doesn't exist yet # update the pacman repo cache if it doesn't exist yet
if [[ ! -d "${_DEVTOOLS_PACMAN_CACHE_DIR}" ]]; then if [[ ! -d "${_DEVTOOLS_PACMAN_CACHE_DIR}" ]]; then

View File

@@ -292,7 +292,8 @@ get_upstream_version() {
opts+=(--keyfile "${keyfile}") opts+=(--keyfile "${keyfile}")
fi fi
if ! output=$(GIT_TERMINAL_PROMPT=0 nvchecker --file "${config}" --logger json "${opts[@]}" 2>&1 | \ if ! output=$(GIT_TERMINAL_PROMPT=0 GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_SYSTEM=/dev/null \
nvchecker --file "${config}" --logger json "${opts[@]}" 2>&1 | \
jq --raw-output 'select((.level != "debug") and (.event != "ignoring invalid version"))'); then jq --raw-output 'select((.level != "debug") and (.event != "ignoring invalid version"))'); then
printf "failed to run nvchecker: %s" "${output}" printf "failed to run nvchecker: %s" "${output}"
return 1 return 1

View File

@@ -114,25 +114,32 @@ ssh "${SSH_OPTS[@]}" -- "$server" "cd ${remote_temp@Q} && bsdtar --strip-compone
# Run the build command on the server # Run the build command on the server
msg "Running archbuild" msg "Running archbuild"
# shellcheck disable=SC2145 # shellcheck disable=SC2145
ssh "${SSH_OPTS[@]}" -t -- "$server" "cd ${remote_temp@Q} && export LOGDEST="" && ${archbuild_cmd[@]@Q}" || die if ssh "${SSH_OPTS[@]}" -t -- "$server" "cd ${remote_temp@Q} && export LOGDEST="" && ${archbuild_cmd[@]@Q}"; then
msg "Build complete" msg "Build complete"
# Get an array of files that should be downloaded from the server # Get an array of files that should be downloaded from the server
mapfile -t files < <( mapfile -t files < <(
ssh "${SSH_OPTS[@]}" -- "$server" " ssh "${SSH_OPTS[@]}" -- "$server" "
cd ${remote_temp@Q}"' && cd ${remote_temp@Q}"' &&
makepkg_user_config="${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" && makepkg_user_config="${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" &&
makepkg_config="/usr/share/devtools/makepkg.conf.d/'"${arch}"'.conf" && makepkg_config="/usr/share/devtools/makepkg.conf.d/'"${arch}"'.conf" &&
if [[ -f /usr/share/devtools/makepkg.conf.d/'"${repo}"'-'"${arch}"'.conf ]]; then if [[ -f /usr/share/devtools/makepkg.conf.d/'"${repo}"'-'"${arch}"'.conf ]]; then
makepkg_config="/usr/share/devtools/makepkg.conf.d/'"${repo}"'-'"${arch}"'.conf" makepkg_config="/usr/share/devtools/makepkg.conf.d/'"${repo}"'-'"${arch}"'.conf"
fi && fi &&
while read -r file; do while read -r file; do
[[ -f "${file}" ]] && printf "%s\n" "${file}" ||: [[ -f "${file}" ]] && printf "%s\n" "${file}" ||:
done < <(makepkg --config <(cat "${makepkg_user_config}" "${makepkg_config}" 2>/dev/null) --packagelist) && done < <(makepkg --config <(cat "${makepkg_user_config}" "${makepkg_config}" 2>/dev/null) --packagelist) &&
printf "%s\n" '"${remote_temp@Q}/PKGBUILD"' printf "%s\n" '"${remote_temp@Q}/PKGBUILD"'
find '"${remote_temp@Q}"' -name "*.log" find '"${remote_temp@Q}"' -name "*.log"
') ')
else
# Build failed, only the logs should be downloaded from the server
mapfile -t files < <(
ssh "${SSH_OPTS[@]}" -- "$server" '
find '"${remote_temp@Q}"' -name "*.log"
')
fi
if (( ${#files[@]} )); then if (( ${#files[@]} )); then
@@ -142,13 +149,14 @@ if (( ${#files[@]} )); then
if is_globfile "${TEMPDIR}"/*.log; then if is_globfile "${TEMPDIR}"/*.log; then
mv "${TEMPDIR}"/*.log "${LOGDEST:-${PWD}}/" mv "${TEMPDIR}"/*.log "${LOGDEST:-${PWD}}/"
fi fi
# missing PKGBUILD download means the build failed if is_globfile "${TEMPDIR}"/*.pkg.tar*; then
if [[ ! -f "${TEMPDIR}/PKGBUILD" ]]; then # Building a package may change the PKGBUILD during update_pkgver
mv "${TEMPDIR}/PKGBUILD" "${PWD}/"
mv "${TEMPDIR}"/*.pkg.tar* "${PKGDEST:-${PWD}}/"
else
error "Build failed, check logs in ${LOGDEST:-${PWD}}" error "Build failed, check logs in ${LOGDEST:-${PWD}}"
exit 1 exit 1
fi fi
mv "${TEMPDIR}/PKGBUILD" "${PWD}/"
mv "${TEMPDIR}"/*.pkg.tar* "${PKGDEST:-${PWD}}/"
else else
exit 1 exit 1
fi fi