Publish only intended package artifacts
This commit is contained in:
2 files changed
+51
-14
No files matched your search
+19
-8
@@ -149,11 +149,16 @@ fi
|
||||
# leave nvidia-580xx-dkms and opencl-nvidia-580xx behind. An output's own name
|
||||
# still matches, for pushing just one of them on purpose.
|
||||
#
|
||||
# pkgbase comes from .PKGINFO rather than the PKGBUILD: it is what makepkg
|
||||
# actually recorded, and it needs no guessing about which directory built what.
|
||||
pkgbase_of() {
|
||||
# Package identity comes from .PKGINFO rather than the filename or PKGBUILD: it
|
||||
# is what makepkg actually recorded, and it handles epochs and split packages.
|
||||
package_identity_of() {
|
||||
bsdtar -xOf "$1" .PKGINFO 2>/dev/null |
|
||||
awk -F ' = ' '$1 == "pkgbase" { print $2; exit }'
|
||||
awk -F ' = ' '
|
||||
$1 == "pkgname" { name = $2 }
|
||||
$1 == "pkgbase" { base = $2 }
|
||||
$1 == "pkgver" { version = $2 }
|
||||
END { print name "\t" base "\t" version }
|
||||
'
|
||||
}
|
||||
|
||||
FILES=()
|
||||
@@ -161,14 +166,18 @@ if [[ -z "$PACKAGES" ]]; then
|
||||
FILES=("${ALL_FILES[@]}")
|
||||
else
|
||||
declare -A MATCHED=()
|
||||
declare -A LATEST_FILE=()
|
||||
declare -A LATEST_VERSION=()
|
||||
for file in "${ALL_FILES[@]}"; do
|
||||
# name-version-release-arch.pkg.tar.zst -> name
|
||||
pkgname="${file%-*-*-*.pkg.tar.*}"
|
||||
pkgbase=$(pkgbase_of "$BUILD_OUTPUT_DIR/$file")
|
||||
IFS=$'\t' read -r pkgname pkgbase pkgver < <(package_identity_of "$BUILD_OUTPUT_DIR/$file")
|
||||
for wanted in $PACKAGES; do
|
||||
if [[ "$pkgname" == "$wanted" || "$pkgbase" == "$wanted" ]]; then
|
||||
FILES+=("$file")
|
||||
MATCHED["$wanted"]=1
|
||||
if [[ -z "${LATEST_FILE[$pkgname]:-}" ]] ||
|
||||
[[ $(vercmp "$pkgver" "${LATEST_VERSION[$pkgname]}") -gt 0 ]]; then
|
||||
LATEST_FILE["$pkgname"]="$file"
|
||||
LATEST_VERSION["$pkgname"]="$pkgver"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
@@ -181,6 +190,8 @@ else
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
mapfile -t FILES < <(printf '%s\n' "${LATEST_FILE[@]}" | sort)
|
||||
fi
|
||||
|
||||
if [[ ${#FILES[@]} -eq 0 ]]; then
|
||||
|
||||
Reference in new issue
Block a user