From fa80c8dc5b52c4e44530cb094ee3477ed2522ce7 Mon Sep 17 00:00:00 2001 From: Matt Sephton Date: Sun, 13 Sep 2026 22:25:00 +0100 Subject: [PATCH] Restore Extra muxzip packaging for Archive Manager and Core Downloader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 2026-09-13 extra release shipped only Core - *.muxzip files with the libretro .so at the zip root. Archive Manager looks up a handler from the archive's top-level folder (core.sh, assign.sh, bios.sh, …) and skips anything else, so those installs reported "complete" without extracting anything. Two bugs in compress-and-release.yml caused that: 1. zip -r ../../../artifacts/... assumed system/extra/ (three levels). After the tree flattened to system/, the Extra/Base muxzips were written outside the workspace and never uploaded. 2. Per-core archives were a straight rename of core/*.so.zip, so they had no core/ prefix for Archive Manager. This restores Extra - .muxzip (the names Core Downloader on Jacaranda looks for) and wraps per-core archives as core/*.so. --- .github/workflows/compress-and-release.yml | 60 +++++++++++----------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/.github/workflows/compress-and-release.yml b/.github/workflows/compress-and-release.yml index 9f6c169..d49943b 100755 --- a/.github/workflows/compress-and-release.yml +++ b/.github/workflows/compress-and-release.yml @@ -35,44 +35,46 @@ jobs: esac done - - name: Compress Base and Extra systems + - name: Compress Extra system packages run: | - mkdir -p artifacts - - COMPRESS_SYSTEM() { - ROOT="$1" - PREFIX="$2" - - [ -d "$ROOT" ] || return - - for SYS in "$ROOT"/*; do - [ -d "$SYS" ] || continue - - NAME="$(basename "$SYS")" - OUT="artifacts/${PREFIX} - ${NAME}.muxzip" - - echo "Compressing: ($PREFIX) $SYS" - - ( - cd "$SYS" || exit 1 - zip -r9 "../../../$OUT" ./* >/dev/null 2>&1 || echo "zip failed for $SYS" - ) - done - } + mkdir -p "$GITHUB_WORKSPACE/artifacts" + + # system/ is two levels deep. The previous ../../../artifacts + # path assumed system/extra/ and wrote zips outside the + # workspace, so Extra/Base muxzips never made it onto the release. + for SYS in system/*; do + [ -d "$SYS" ] || continue + NAME="$(basename "$SYS")" + OUT="$GITHUB_WORKSPACE/artifacts/Extra - ${NAME}.muxzip" + echo "Compressing: (Extra) $SYS" + ( + cd "$SYS" || exit 1 + zip -r9 "$OUT" ./* >/dev/null 2>&1 || echo "zip failed for $SYS" + ) + done - COMPRESS_SYSTEM "system" "Base" + printf 'extra system archives: %s\n' "$(find "$GITHUB_WORKSPACE/artifacts" -name 'Extra - *.muxzip' | wc -l)" - - name: Publish core manifest and per core archives + - name: Publish core manifest and per-core archives run: | - cp data/manifest.json artifacts/core-manifest.json + cp data/manifest.json "$GITHUB_WORKSPACE/artifacts/core-manifest.json" + # Archive Manager only extracts muxzip top-level folders that have a + # matching /opt/muos/script/archive/.sh handler. A bare + # foo_libretro.so at the zip root is skipped with no error. + STAGE="$(mktemp -d)" for CORE_ZIP in core/*.so.zip; do [ -f "$CORE_ZIP" ] || continue - cp "$CORE_ZIP" "artifacts/Core - $(basename "$CORE_ZIP" .zip).muxzip" + rm -rf "$STAGE/core" + mkdir -p "$STAGE/core" + unzip -qq -o "$CORE_ZIP" -d "$STAGE/core" || continue + OUT="$GITHUB_WORKSPACE/artifacts/Core - $(basename "$CORE_ZIP" .zip).muxzip" + ( cd "$STAGE" && zip -r9 "$OUT" core >/dev/null 2>&1 ) || echo "zip failed for $CORE_ZIP" done + rm -rf "$STAGE" - printf 'manifest entries: %s\n' "$(jq 'length' artifacts/core-manifest.json)" - printf 'core archives: %s\n' "$(find artifacts -name 'Core - *.muxzip' | wc -l)" + printf 'manifest entries: %s\n' "$(jq 'length' "$GITHUB_WORKSPACE/artifacts/core-manifest.json")" + printf 'core archives: %s\n' "$(find "$GITHUB_WORKSPACE/artifacts" -name 'Core - *.muxzip' | wc -l)" - name: Create GitHub Release uses: softprops/action-gh-release@v1