diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e60461..c642872 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: - platform: 'ubuntu-22.04' # for Tauri v1 you could replace this with ubuntu-20.04. args: '' - platform: 'ubuntu-22.04-arm' - args: '--target aarch64-unknown-linux-gnu' + args: '' - platform: 'windows-latest' args: '' @@ -40,6 +40,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: lts/* + cache: 'yarn' - name: install Rust nightly uses: dtolnay/rust-toolchain@nightly @@ -51,7 +52,7 @@ jobs: if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-22.04-arm' # This must match the platform value defined above. run: | sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf binutils fuse # webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2. @@ -85,19 +86,40 @@ jobs: echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV echo "Certificate imported. Using identity: $CERT_ID" + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: './src-tauri -> target' + - name: install frontend dependencies run: yarn install # change this to npm, pnpm or bun depending on which one you use. - - uses: tauri-apps/tauri-action@v0 + - id: build + uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }} with: - tagName: v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. + tagName: v__VERSION__ # update the below "upload artifacts to GitHub" if this gets updated releaseName: 'Auto-release v__VERSION__' releaseBody: 'See the assets to download this version and install. This release was created automatically.' releaseDraft: false prerelease: true args: ${{ matrix.args }} + + - name: Bundle AppImage + if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-22.04-arm' + run: | + ./build_appimage.sh --nobuild + + - name: Upload binaries to release + if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-22.04-arm' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/appimage/*.AppImage + file_glob: true + release_id: ${{ steps.build.outputs.releaseId }} + overwrite: true diff --git a/.gitignore b/.gitignore index 5767a3f..f0a82ea 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,13 @@ dist-ssr .output src-tauri/flamegraph.svg -src-tauri/perf* \ No newline at end of file +src-tauri/perf* + +build/appimage/* +!build/appimage/drop-app.d + +build/appimage/drop-app.d/usr/bin/* +!build/appimage/drop-app.d/usr/bin/.gitkeep + +build/appimage/drop-app.d/usr/lib/* +!build/appimage/drop-app.d/usr/lib/.gitkeep \ No newline at end of file diff --git a/build/appimage/drop-app.d/.DirIcon b/build/appimage/drop-app.d/.DirIcon new file mode 120000 index 0000000..a2a9a49 --- /dev/null +++ b/build/appimage/drop-app.d/.DirIcon @@ -0,0 +1 @@ +drop-oss-app.png \ No newline at end of file diff --git a/build/appimage/drop-app.d/AppRun b/build/appimage/drop-app.d/AppRun new file mode 100755 index 0000000..32ab284 --- /dev/null +++ b/build/appimage/drop-app.d/AppRun @@ -0,0 +1,8 @@ +#!/bin/sh + +program="drop-app" + +# point to libraries and run +LD_LIBRARY_PATH=$APPDIR/usr/lib:/usr/local/lib:/usr/lib $APPDIR/usr/bin/$program $@ + +# vim:ft=sh diff --git a/build/appimage/drop-app.d/drop-oss-app.desktop b/build/appimage/drop-app.d/drop-oss-app.desktop new file mode 100644 index 0000000..b80379e --- /dev/null +++ b/build/appimage/drop-app.d/drop-oss-app.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Drop Desktop App +Comment=The client application for the open-source, self-hosted game distribution platform Drop. +Exec=AppRun +Icon=drop-oss-app +Type=Application +Categories=Game;Network +MimeType=x-scheme-handler/drop diff --git a/build/appimage/drop-app.d/drop-oss-app.png b/build/appimage/drop-app.d/drop-oss-app.png new file mode 100644 index 0000000..195b297 Binary files /dev/null and b/build/appimage/drop-app.d/drop-oss-app.png differ diff --git a/build/appimage/drop-app.d/usr/bin/.gitkeep b/build/appimage/drop-app.d/usr/bin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build/appimage/drop-app.d/usr/lib/.gitkeep b/build/appimage/drop-app.d/usr/lib/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build_appimage.sh b/build_appimage.sh new file mode 100755 index 0000000..8d3e095 --- /dev/null +++ b/build_appimage.sh @@ -0,0 +1,42 @@ +#!/bin/sh +set -e + +# run this from the root of the git repo to make this work + +arch="$(uname -m)" +git_dir="$PWD" +target_dir="$git_dir/src-tauri/target" +appimage_dir="$git_dir/build/appimage" +appdir="$appimage_dir/drop-app.d" + +build() { + # set up the repo + git submodule init + git submodule update --recursive + + # set up yarn and build + yarn + yarn tauri build +} + +rm -f $appdir/usr/bin/* $appdir/usr/lib/* + +if [[ ! "$1" == "--nobuild" ]]; then + build +fi + +# install binaries in the appdir, then the libraries +cp $target_dir/release/drop-app $appdir/usr/bin +for lib_name in $(ldd "$target_dir/release/drop-app" | grep '=>' | awk '{ print $(NF-1) }'); +do + echo $lib_name + sudo install -g 1000 -o 1000 -Dm755 "$(ls -L1 $lib_name)" $appdir/usr/lib +done + +wget -O $appimage_dir/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-$arch.AppImage + +cd $appimage_dir +chmod u+x appimagetool +./appimagetool $appdir + +ls "$appimage_dir/" \ No newline at end of file diff --git a/package.json b/package.json index 0d1f6fc..1af7dd6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "drop-app", "private": true, - "version": "0.3.1", + "version": "0.3.1-appimage", "type": "module", "scripts": { "build": "nuxt build", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 5c74d4f..ab9d9a1 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "drop-app" -version = "0.3.1" +version = "0.3.1-appimage" dependencies = [ "atomic-instant-full", "bitcode", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 93db550..0c0d6a3 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drop-app" -version = "0.3.1" +version = "0.3.1-appimage" description = "The client application for the open-source, self-hosted game distribution platform Drop" authors = ["Drop OSS"] edition = "2024" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index d03f9ea..f018e1e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2.0.0", "productName": "Drop Desktop Client", - "version": "0.3.1", + "version": "0.3.1-appimage", "identifier": "dev.drop.app", "build": { "beforeDevCommand": "yarn dev --port 1432", @@ -27,7 +27,7 @@ }, "bundle": { "active": true, - "targets": ["nsis", "deb", "rpm", "dmg", "appimage"], + "targets": ["nsis", "deb", "rpm", "dmg"], "windows": { "nsis": { "installMode": "both"