From 67fe861b56036f427b2e414ab0f7bae73981cb81 Mon Sep 17 00:00:00 2001 From: Wesley van Tilburg Date: Sun, 1 Mar 2026 19:23:31 +0100 Subject: [PATCH] asahi-cosmic: add gvfs-mtp package --- changelog.sh | 186 +++++++++++++++--------------- images/asahi-cosmic/packages.yaml | 1 + 2 files changed, 94 insertions(+), 93 deletions(-) diff --git a/changelog.sh b/changelog.sh index 6fd8366..9f9287b 100755 --- a/changelog.sh +++ b/changelog.sh @@ -1,11 +1,10 @@ #!/usr/bin/env bash -set -euo pipefail +set -euox pipefail IMAGE="$1" VERSION="$2" -# Convert to absolute path -ROOTFS="$(realpath "images/${IMAGE}/rootfs")" +ROOTFS="${GITHUB_WORKSPACE}/images/${IMAGE}/rootfs" CHANGELOG_DIR="changelogs/${IMAGE}" mkdir -p "${CHANGELOG_DIR}" @@ -15,102 +14,103 @@ PKG_PREV="${CHANGELOG_DIR}/packages-latest.txt" BUILD_ID="$(cat .buildid)" CHANGELOG_FILE="${CHANGELOG_DIR}/${VERSION}.${BUILD_ID}.json" -# Extract package list (name + evr) +# Ensure rpmdb exists +if [[ ! -f "${ROOTFS}/usr/lib/sysimage/rpm/Packages" ]]; then + echo "WARNING: rpmdb missing in rootfs (${ROOTFS})" + echo "Skipping changelog generation." + exit 0 +fi + +# Extract package list rpm -qa --root "${ROOTFS}" --qf '%{NAME} %{EVR}\n' | sort > "${PKG_CUR}" +# Prepare safe temp files +CUR_NAMES_FILE="$(mktemp)" +PREV_NAMES_FILE="$(mktemp)" + +cut -d' ' -f1 "${PKG_CUR}" | sort > "${CUR_NAMES_FILE}" + if [[ -f "${PKG_PREV}" ]]; then - CUR_NAMES="$(cut -d' ' -f1 "${PKG_CUR}" | sort)" - PREV_NAMES="$(cut -d' ' -f1 "${PKG_PREV}" | sort)" - - ADDED_NAMES="$(comm -13 <(echo "${PREV_NAMES}") <(echo "${CUR_NAMES}"))" - REMOVED_NAMES="$(comm -23 <(echo "${PREV_NAMES}") <(echo "${CUR_NAMES}"))" - COMMON_NAMES="$(comm -12 <(echo "${PREV_NAMES}") <(echo "${CUR_NAMES}"))" - - ADDED_LIST=() - while read -r name; do - [[ -z "$name" ]] && continue - ver="$(grep -E "^${name} " "${PKG_CUR}" | awk '{print $2}')" - ADDED_LIST+=("${name} ${ver}") - done <<< "${ADDED_NAMES}" - - REMOVED_LIST=() - while read -r name; do - [[ -z "$name" ]] && continue - ver="$(grep -E "^${name} " "${PKG_PREV}" | awk '{print $2}')" - REMOVED_LIST+=("${name} ${ver}") - done <<< "${REMOVED_NAMES}" - - UPDATED_LIST=() - while read -r name; do - [[ -z "$name" ]] && continue - old_ver="$(grep -E "^${name} " "${PKG_PREV}" | awk '{print $2}')" - new_ver="$(grep -E "^${name} " "${PKG_CUR}" | awk '{print $2}')" - if [[ "${old_ver}" != "${new_ver}" ]]; then - UPDATED_LIST+=("${name} ${old_ver} -> ${new_ver}") - fi - done <<< "${COMMON_NAMES}" - - ADDED_COUNT="${#ADDED_LIST[@]}" - REMOVED_COUNT="${#REMOVED_LIST[@]}" - UPDATED_COUNT="${#UPDATED_LIST[@]}" - - { - echo "{" - echo " \"image\": \"${IMAGE}\"," - echo " \"version\": \"${VERSION}\"," - echo " \"build_id\": \"${BUILD_ID}\"," - echo " \"added_count\": ${ADDED_COUNT}," - echo " \"removed_count\": ${REMOVED_COUNT}," - echo " \"updated_count\": ${UPDATED_COUNT}," - echo " \"added\": [" - for i in "${!ADDED_LIST[@]}"; do - sep=$([[ $i -lt $((ADDED_COUNT-1)) ]] && echo "," || echo "") - printf ' "%s"%s\n' "${ADDED_LIST[$i]}" "${sep}" - done - echo " ]," - echo " \"removed\": [" - for i in "${!REMOVED_LIST[@]}"; do - sep=$([[ $i -lt $((REMOVED_COUNT-1)) ]] && echo "," || echo "") - printf ' "%s"%s\n' "${REMOVED_LIST[$i]}" "${sep}" - done - echo " ]," - echo " \"updated\": [" - for i in "${!UPDATED_LIST[@]}"; do - sep=$([[ $i -lt $((UPDATED_COUNT-1)) ]] && echo "," || echo "") - printf ' "%s"%s\n' "${UPDATED_LIST[$i]}" "${sep}" - done - echo " ]" - echo "}" - } > "${CHANGELOG_FILE}" - + cut -d' ' -f1 "${PKG_PREV}" | sort > "${PREV_NAMES_FILE}" else - ADDED_LIST=() - while read -r name ver; do - ADDED_LIST+=("${name} ${ver}") - done < "${PKG_CUR}" - - ADDED_COUNT="${#ADDED_LIST[@]}" - - { - echo "{" - echo " \"image\": \"${IMAGE}\"," - echo " \"version\": \"${VERSION}\"," - echo " \"build_id\": \"${BUILD_ID}\"," - echo " \"added_count\": ${ADDED_COUNT}," - echo " \"removed_count\": 0," - echo " \"updated_count\": 0," - echo " \"added\": [" - for i in "${!ADDED_LIST[@]}"; do - sep=$([[ $i -lt $((ADDED_COUNT-1)) ]] && echo "," || echo "") - printf ' "%s"%s\n' "${ADDED_LIST[$i]}" "${sep}" - done - echo " ]," - echo " \"removed\": []," - echo " \"updated\": []" - echo "}" - } > "${CHANGELOG_FILE}" + cp "${CUR_NAMES_FILE}" "${PREV_NAMES_FILE}" fi +# Safe comm operations +ADDED_NAMES="$(comm -13 "${PREV_NAMES_FILE}" "${CUR_NAMES_FILE}" || true)" +REMOVED_NAMES="$(comm -23 "${PREV_NAMES_FILE}" "${CUR_NAMES_FILE}" || true)" +COMMON_NAMES="$(comm -12 "${PREV_NAMES_FILE}" "${CUR_NAMES_FILE}" || true)" + +# Helper: get version from file using awk (exact match) +get_ver() { + local pkg="$1" + local file="$2" + awk -v p="$pkg" '$1 == p {print $2}' "$file" +} + +# Build lists +ADDED_LIST=() +while read -r name; do + [[ -z "$name" ]] && continue + ver="$(get_ver "$name" "$PKG_CUR")" + ADDED_LIST+=("${name} ${ver}") +done <<< "${ADDED_NAMES}" + +REMOVED_LIST=() +while read -r name; do + [[ -z "$name" ]] && continue + ver="$(get_ver "$name" "$PKG_PREV")" + REMOVED_LIST+=("${name} ${ver}") +done <<< "${REMOVED_NAMES}" + +UPDATED_LIST=() +while read -r name; do + [[ -z "$name" ]] && continue + old_ver="$(get_ver "$name" "$PKG_PREV")" + new_ver="$(get_ver "$name" "$PKG_CUR")" + + # Skip if either version is missing + [[ -z "$old_ver" || -z "$new_ver" ]] && continue + + if [[ "$old_ver" != "$new_ver" ]]; then + UPDATED_LIST+=("${name} ${old_ver} -> ${new_ver}") + fi +done <<< "${COMMON_NAMES}" + +ADDED_COUNT="${#ADDED_LIST[@]}" +REMOVED_COUNT="${#REMOVED_LIST[@]}" +UPDATED_COUNT="${#UPDATED_LIST[@]}" + +# Write JSON +{ + echo "{" + echo " \"image\": \"${IMAGE}\"," + echo " \"version\": \"${VERSION}\"," + echo " \"build_id\": \"${BUILD_ID}\"," + echo " \"added_count\": ${ADDED_COUNT}," + echo " \"removed_count\": ${REMOVED_COUNT}," + echo " \"updated_count\": ${UPDATED_COUNT}," + echo " \"added\": [" + for i in "${!ADDED_LIST[@]}"; do + sep=$([[ $i -lt $((ADDED_COUNT-1)) ]] && echo "," || echo "") + printf ' "%s"%s\n' "${ADDED_LIST[$i]}" "${sep}" + done + echo " ]," + echo " \"removed\": [" + for i in "${!REMOVED_LIST[@]}"; do + sep=$([[ $i -lt $((REMOVED_COUNT-1)) ]] && echo "," || echo "") + printf ' "%s"%s\n' "${REMOVED_LIST[$i]}" "${sep}" + done + echo " ]," + echo " \"updated\": [" + for i in "${!UPDATED_LIST[@]}"; do + sep=$([[ $i -lt $((UPDATED_COUNT-1)) ]] && echo "," || echo "") + printf ' "%s"%s\n' "${UPDATED_LIST[$i]}" "${sep}" + done + echo " ]" + echo "}" +} > "${CHANGELOG_FILE}" + mv "${PKG_CUR}" "${PKG_PREV}" echo "Changelog written to ${CHANGELOG_FILE}" diff --git a/images/asahi-cosmic/packages.yaml b/images/asahi-cosmic/packages.yaml index a930b3f..3fba14d 100644 --- a/images/asahi-cosmic/packages.yaml +++ b/images/asahi-cosmic/packages.yaml @@ -25,6 +25,7 @@ packages: - plymouth-system-theme - system-config-printer - xdg-desktop-portal-gtk + - gvfs-mtp # Ensure that we have a kernel. Kernel packages are not in any comps group # - kernel # - kernel-modules