#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT="$(dirname "$SCRIPT_DIR")" VERSION=$(jq -r '.version' "$ROOT/src-tauri/tauri.conf.json") OUT_DIR="$ROOT/releases/$VERSION" PKG="bookmgr-client" # --------------------------------------------------------------- # 准备输出目录 # --------------------------------------------------------------- rm -rf "$OUT_DIR" mkdir -p "$OUT_DIR" echo "==> 收集 $PKG v$VERSION 产物 → $OUT_DIR" # --------------------------------------------------------------- # Web — 从 dist/ 打 tar.gz 和 zip # --------------------------------------------------------------- DIST="$ROOT/dist" if [[ -d "$DIST" ]] && [[ -f "$DIST/index.html" ]]; then TARBALL="$OUT_DIR/${PKG}-${VERSION}-web.tar.gz" echo " [web] $TARBALL" tar -czf "$TARBALL" -C "$DIST" . ZIPBALL="$OUT_DIR/${PKG}-${VERSION}-web.zip" echo " [web] $ZIPBALL" (cd "$DIST" && zip -qr "$ZIPBALL" .) else echo " [web] 跳过(dist/ 未就绪,请先运行 pnpm build)" fi # --------------------------------------------------------------- # Linux — AppImage / deb / rpm / pacman # --------------------------------------------------------------- BUNDLE="$ROOT/src-tauri/target/release/bundle" if [[ -d "$BUNDLE/appimage" ]]; then SRC=$(echo "$BUNDLE/appimage/${PKG}_"*_amd64.AppImage) if [[ -f "$SRC" ]]; then DST="$OUT_DIR/${PKG}-${VERSION}-linux-amd64.AppImage" echo " [appimage] $DST" cp "$SRC" "$DST" fi fi if [[ -d "$BUNDLE/deb" ]]; then SRC=$(echo "$BUNDLE/deb/${PKG}_"*_amd64.deb) if [[ -f "$SRC" ]]; then DST="$OUT_DIR/${PKG}-${VERSION}-linux-amd64.deb" echo " [deb] $DST" cp "$SRC" "$DST" fi fi if [[ -d "$BUNDLE/rpm" ]]; then SRC=$(echo "$BUNDLE/rpm/${PKG}-"*x86_64.rpm) if [[ -f "$SRC" ]]; then DST="$OUT_DIR/${PKG}-${VERSION}-linux-x86_64.rpm" echo " [rpm] $DST" cp "$SRC" "$DST" fi fi if [[ -d "$BUNDLE/pacman" ]]; then for f in "$BUNDLE/pacman/${PKG}-"*.pkg.tar.zst; do [[ -f "$f" ]] || continue base=$(basename "$f") # bookmgr-client-0.1.0-1-x86_64.pkg.tar.zst → bookmgr-client-0.1.0-linux-x86_64.pkg.tar.zst newname=$(echo "$base" | sed -E 's/-1-(x86_64|aarch64)/-linux-\1/') DST="$OUT_DIR/$newname" echo " [pacman] $DST" cp "$f" "$DST" done fi # --------------------------------------------------------------- # Android — APK # --------------------------------------------------------------- APK_DIR="$ROOT/src-tauri/gen/android/app/build/outputs/apk" if [[ -d "$APK_DIR" ]]; then for arch in arm64 x86_64 universal; do SRC="$APK_DIR/$arch/release/app-${arch}-release.apk" if [[ -f "$SRC" ]]; then DST="$OUT_DIR/${PKG}-${VERSION}-android-${arch}.apk" echo " [apk] $DST" cp "$SRC" "$DST" fi done fi # --------------------------------------------------------------- # Windows — msi / nsis # --------------------------------------------------------------- if [[ -d "$BUNDLE/msi" ]]; then for f in "$BUNDLE/msi/${PKG}_"*.msi; do [[ -f "$f" ]] || continue base=$(basename "$f") # bookmgr-client_0.1.0_x64_en-US.msi → bookmgr-client-0.1.0-windows-x86_64.msi newname=$(echo "$base" | sed -E 's/_/ /g; s/ /-/g; s/x64/x86_64/; s/en-US-//') newname="${PKG}-${VERSION}-windows-${newname#${PKG}-${VERSION}-}" DST="$OUT_DIR/$newname" echo " [msi] $DST" cp "$f" "$DST" done fi if [[ -d "$BUNDLE/nsis" ]]; then for f in "$BUNDLE/nsis/${PKG}_"*.exe; do [[ -f "$f" ]] || continue base=$(basename "$f") newname=$(echo "$base" | sed -E 's/_/ /g; s/ /-/g; s/x64/x86_64/; s/en-US-//') newname="${PKG}-${VERSION}-windows-${newname#${PKG}-${VERSION}-}" DST="$OUT_DIR/$newname" echo " [nsis] $DST" cp "$f" "$DST" done fi # --------------------------------------------------------------- # macOS — dmg # --------------------------------------------------------------- if [[ -d "$BUNDLE/dmg" ]]; then for f in "$BUNDLE/dmg/${PKG}_"*.dmg; do [[ -f "$f" ]] || continue base=$(basename "$f") newname=$(echo "$base" | sed -E 's/_/ /g; s/ /-/g; s/x64/x86_64/; s/aarch64/arm64/') newname="${PKG}-${VERSION}-macos-${newname#${PKG}-${VERSION}-}" DST="$OUT_DIR/$newname" echo " [dmg] $DST" cp "$f" "$DST" done fi # --------------------------------------------------------------- echo "" echo "==> 完成,共 $(find "$OUT_DIR" -maxdepth 1 -type f | wc -l) 个文件:" ls -lh "$OUT_DIR"