mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-11 00:11:05 +00:00
- Builds and packages ArtCraft Studio across x86_64, aarch64, and riscv64 targets using storytold/craft-common-actions. - Produces DEB, RPM, AppImage, tarball, Arch package, and Flatpak bundle/OCI artifacts. - Cross-compiles riscv64 DEB and RPM via install-riscv64-cross and BoringSSL CMake config. - Fixes SQLx query offline fallback in sqlite_tasks build.rs when no live database exists. - Adds shared Packaging Lint workflow, fixing actionlint and shellcheck warnings across workflows. - Adds shared FreeBSD CI workflow tracking @main.
55 lines
2.6 KiB
Bash
Executable File
55 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Normalize Tauri packages and derive the suite's bin/share tarball from its Debian package.
|
|
set -euo pipefail
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
arch="${1:?architecture required}"
|
|
target="${2:?Rust target required}"
|
|
version="$(jq -r .version crates/desktop/artcraft/tauri.conf.json)"
|
|
case "$arch" in x86_64|aarch64|riscv64) ;; *) exit 2 ;; esac
|
|
base="artcraft-$version-linux-$arch"
|
|
bundle="target/$target/release/bundle"
|
|
mkdir -p dist/release
|
|
for format in deb rpm AppImage; do
|
|
mapfile -t files < <(find "$bundle" -type f -name "*.$format")
|
|
if [[ "$arch" == riscv64 && "$format" == AppImage ]]; then continue; fi
|
|
[[ ${#files[@]} == 1 ]] || { echo "Expected one $format in $bundle, found ${#files[@]}" >&2; exit 1; }
|
|
cp "${files[0]}" "dist/release/$base.$format"
|
|
done
|
|
if [[ "$arch" != riscv64 ]]; then
|
|
zsyncmake -u "https://github.com/storytold/artcraft/releases/download/artcraft-v$version/$base.AppImage" \
|
|
-o "dist/release/$base.AppImage.zsync" "dist/release/$base.AppImage"
|
|
fi
|
|
work="$(mktemp -d)"
|
|
trap 'rm -rf "$work"' EXIT
|
|
dpkg-deb -x "dist/release/$base.deb" "$work/deb"
|
|
mkdir -p "$work/$base"
|
|
cp -a "$work/deb/usr/." "$work/$base/"
|
|
mapfile -t desktops < <(find "$work/$base/share/applications" -name '*.desktop')
|
|
[[ ${#desktops[@]} == 1 ]] || { echo 'Expected one desktop entry' >&2; exit 1; }
|
|
if [[ "${desktops[0]}" != "$work/$base/share/applications/ai.artcraft.app.desktop" ]]; then
|
|
mv "${desktops[0]}" "$work/$base/share/applications/ai.artcraft.app.desktop"
|
|
fi
|
|
install -Dm644 "$script_dir/ai.artcraft.app.metainfo.xml" "$work/$base/share/metainfo/ai.artcraft.app.metainfo.xml"
|
|
sed -i 's/^Name=.*/Name=ArtCraft Studio/' "$work/$base/share/applications/ai.artcraft.app.desktop"
|
|
test -x "$work/$base/bin/artcraft"
|
|
case "$arch" in
|
|
x86_64) machine='Advanced Micro Devices X86-64' ;;
|
|
aarch64) machine='AArch64' ;;
|
|
riscv64) machine='RISC-V' ;;
|
|
esac
|
|
readelf -h "$work/$base/bin/artcraft" | grep -F "$machine"
|
|
if [[ "$arch" == "$(uname -m)" ]]; then
|
|
dependencies="$(ldd "$work/$base/bin/artcraft")"
|
|
if grep -q 'not found' <<< "$dependencies"; then
|
|
printf '%s\n' "$dependencies" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
# The tarball layout is consumed by the launcher, Arch packaging and Flatpak.
|
|
tar -czf "dist/release/$base.tar.gz" -C "$work" "$base"
|
|
case "$arch" in x86_64) deb_arch=amd64 ;; aarch64) deb_arch=arm64 ;; riscv64) deb_arch=riscv64 ;; esac
|
|
[[ "$(dpkg-deb -f "dist/release/$base.deb" Architecture)" == "$deb_arch" ]]
|
|
[[ "$(rpm -qp --qf '%{ARCH}' "dist/release/$base.rpm")" == "$arch" ]]
|
|
dpkg-deb --info "dist/release/$base.deb"
|
|
rpm -qp --requires "dist/release/$base.rpm"
|