4a6a6f4a6c
- .gitea/workflows/build.yml — on push/PR:
* cmake build на CUDA 12.4 devel image (Ubuntu 22.04 base)
* compile-only smoke (no GPU нужен): libcuframes.so + tools + examples
* install-prefix layout verify (headers + libs в правильных путях)
* filter/ — clone FFmpeg n7.1 + apply patch + build minimal patched
ffmpeg, verify cuframes demuxer registered
- .gitea/workflows/release.yml — on tag v*:
* build runtime Docker image, push в git.goldix.org/gx/cuframes:<version>
* build source tarball cuframes-<version>.tar.gz как artifact
- README.md badges: build status, release version, license
Runner: gitea act_runner v0.4.1 на R9-88.23 — labels ubuntu-22.04 / ubuntu-24.04
доступны через docker.gitea.com/runner-images. CUDA devel image использует
nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 (уже cached на runner host).
Stress test (требует GPU) намерено НЕ в CI — runner без GPU. Запускать
отдельно на dev-машине через ctest.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
126 lines
4.3 KiB
YAML
126 lines
4.3 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths-ignore:
|
|
- '**.md'
|
|
- 'docs/**'
|
|
- 'BENCHMARKS.md'
|
|
- 'ROADMAP.md'
|
|
- 'CHANGELOG.md'
|
|
- 'LICENSE'
|
|
- '.gitea/ISSUE_TEMPLATE/**'
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
cmake-build:
|
|
name: cmake build (CUDA 12.4, Ubuntu 22.04)
|
|
runs-on: ubuntu-22.04
|
|
container:
|
|
image: nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
|
|
steps:
|
|
- name: Install build deps
|
|
run: |
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
build-essential cmake ninja-build pkg-config git \
|
|
libavformat-dev libavcodec-dev libavutil-dev libswscale-dev \
|
|
ca-certificates
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Configure (full — libcuframes + examples + tools)
|
|
run: |
|
|
cmake -B build -S . -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_TESTING=OFF \
|
|
-DBUILD_EXAMPLES=ON \
|
|
-DBUILD_TOOLS=ON \
|
|
-DBUILD_FFMPEG_FILTER=OFF \
|
|
-DBUILD_PYTHON_BINDINGS=OFF
|
|
|
|
- name: Build
|
|
run: cmake --build build --parallel
|
|
|
|
- name: Verify produced binaries + library
|
|
run: |
|
|
ls -la build/libcuframes/libcuframes.so*
|
|
ls -la build/libcuframes/libcuframes_static.a
|
|
ls -la build/tools/cuframes-rtsp-source/cuframes-rtsp-source
|
|
ls -la build/examples/sub_count/sub_count
|
|
./build/tools/cuframes-rtsp-source/cuframes-rtsp-source --help | head -5
|
|
|
|
- name: Install + verify install layout
|
|
run: |
|
|
cmake --install build --prefix /tmp/cuframes-install
|
|
test -f /tmp/cuframes-install/include/cuframes/cuframes.h
|
|
test -f /tmp/cuframes-install/include/cuframes/cuframes.hpp
|
|
test -f /tmp/cuframes-install/lib/libcuframes.so
|
|
test -f /tmp/cuframes-install/lib/libcuframes_static.a
|
|
|
|
filter-build:
|
|
name: ffmpeg filter patch (out-of-tree)
|
|
runs-on: ubuntu-22.04
|
|
container:
|
|
image: nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
|
|
needs: cmake-build
|
|
steps:
|
|
- name: Install build deps
|
|
run: |
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
build-essential cmake ninja-build pkg-config git nasm \
|
|
libssl-dev libx264-dev libx265-dev libnuma-dev zlib1g-dev \
|
|
ca-certificates wget patch
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Build libcuframes (для linking в patched ffmpeg)
|
|
run: |
|
|
cmake -B build -S . -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TOOLS=OFF
|
|
cmake --build build --parallel
|
|
cmake --install build --prefix /opt/cuframes
|
|
|
|
- name: Clone FFmpeg n7.1 + apply patch
|
|
run: |
|
|
git clone --depth 1 --branch n7.1 https://github.com/FFmpeg/FFmpeg.git /src/ffmpeg
|
|
cd /src/ffmpeg
|
|
patch -p1 < $GITHUB_WORKSPACE/filter/ffmpeg-7.1-cuframes-demuxer.patch
|
|
ls libavformat/cuframesdec.c
|
|
|
|
- name: Configure FFmpeg (minimal + libcuframes)
|
|
run: |
|
|
cd /src/ffmpeg
|
|
./configure \
|
|
--prefix=/opt/ffmpeg \
|
|
--enable-libcuframes \
|
|
--extra-cflags="-I/opt/cuframes/include -I/usr/local/cuda/include" \
|
|
--extra-ldflags="-L/opt/cuframes/lib -L/usr/local/cuda/lib64" \
|
|
--extra-libs="-lcudart -lpthread -lrt -lm" \
|
|
--disable-x86asm --disable-everything \
|
|
--enable-demuxer=cuframes,rawvideo \
|
|
--enable-decoder=rawvideo \
|
|
--enable-muxer=null,rawvideo \
|
|
--enable-protocol=file --enable-ffmpeg \
|
|
--disable-doc --disable-htmlpages --disable-manpages \
|
|
--disable-podpages --disable-txtpages
|
|
|
|
- name: Build FFmpeg
|
|
run: |
|
|
cd /src/ffmpeg
|
|
make -j$(nproc) ffmpeg
|
|
|
|
- name: Verify cuframes demuxer registered
|
|
run: |
|
|
export LD_LIBRARY_PATH=/opt/cuframes/lib
|
|
/src/ffmpeg/ffmpeg -hide_banner -formats | grep cuframes
|
|
/src/ffmpeg/ffmpeg -hide_banner -h demuxer=cuframes | head -10
|