Compare commits

..

6 Commits

Author SHA1 Message Date
github-actions[bot] 7c16b63b41 chore: update package.nix for v1.7.1 2026-07-12 08:58:54 +00:00
Tickbase 9551eabf2d bump version & build 2026-07-12 10:57:49 +02:00
Tickbase 80395850ba CHANGELOG 2026-07-12 10:57:39 +02:00
Tickbase ab41ce8bd2 i forgor 2026-07-12 10:47:05 +02:00
Tickbase 8ace340455 test build x2 2026-07-12 10:41:43 +02:00
Tickbase 3ff4556f86 test build 2026-07-12 09:52:31 +02:00
9 changed files with 190 additions and 25 deletions
+110 -10
View File
@@ -163,20 +163,120 @@ jobs:
- name: Install frontend dependencies
run: npm ci
- name: Build Tauri app with updater
uses: tauri-apps/tauri-action@v0
- name: Build Tauri app
run: npm run tauri build
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
- name: Strip bundled GTK/WebKit/GLib stack, rely on the host's instead
run: |
set -euo pipefail
cd src-tauri/target/release/bundle/appimage
APPIMAGE=$(ls *.AppImage)
chmod +x "$APPIMAGE"
./"$APPIMAGE" --appimage-extract >/dev/null
LDCONFIG_CACHE=$(ldconfig -p)
resolve_lib_path() {
awk -v lib="$1" '$1==lib {print $NF; exit}' <<< "$LDCONFIG_CACHE"
}
# WebKitGTK bundled by the AppImage tooling is pinned to whatever the
# build image ships, and drifts out of sync with newer host systems
# (freezes on old bundled WebKit, EGL/DMABUF crashes on some newer
# ones). The only configuration that's tested clean is deferring the
# whole GTK/WebKit/GLib stack to the host's own matched libraries, so
# we compute the full dependency closure from the host side (whatever
# is actually installed here) and strip every bundled copy that's
# also part of that closure.
declare -A EXCLUDE
for seed in libwebkit2gtk-4.1.so.0 libglib-2.0.so.0 libgio-2.0.so.0 libgobject-2.0.so.0 libgmodule-2.0.so.0; do
EXCLUDE[$seed]=1
done
changed=1
while [ "$changed" -eq 1 ]; do
changed=0
for lib in "${!EXCLUDE[@]}"; do
hostpath=$(resolve_lib_path "$lib")
[ -n "$hostpath" ] && [ -e "$hostpath" ] || continue
deps=$(ldd "$hostpath" 2>/dev/null | grep -oE '[a-zA-Z0-9._+-]+\.so[0-9.]*' | sort -u) || true
for d in $deps; do
if [ -z "${EXCLUDE[$d]:-}" ]; then
if find squashfs-root/usr/lib -maxdepth 1 -name "${d}*" 2>/dev/null | grep -q .; then
EXCLUDE[$d]=1
changed=1
fi
fi
done
done
done
echo "Excluding ${#EXCLUDE[@]} bundled libraries, relying on the host's instead:"
for lib in "${!EXCLUDE[@]}"; do echo " $lib"; done | sort
for lib in "${!EXCLUDE[@]}"; do
find squashfs-root/usr/lib -maxdepth 1 -name "${lib%.so*}.so*" -delete
done
curl -sSL -o appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x appimagetool
rm -f "$APPIMAGE"
ARCH=x86_64 ./appimagetool --appimage-extract-and-run squashfs-root "$APPIMAGE"
rm -rf squashfs-root appimagetool
- name: Sign artifacts and upload to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
releaseId: ${{ needs.create-release.outputs.release_id }}
projectPath: '.'
includeDebug: false
includeRelease: true
includeUpdaterJson: true
tauriScript: 'npm run tauri'
args: ${{ matrix.args }}
VERSION: ${{ needs.create-release.outputs.version }}
REPO: ${{ github.repository }}
run: |
set -euo pipefail
cd src-tauri/target/release/bundle
APPIMAGE_PATH=$(ls appimage/*.AppImage)
DEB_PATH=$(ls deb/*.deb)
RPM_PATH=$(ls rpm/*.rpm)
for f in "$APPIMAGE_PATH" "$DEB_PATH" "$RPM_PATH"; do
npx --prefix "$GITHUB_WORKSPACE" tauri signer sign "$f"
done
APPIMAGE_NAME=$(basename "$APPIMAGE_PATH")
DEB_NAME=$(basename "$DEB_PATH")
RPM_NAME=$(basename "$RPM_PATH")
jq -n \
--arg version "$VERSION" \
--arg pub_date "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
--arg appimage_sig "$(cat "${APPIMAGE_PATH}.sig")" \
--arg appimage_url "https://github.com/$REPO/releases/latest/download/$APPIMAGE_NAME" \
--arg deb_sig "$(cat "${DEB_PATH}.sig")" \
--arg deb_url "https://github.com/$REPO/releases/latest/download/$DEB_NAME" \
--arg rpm_sig "$(cat "${RPM_PATH}.sig")" \
--arg rpm_url "https://github.com/$REPO/releases/latest/download/$RPM_NAME" \
'{
version: $version,
notes: "",
pub_date: $pub_date,
platforms: {
"linux-x86_64": { signature: $appimage_sig, url: $appimage_url },
"linux-x86_64-appimage": { signature: $appimage_sig, url: $appimage_url },
"linux-x86_64-deb": { signature: $deb_sig, url: $deb_url },
"linux-x86_64-rpm": { signature: $rpm_sig, url: $rpm_url }
}
}' > latest.json
gh release upload "v${VERSION}" \
"$APPIMAGE_PATH" "${APPIMAGE_PATH}.sig" \
"$DEB_PATH" "${DEB_PATH}.sig" \
"$RPM_PATH" "${RPM_PATH}.sig" \
latest.json \
--clobber \
--repo "$REPO"
publish-release:
name: Publish release
+67 -7
View File
@@ -11,7 +11,7 @@ jobs:
fail-fast: false
matrix:
include:
- platform: 'ubuntu-22.04'
- platform: 'ubuntu-24.04'
args: ''
runs-on: ${{ matrix.platform }}
@@ -36,11 +36,16 @@ jobs:
with:
workspaces: './src-tauri -> target'
- name: Install system dependencies
- name: Install system dependencies (Ubuntu)
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-0 \
libwebkit2gtk-4.1-dev \
libjavascriptcoregtk-4.1-0 \
libjavascriptcoregtk-4.1-dev \
gir1.2-javascriptcoregtk-4.1 \
gir1.2-webkit2-4.1 \
libappindicator3-dev \
librsvg2-dev \
patchelf \
@@ -60,11 +65,66 @@ jobs:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
- name: Upload artifacts
- name: Strip bundled GTK/WebKit/GLib stack, rely on the host's instead
run: |
set -euo pipefail
cd src-tauri/target/release/bundle/appimage
APPIMAGE=$(ls *.AppImage)
chmod +x "$APPIMAGE"
./"$APPIMAGE" --appimage-extract >/dev/null
LDCONFIG_CACHE=$(ldconfig -p)
resolve_lib_path() {
awk -v lib="$1" '$1==lib {print $NF; exit}' <<< "$LDCONFIG_CACHE"
}
# WebKitGTK bundled by the AppImage tooling is pinned to whatever the
# build image ships, and drifts out of sync with newer host systems
# (freezes on old bundled WebKit, EGL/DMABUF crashes on some newer
# ones). The only configuration that's tested clean is deferring the
# whole GTK/WebKit/GLib stack to the host's own matched libraries, so
# we compute the full dependency closure from the host side (whatever
# is actually installed here) and strip every bundled copy that's
# also part of that closure.
declare -A EXCLUDE
for seed in libwebkit2gtk-4.1.so.0 libglib-2.0.so.0 libgio-2.0.so.0 libgobject-2.0.so.0 libgmodule-2.0.so.0; do
EXCLUDE[$seed]=1
done
changed=1
while [ "$changed" -eq 1 ]; do
changed=0
for lib in "${!EXCLUDE[@]}"; do
hostpath=$(resolve_lib_path "$lib")
[ -n "$hostpath" ] && [ -e "$hostpath" ] || continue
deps=$(ldd "$hostpath" 2>/dev/null | grep -oE '[a-zA-Z0-9._+-]+\.so[0-9.]*' | sort -u) || true
for d in $deps; do
if [ -z "${EXCLUDE[$d]:-}" ]; then
if find squashfs-root/usr/lib -maxdepth 1 -name "${d}*" 2>/dev/null | grep -q .; then
EXCLUDE[$d]=1
changed=1
fi
fi
done
done
done
echo "Excluding ${#EXCLUDE[@]} bundled libraries, relying on the host's instead:"
for lib in "${!EXCLUDE[@]}"; do echo " $lib"; done | sort
for lib in "${!EXCLUDE[@]}"; do
find squashfs-root/usr/lib -maxdepth 1 -name "${lib%.so*}.so*" -delete
done
curl -sSL -o appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x appimagetool
rm -f "$APPIMAGE"
ARCH=x86_64 ./appimagetool --appimage-extract-and-run squashfs-root "$APPIMAGE"
rm -rf squashfs-root
- name: Upload AppImage artifact
uses: actions/upload-artifact@v4
with:
name: linux-build
path: |
src-tauri/target/release/bundle/deb/*.deb
src-tauri/target/release/bundle/appimage/*.AppImage
name: appimage
path: src-tauri/target/release/bundle/appimage/*.AppImage
if-no-files-found: error
+5
View File
@@ -1,3 +1,8 @@
## [1.7.1] - 12-07-2026
### Fixed
- AppImage freezing on any interaction past the Overview page (KDE, GNOME, and others, mainly on Arch, Fedora, PikaOS, Bazzite, and Steam Deck). Caused by the WebKitGTK/GTK/GLib stack bundled into the AppImage drifting out of sync with the host system's own. The AppImage no longer bundles that stack at all and relies on the system's libraries instead
## [1.7.0] - 11-07-2026
> A quick word before the changelog: sorry this update took as long as it did. Life, work, and a few other projects got in the way, but it's finally here. This one was mostly about polish, giving the app some life, cleaning up a lot of rough edges, and generally trying to make it feel nicer to use day to day. Between everything in this release, I'm confident enough in where things stand to move this over to the stable channel.
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "creamlinux",
"version": "1.7.0",
"version": "1.7.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "creamlinux",
"version": "1.7.0",
"version": "1.7.1",
"license": "MIT",
"dependencies": {
"@tauri-apps/api": "^2.5.0",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "creamlinux",
"private": true,
"version": "1.7.0",
"version": "1.7.1",
"type": "module",
"author": "Tickbase",
"repository": "https://github.com/Novattz/creamlinux-installer",
+2 -2
View File
@@ -29,14 +29,14 @@ let
in
rustPlatform.buildRustPackage {
pname = "creamlinux-installer";
version = "1.7.0-unstable-2026-07-11";
version = "1.7.1-unstable-2026-07-12";
inherit src;
cargoLock.lockFile = ./src-tauri/Cargo.lock;
npmDeps = fetchNpmDeps {
inherit src;
hash = "sha256-74rTmS0RV8FagUQzH4ympOX/ueHTj15qihcAcCpaEGQ=";
hash = "sha256-h/PAcOP/sBKHYQipL4yIuRlS+mEDwr1hWy4fSnVT00Y=";
};
nativeBuildInputs = [
+1 -1
View File
@@ -495,7 +495,7 @@ dependencies = [
[[package]]
name = "creamlinux-installer"
version = "1.7.0"
version = "1.7.1"
dependencies = [
"async-trait",
"log",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "creamlinux-installer"
version = "1.7.0"
version = "1.7.1"
description = "DLC Manager for Steam games on Linux"
authors = ["tickbase"]
license = "MIT"
+1 -1
View File
@@ -19,7 +19,7 @@
},
"productName": "Creamlinux",
"mainBinaryName": "creamlinux",
"version": "1.7.0",
"version": "1.7.1",
"identifier": "com.creamlinux.dev",
"app": {
"withGlobalTauri": false,