diff --git a/.github/workflows/template-tauri-build-linux-x64.yml b/.github/workflows/template-tauri-build-linux-x64.yml index 635a1542c..7ef9c88b1 100644 --- a/.github/workflows/template-tauri-build-linux-x64.yml +++ b/.github/workflows/template-tauri-build-linux-x64.yml @@ -152,41 +152,15 @@ jobs: chmod +x "$TAURI_TOOLKIT_PATH/linuxdeploy-x86_64.AppImage" make build-tauri - # Copy engines and bun to appimage - wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O ./appimagetool - chmod +x ./appimagetool - if [ "${{ inputs.channel }}" != "stable" ]; then - ls ./src-tauri/target/release/bundle/appimage/ - cp ./src-tauri/resources/bin/bun ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir/usr/bin/bun - mkdir -p ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir/usr/lib/Jan-${{ inputs.channel }}/binaries/engines - cp -f ./src-tauri/binaries/deps/*.so* ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir/usr/lib/Jan-${{ inputs.channel }}/binaries/ - cp -f ./src-tauri/binaries/*.so* ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir/usr/lib/Jan-${{ inputs.channel }}/binaries/ - cp -rf ./src-tauri/binaries/engines ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir/usr/lib/Jan-${{ inputs.channel }}/binaries/ - APP_IMAGE=./src-tauri/target/release/bundle/appimage/$(ls ./src-tauri/target/release/bundle/appimage/ | grep .AppImage | head -1) - echo $APP_IMAGE - rm -f $APP_IMAGE - ./appimagetool ./src-tauri/target/release/bundle/appimage/Jan-${{ inputs.channel }}.AppDir $APP_IMAGE - yarn tauri signer sign \ - --private-key "$TAURI_SIGNING_PRIVATE_KEY" \ - --password "$TAURI_SIGNING_PRIVATE_KEY_PASSWORD" \ - "$APP_IMAGE" - else - cp ./src-tauri/resources/bin/bun ./src-tauri/target/release/bundle/appimage/Jan.AppDir/usr/bin/bun - mkdir -p ./src-tauri/target/release/bundle/appimage/Jan.AppDir/usr/lib/Jan/binaries/engines - cp -f ./src-tauri/binaries/deps/*.so* ./src-tauri/target/release/bundle/appimage/Jan.AppDir/usr/lib/Jan/binaries/ - cp -f ./src-tauri/binaries/*.so* ./src-tauri/target/release/bundle/appimage/Jan.AppDir/usr/lib/Jan/binaries/ - cp -rf ./src-tauri/binaries/engines ./src-tauri/target/release/bundle/appimage/Jan.AppDir/usr/lib/Jan/binaries/ - APP_IMAGE=./src-tauri/target/release/bundle/appimage/$(ls ./src-tauri/target/release/bundle/appimage/ | grep AppImage | head -1) - echo $APP_IMAGE - rm -f $APP_IMAGE - ./appimagetool ./src-tauri/target/release/bundle/appimage/Jan.AppDir $APP_IMAGE - yarn tauri signer sign \ - --private-key "$TAURI_SIGNING_PRIVATE_KEY" \ - --password "$TAURI_SIGNING_PRIVATE_KEY_PASSWORD" \ - "$APP_IMAGE" - fi + + APP_IMAGE=./src-tauri/target/release/bundle/appimage/$(ls ./src-tauri/target/release/bundle/appimage/ | grep AppImage | head -1) + yarn tauri signer sign \ + --private-key "$TAURI_SIGNING_PRIVATE_KEY" \ + --password "$TAURI_SIGNING_PRIVATE_KEY_PASSWORD" \ + "$APP_IMAGE" env: + RELEASE_CHANNEL: "${{ inputs.channel }}" GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }} POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} diff --git a/.gitignore b/.gitignore index f09d958d0..e714bfdd6 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,5 @@ src-tauri/resources/bin # Helper tools .opencode OpenCode.md -archive/ \ No newline at end of file +archive/ +.cache/ \ No newline at end of file diff --git a/Makefile b/Makefile index 6e69c602d..96a526342 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,8 @@ config-yarn: install-and-build: config-yarn ifeq ($(OS),Windows_NT) echo "skip" +else ifeq ($(shell uname -s),Linux) + chmod +x src-tauri/build-utils/* endif yarn install yarn build:core diff --git a/package.json b/package.json index c8273cb33..c0b29b6a3 100644 --- a/package.json +++ b/package.json @@ -33,9 +33,10 @@ "copy:lib:win32": "cpx \"./lib/windows/*.dll\" \"./src-tauri/resources/lib/\"", "copy:lib:darwin": "mkdir -p \"./src-tauri/resources/lib/\"", "download:bin": "node ./scripts/download-bin.mjs", - "build:tauri:linux:win32": "yarn download:bin && yarn install:cortex && yarn build:icon && yarn copy:assets:tauri && yarn tauri build", - "build:tauri:darwin": "yarn install:cortex && yarn build:icon && yarn copy:assets:tauri && yarn tauri build --target universal-apple-darwin", - "build:tauri": "run-script-os", + "build:tauri:win32": "yarn download:bin && yarn tauri build", + "build:tauri:linux": "yarn download:bin && yarn tauri build && ./src-tauri/build-utils/buildAppImage.sh", + "build:tauri:darwin": "yarn tauri build --target universal-apple-darwin", + "build:tauri": "yarn install:cortex && yarn build:icon && yarn copy:assets:tauri && run-script-os", "build:icon": "tauri icon ./src-tauri/icons/icon.png", "build:core": "cd core && yarn build && yarn pack", "build:web": "yarn workspace @janhq/web-app build", diff --git a/src-tauri/build-utils/buildAppImage.sh b/src-tauri/build-utils/buildAppImage.sh new file mode 100755 index 000000000..3149e0b2c --- /dev/null +++ b/src-tauri/build-utils/buildAppImage.sh @@ -0,0 +1,33 @@ +#!/bin/bash +APPIMAGETOOL="./.cache/build-tools/appimagetool" +RELEASE_CHANNEL=${RELEASE_CHANNEL:-"stable"} + +# pull in AppImageTool if it's not pre cached +mkdir -p ./.cache/build-tools +if [ ! -f "${APPIMAGETOOL}" ]; then + wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O "${APPIMAGETOOL}" + chmod +x "${APPIMAGETOOL}" +fi + +if [ "${RELEASE_CHANNEL}" != "stable" ]; then + APP_DIR=./src-tauri/target/release/bundle/appimage/Jan-${RELEASE_CHANNEL}.AppDir + LIB_DIR=$APP_DIR/usr/lib/Jan-${RELEASE_CHANNEL}/binaries +else + APP_DIR=./src-tauri/target/release/bundle/appimage/Jan.AppDir + LIB_DIR=$APP_DIR/usr/lib/Jan/binaries +fi + +# bundle additional resources in the AppDir without pulling in their dependencies +cp ./src-tauri/resources/bin/bun $APP_DIR/usr/bin/bun +mkdir -p $LIB_DIR/engines +cp -f ./src-tauri/binaries/deps/*.so* $LIB_DIR/ +cp -f ./src-tauri/binaries/*.so* $LIB_DIR/ +cp -rf ./src-tauri/binaries/engines $LIB_DIR/ + +# remove appimage generated by tauri build +APP_IMAGE=./src-tauri/target/release/bundle/appimage/$(ls ./src-tauri/target/release/bundle/appimage/ | grep AppImage | head -1) +echo $APP_IMAGE +rm -f $APP_IMAGE + +# repackage appimage with additional resources +"${APPIMAGETOOL}" $APP_DIR $APP_IMAGE \ No newline at end of file