@@ -232,15 +232,145 @@ jobs:
232232 executable_name=$(/usr/libexec/PlistBuddy -c 'Print:CFBundleExecutable' "$app/Contents/Info.plist")
233233 env -u FRAME_GSTREAMER_MANIFEST "$app/Contents/MacOS/$executable_name" --verify-gstreamer-runtime
234234
235- linux-runtime-placeholder :
236- name : Linux runtime plan placeholder
237- runs-on : ubuntu-24.04
235+ linux-runtime :
236+ name : Linux ${{ matrix.arch }}
237+ runs-on : ${{ matrix.runner }}
238+ strategy :
239+ fail-fast : false
240+ matrix :
241+ include :
242+ - runner : ubuntu-24.04
243+ arch : x86_64
244+ target : x86_64-unknown-linux-gnu
245+ - runner : ubuntu-24.04-arm
246+ arch : aarch64
247+ target : aarch64-unknown-linux-gnu
248+
238249 steps :
239250 - uses : actions/checkout@v6
240- - name : Scope
251+
252+ - name : Setup Bun
253+ uses : oven-sh/setup-bun@v2
254+ with :
255+ bun-version : latest
256+
257+ - name : Install Rust
258+ uses : dtolnay/rust-toolchain@stable
259+ with :
260+ toolchain : 1.91.1
261+ targets : ${{ matrix.target }}
262+
263+ - name : Install Rust Target
264+ run : |
265+ rustup show active-toolchain
266+ rustup target add ${{ matrix.target }}
267+ rustup target list --installed
268+
269+ - name : Install Linux Build Dependencies
270+ run : |
271+ sudo apt-get update
272+ sudo apt-get install -y --no-install-recommends \
273+ build-essential \
274+ pkg-config \
275+ libssl-dev \
276+ libwebkit2gtk-4.1-0 \
277+ libwebkit2gtk-4.1-dev \
278+ libjavascriptcoregtk-4.1-0 \
279+ libjavascriptcoregtk-4.1-dev \
280+ gir1.2-javascriptcoregtk-4.1 \
281+ gir1.2-webkit2-4.1 \
282+ libsoup-3.0-dev \
283+ libgtk-3-dev \
284+ libayatana-appindicator3-dev \
285+ librsvg2-dev \
286+ patchelf \
287+ unzip \
288+ xdg-utils
289+
290+ - name : Cache Bun Dependencies
291+ uses : actions/cache@v5
292+ with :
293+ path : |
294+ ~/.bun/install/cache
295+ node_modules
296+ key : bun-${{ matrix.runner }}-${{ hashFiles('bun.lock') }}
297+ restore-keys : |
298+ bun-${{ matrix.runner }}-
299+
300+ - name : Cache Rust Build Artifacts
301+ uses : Swatinem/rust-cache@v2
302+ with :
303+ workspaces : |
304+ src-tauri -> target
305+ key : gstreamer-runtime-${{ matrix.target }}
306+
307+ - name : Cache GStreamer Downloads
308+ uses : actions/cache@v5
309+ with :
310+ path : .cache/gstreamer
311+ key : gstreamer-${{ matrix.runner }}-${{ matrix.arch }}-${{ env.GSTREAMER_VERSION }}-${{ hashFiles('scripts/setup-gstreamer.cjs') }}
312+ restore-keys : |
313+ gstreamer-${{ matrix.runner }}-${{ matrix.arch }}-${{ env.GSTREAMER_VERSION }}-
314+
315+ - name : Install Linux GStreamer
316+ run : node scripts/setup-gstreamer.cjs --platform linux --arch ${{ matrix.arch }} --mode ci --install --version ${{ env.GSTREAMER_VERSION }} --github-env
317+
318+ - name : Install Frontend Dependencies
319+ run : bun install --frozen-lockfile
320+
321+ - name : Clean Binaries Directory
322+ shell : bash
323+ run : rm -rf src-tauri/binaries
324+
325+ - name : Cache Runtime Helper Binaries
326+ id : cache-runtime-binaries-linux
327+ uses : actions/cache@v5
328+ with :
329+ path : src-tauri/binaries
330+ key : runtime-binaries-linux-${{ matrix.arch }}-${{ hashFiles('scripts/setup-ffmpeg.cjs', 'scripts/setup-upscaler.cjs') }}
331+ restore-keys : |
332+ runtime-binaries-linux-${{ matrix.arch }}-
333+
334+ - name : Setup FFmpeg
335+ if : steps.cache-runtime-binaries-linux.outputs.cache-hit != 'true'
336+ run : node scripts/setup-ffmpeg.cjs --platform linux --arch ${{ matrix.arch }}
337+
338+ - name : Setup Upscaler
339+ if : matrix.arch == 'x86_64'
340+ run : node scripts/setup-upscaler.cjs --platform linux --arch x86_64
341+
342+ - name : Build Upscaler For Linux ARM64
343+ if : matrix.arch == 'aarch64' && steps.cache-runtime-binaries-linux.outputs.cache-hit != 'true'
241344 run : |
242- echo "Linux manual GStreamer staging is intentionally not wired into release yet."
243- echo "Implement scripts/setup-gstreamer.cjs linux support before enabling AppImage verification."
345+ sudo apt-get update
346+ sudo apt-get install -y --no-install-recommends cmake libvulkan-dev glslang-dev glslang-tools libgomp1
347+ git config --global url."https://github.com/".insteadOf "git@github.com:"
348+ git clone --recursive https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan.git
349+ cd Real-ESRGAN-ncnn-vulkan
350+ mkdir build
351+ cd build
352+ cmake ../src
353+ make -j"$(nproc)"
354+ cd ../..
355+ mkdir -p src-tauri/binaries
356+ mv Real-ESRGAN-ncnn-vulkan/build/realesrgan-ncnn-vulkan src-tauri/binaries/realesrgan-ncnn-vulkan-aarch64-unknown-linux-gnu
357+ chmod +x src-tauri/binaries/realesrgan-ncnn-vulkan-aarch64-unknown-linux-gnu
358+ rm -rf Real-ESRGAN-ncnn-vulkan
359+
360+ - name : Check Frontend
361+ run : bun run check
362+
363+ - name : Lint
364+ run : bun run lint
365+
366+ - name : Build Linux App Without Bundling
367+ run : bun tauri build --no-bundle --target ${{ matrix.target }}
368+
369+ - name : Build Linux Smoke Test Helper
370+ run : cargo build --manifest-path src-tauri/Cargo.toml --release --target ${{ matrix.target }} --bin gstreamer-runtime-smoke
371+
372+ - name : Smoke Test Controlled Linux GStreamer Runtime
373+ run : src-tauri/target/${{ matrix.target }}/release/gstreamer-runtime-smoke
244374
245375 windows-runtime :
246376 name : Windows x86_64
0 commit comments