chore(ci): rework removed packages
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
nyyu 2025-04-09 09:27:40 +02:00
parent fea1198402
commit 67c01b74e9

View file

@ -12,6 +12,8 @@ readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m' readonly YELLOW='\033[1;33m'
readonly NC='\033[0m' # No Color readonly NC='\033[0m' # No Color
all_packages=()
trap 'echo -e "${RED}Error on line $LINENO${NC}"' ERR trap 'echo -e "${RED}Error on line $LINENO${NC}"' ERR
. .util.sh . .util.sh
@ -84,6 +86,9 @@ build() {
[[ "${upd}" == true ]] && update_pkg [[ "${upd}" == true ]] && update_pkg
fi fi
mapfile -t pkgnames < <(awk -F ' = ' '/^pkgname/ {print $2}' .SRCINFO)
all_packages+=("${pkgnames[@]}")
name=$(grep -m1 'pkgname' .SRCINFO | cut -d'=' -f2 | tr -d ' ') name=$(grep -m1 'pkgname' .SRCINFO | cut -d'=' -f2 | tr -d ' ')
ver=$(grep -m1 'pkgver' .SRCINFO | cut -d'=' -f2 | tr -d ' ') ver=$(grep -m1 'pkgver' .SRCINFO | cut -d'=' -f2 | tr -d ' ')
rel=$(grep -m1 'pkgrel' .SRCINFO | cut -d'=' -f2 | tr -d ' ') rel=$(grep -m1 'pkgrel' .SRCINFO | cut -d'=' -f2 | tr -d ' ')
@ -161,26 +166,26 @@ process_directories() {
} }
find_and_remove_deleted_packages() { find_and_remove_deleted_packages() {
local last_commit del=() log "INFO" "Finding removed packages"
if git cat-file -e "${CI_PREV_COMMIT_SHA:-}" 2>/dev/null; then
last_commit=${CI_PREV_COMMIT_SHA}
else
last_commit=$(git --no-pager log --oneline | grep -v 'CI SKIP' | cut -d' ' -f1 | sed -n '5p') || {
log "ERROR" "Failed to determine last commit"
return 1
}
fi
log "INFO" "Finding removed packages from ${last_commit}" mapfile -t repo_packages < <(
mapfile -t del < <( find "${REPO_DIR}" -type f -name "*.pkg.tar.zst" -exec basename {} \; |
{ awk -F'-' '{
git --no-pager diff "${last_commit}"..HEAD aur.txt | tail -n +4 | grep -E '^-' | cut -c2- name = $1;
git --no-pager diff --name-status "${last_commit}"..HEAD | grep -Po 'D\s+(\K.*)(?=/PKGBUILD)' for (i = 2; i <= NF - 3; i++) {
} | sort -u name = name "-" $i
}
print name
}' | sort -u
) )
if [[ ${#del[@]} -gt 0 ]]; then mapfile -t removed_packages < <(
for pkg in "${del[@]}"; do comm -23 <(printf "%s\n" "${repo_packages[@]}" | sort) <(printf "%s\n" "${all_packages[@]}" | sort)
)
log "INFO" "Removed packages: ${removed_packages[*]}"
if [[ ${#removed_packages[@]} -gt 0 ]]; then
for pkg in "${removed_packages[@]}"; do
log "INFO" "Removing package ${pkg}" log "INFO" "Removing package ${pkg}"
if ! repo-remove -s "${REPO_DIR}/nyyu.db.tar.zst" "${pkg}"; then if ! repo-remove -s "${REPO_DIR}/nyyu.db.tar.zst" "${pkg}"; then
log "WARN" "Failed to remove ${pkg} from repo" log "WARN" "Failed to remove ${pkg} from repo"
@ -189,8 +194,6 @@ find_and_remove_deleted_packages() {
log "WARN" "No files found for ${pkg} in ${REPO_DIR}/" log "WARN" "No files found for ${pkg} in ${REPO_DIR}/"
fi fi
done done
else
log "INFO" "No packages to remove"
fi fi
} }
@ -201,7 +204,7 @@ setup_git() {
git remote set-url origin "${CI_REPO_CLONE_URL}" git remote set-url origin "${CI_REPO_CLONE_URL}"
local forge_url="${CI_FORGE_URL#https://}" local forge_url="${CI_FORGE_URL#https://}"
cat > "${HOME}/.netrc" <<EOF cat >"${HOME}/.netrc" <<EOF
machine ${forge_url} machine ${forge_url}
login ${GIT_USER} login ${GIT_USER}
password ${GIT_TOKEN} password ${GIT_TOKEN}