build: add artifact collection and Arch Linux packaging scripts
Introduce scripts to collect Tauri build artifacts across platforms and generate a pacman package for Arch Linux. Update .gitignore to exclude the releases directory and reorder existing entries.
This commit is contained in:
Executable
+140
@@ -0,0 +1,140 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user