diff --git a/scripts/gitea-release.sh b/scripts/gitea-release.sh index dcfb050..d9240cf 100755 --- a/scripts/gitea-release.sh +++ b/scripts/gitea-release.sh @@ -4,7 +4,7 @@ # GITEA_TOKEN=… scripts/gitea-release.sh [dir-with-files] (default ../release/desktop) # # GITEA_TOKEN: a Gitea access token with the write:repository scope (Settings → Applications). The tag -# v must already be pushed. Files: *.AppImage, *.deb, *-setup.exe, kestrove-nmh-*, SHA256SUMS. +# v must already be pushed. Files: *.AppImage, *.deb, *.rpm, *-setup.exe, kestrove-nmh-*, SHA256SUMS. set -eu cd "$(dirname "$0")/.." : "${GITEA_TOKEN:?set GITEA_TOKEN (Gitea → Settings → Applications → token with write:repository)}" @@ -15,14 +15,14 @@ V=$(node -p 'require("./package.json").version') TAG="v$V" AUTH="Authorization: token $GITEA_TOKEN" -(cd "$DIR" && rm -f SHA256SUMS && shasum -a 256 -- *.AppImage *.deb *-setup.exe kestrove-nmh-* 2>/dev/null > SHA256SUMS; cat SHA256SUMS) +(cd "$DIR" && rm -f SHA256SUMS && shasum -a 256 -- *.AppImage *.deb *.rpm *-setup.exe kestrove-nmh-* 2>/dev/null > SHA256SUMS; cat SHA256SUMS) ID=$(curl -fsS -H "$AUTH" "$API/repos/$REPO/releases/tags/$TAG" 2>/dev/null | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{console.log(JSON.parse(s).id||"")}catch{console.log("")}})') if [ -z "$ID" ]; then BODY=$(node -e 'console.log(JSON.stringify({tag_name: process.argv[1], name: "Kestrove " + process.argv[2], body: "Kestrove desktop " + process.argv[2] + " for Windows and Linux. On a Mac, use the Kestrove app from the Mac App Store instead.\n\nVerify downloads with SHA256SUMS.", draft: false, prerelease: false}))' "$TAG" "$V") ID=$(curl -fsS -X POST -H "$AUTH" -H "Content-Type: application/json" -d "$BODY" "$API/repos/$REPO/releases" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>console.log(JSON.parse(s).id))') fi -for f in "$DIR"/*.AppImage "$DIR"/*.deb "$DIR"/*-setup.exe "$DIR"/kestrove-nmh-* "$DIR"/SHA256SUMS; do +for f in "$DIR"/*.AppImage "$DIR"/*.deb "$DIR"/*.rpm "$DIR"/*-setup.exe "$DIR"/kestrove-nmh-* "$DIR"/SHA256SUMS; do [ -f "$f" ] || continue echo "uploading $(basename "$f")" curl -fsS -X POST -H "$AUTH" -F "attachment=@$f" "$API/repos/$REPO/releases/$ID/assets?name=$(basename "$f")" >/dev/null diff --git a/scripts/linux.Dockerfile b/scripts/linux.Dockerfile index 5654925..695610d 100644 --- a/scripts/linux.Dockerfile +++ b/scripts/linux.Dockerfile @@ -1,8 +1,9 @@ -# Linux release bundles (AppImage + .deb) for the Gitea release, built in a clean Debian 12 container: +# Linux release bundles (.deb + .rpm) for the Gitea release, built in a clean Debian 12 container: # docker buildx build --platform linux/amd64 -f kestrove-desktop/scripts/linux.Dockerfile \ # --target out -o type=local,dest=release/desktop .. # Build context = the folder holding kestrove-core and kestrove-desktop. Debian 12's glibc (2.36) keeps -# the AppImage runnable on most current distributions. +# the packages installable on current distributions. No AppImage here: its runtime (and linuxdeploy) can't run +# under the QEMU emulation used when building amd64 on Apple silicon; build it on a real x86_64 host. FROM rust:1-bookworm AS build RUN apt-get update && apt-get install -y --no-install-recommends \ libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev libxdo-dev \ @@ -13,10 +14,13 @@ WORKDIR /src COPY kestrove-core kestrove-core COPY kestrove-desktop kestrove-desktop WORKDIR /src/kestrove-desktop -RUN npm ci --no-audit --no-fund && npm run tauri build -- --bundles appimage,deb \ - && cd src-tauri && cargo build --release --bin kestrove-nmh +RUN npm ci --no-audit --no-fund +# Separate steps so a packaging failure keeps the compile in the layer cache. +RUN cd src-tauri && cargo build --release --bins +RUN npm run tauri build -- --bundles deb +RUN npm run tauri build -- --bundles rpm FROM scratch AS out -COPY --from=build /src/kestrove-desktop/src-tauri/target/release/bundle/appimage/*.AppImage / +COPY --from=build /src/kestrove-desktop/src-tauri/target/release/bundle/rpm/*.rpm / COPY --from=build /src/kestrove-desktop/src-tauri/target/release/bundle/deb/*.deb / COPY --from=build /src/kestrove-desktop/src-tauri/target/release/kestrove-nmh /kestrove-nmh-linux-x86_64