diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index b73484e..cb59eef 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -63,23 +63,10 @@ jobs: patchelf \ libfuse2 - - name: Verify system dependencies - run: | - echo "=== FUSE ===" - dpkg -l libfuse2 | grep libfuse2 - ls -la /usr/lib/x86_64-linux-gnu/libfuse.so* || echo "WARNING: libfuse.so not found" - echo "=== WebKit ===" - dpkg -l libwebkit2gtk-4.1-dev | grep webkit - - name: Install Rust uses: dtolnay/rust-toolchain@stable - - - name: Check Rust host triple - run: | - echo "=== Rust host triple ===" - rustc -vV - echo "=== Cargo version ===" - cargo --version + with: + targets: x86_64-unknown-linux-gnu - name: Rust cache uses: Swatinem/rust-cache@v2 @@ -100,21 +87,15 @@ jobs: - name: Download Suwayomi (Linux x64) run: | - echo "=== Downloading Suwayomi ===" curl -fsSL \ "https://github.com/Suwayomi/Suwayomi-Server/releases/download/v2.1.1867/Suwayomi-Server-v2.1.1867-linux-x64.tar.gz" \ -o suwayomi-linux.tar.gz - echo "=== Verifying checksum ===" echo "b2344bd73c4e26bede63cdb4b44b1b4168d8a8500b3b2b1a0219519a3ef708fe suwayomi-linux.tar.gz" | sha256sum -c - - echo "=== Extracting ===" mkdir -p suwayomi-extracted tar -xzf suwayomi-linux.tar.gz -C suwayomi-extracted --strip-components=1 - echo "=== Extracted layout ===" - find suwayomi-extracted -type f | sort - - name: Stage Suwayomi bundle run: | mkdir -p src-tauri/binaries @@ -123,68 +104,45 @@ jobs: JAVA="suwayomi-extracted/jre/bin/java" CATCH="suwayomi-extracted/bin/catch_abort.so" - echo "=== Checking required files ===" for f in "$JAR" "$JAVA" "$CATCH"; do if [ ! -e "$f" ]; then echo "ERROR: expected file not found: $f" find suwayomi-extracted -type f | head -40 exit 1 fi - echo "OK: $f" done + echo "JAR=$JAR JAVA=$JAVA CATCH=$CATCH" + cp -r suwayomi-extracted src-tauri/binaries/suwayomi-bundle chmod +x src-tauri/binaries/suwayomi-bundle/jre/bin/java - echo "=== Staged bundle contents ===" - find src-tauri/binaries/suwayomi-bundle -type f | sort - - name: Stage Linux launcher sidecar run: | - HOST_TRIPLE=$(rustc -vV | grep host | awk '{print $2}') - echo "=== Host triple: $HOST_TRIPLE ===" - - SIDECAR="src-tauri/binaries/suwayomi-launcher-linux-${HOST_TRIPLE}" - cp src-tauri/binaries/suwayomi-launcher-linux.sh "$SIDECAR" - chmod +x "$SIDECAR" - - echo "=== Sidecar staged as: $SIDECAR ===" - ls -la src-tauri/binaries/ + cp src-tauri/binaries/suwayomi-launcher-linux.sh \ + src-tauri/binaries/suwayomi-launcher-linux-x86_64-unknown-linux-gnu + chmod +x src-tauri/binaries/suwayomi-launcher-linux-x86_64-unknown-linux-gnu - name: Patch tauri.conf.json for CI run: | - echo "=== Before patch ===" - grep beforeBuildCommand src-tauri/tauri.conf.json - sed -i 's/"beforeBuildCommand": "pnpm build"/"beforeBuildCommand": ""/' src-tauri/tauri.conf.json - echo "=== After patch ===" - grep beforeBuildCommand src-tauri/tauri.conf.json - - name: Build Tauri app - run: pnpm tauri build --config src-tauri/tauri.linux.conf.json --verbose - - - name: List build artifacts - if: always() - run: | - echo "=== Bundle output ===" - find src-tauri/target -path "*/bundle/*" -type f | sort || echo "No bundle artifacts found" + run: pnpm tauri build --target x86_64-unknown-linux-gnu --config src-tauri/tauri.linux.conf.json --verbose + env: + NO_STRIP: "true" - name: Upload Linux artifacts to release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} VERSION: ${{ github.event.inputs.version }} run: | - echo "=== Looking for release v$VERSION ===" for i in $(seq 1 12); do RELEASE_ID=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ "https://api.github.com/repos/moku-project/Moku/releases" \ | jq -r '.[] | select(.tag_name == "v'"$VERSION"'") | .id' | head -1) - if [ -n "$RELEASE_ID" ]; then - echo "Found release ID: $RELEASE_ID" - break - fi - echo "Attempt $i: release not found yet, waiting 15s..." + if [ -n "$RELEASE_ID" ]; then break; fi + echo "Waiting for release to exist... attempt $i" sleep 15 done @@ -193,24 +151,21 @@ jobs: exit 1 fi + echo "Found release ID: $RELEASE_ID" + upload_asset() { local file="$1" local name="$2" - echo "Uploading $name ($file)..." - RESPONSE=$(curl -s -X POST \ + echo "Uploading $name..." + curl -s -X POST \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @"$file" \ - "https://uploads.github.com/repos/moku-project/Moku/releases/$RELEASE_ID/assets?name=$name") - echo "Response: $RESPONSE" | jq '{id: .id, name: .name, state: .state}' 2>/dev/null || echo "$RESPONSE" + "https://uploads.github.com/repos/moku-project/Moku/releases/$RELEASE_ID/assets?name=$name" } - APPIMAGE=$(find src-tauri/target -path "*/bundle/appimage/*.AppImage" ! -name "*.sig" | head -1) - DEB=$(find src-tauri/target -path "*/bundle/deb/*.deb" ! -name "*.sig" | head -1) - - echo "=== Artifacts to upload ===" - echo "AppImage: ${APPIMAGE:-not found}" - echo "Deb: ${DEB:-not found}" + APPIMAGE=$(find src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/appimage -name "*.AppImage" | head -1) + DEB=$(find src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb -name "*.deb" | head -1) [ -n "$APPIMAGE" ] && upload_asset "$APPIMAGE" "moku-linux-x64-${VERSION}.AppImage" [ -n "$DEB" ] && upload_asset "$DEB" "moku-linux-x64-${VERSION}.deb" \ No newline at end of file