Skip to content

Commit 8f9bda5

Browse files
committed
ci(preview): add Linux GStreamer build smoke
1 parent beaf0a4 commit 8f9bda5

1 file changed

Lines changed: 136 additions & 6 deletions

File tree

.github/workflows/gstreamer-runtime.yml

Lines changed: 136 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)