Skip to content

Commit 4a573ce

Browse files
authored
Merge pull request #57 from gasbytes/gst-libav1.0
gst-libav1.0 workflow
2 parents 70ab8fa + 5c81419 commit 4a573ce

1 file changed

Lines changed: 148 additions & 0 deletions

File tree

.github/workflows/gst-libav1.0.yml

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
name: gst-libav1.0 Build and Test
2+
3+
on:
4+
push:
5+
branches: [ 'master', 'main', 'release/**' ]
6+
pull_request:
7+
branches: [ '*' ]
8+
concurrency:
9+
group: ${{ github.workflow }}-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
jobs:
13+
build_and_test:
14+
name: Build & Test gst-libav1.0
15+
runs-on: ubuntu-latest
16+
container:
17+
image: ubuntu:25.04
18+
options: --user root
19+
timeout-minutes: 60
20+
21+
strategy:
22+
matrix:
23+
gst_ref: [ 'master', 'debian/1.26.2-1', 'debian/1.26.3-1' ]
24+
fail-fast: false
25+
26+
steps:
27+
- name: Checkout gnutls-wolfssl repository
28+
uses: actions/checkout@v4
29+
30+
- name: Install Meson and ninja
31+
run: |
32+
apt-get update
33+
apt-get install -y sudo meson ninja-build
34+
35+
- name: Install GStreamer ≥1.26 dev-packages
36+
run: |
37+
apt-get update
38+
apt-get install -y \
39+
libgstreamer1.0-dev \
40+
libgstreamer-plugins-base1.0-dev \
41+
gstreamer1.0-tools
42+
43+
- name: Install build tools & dependencies
44+
run: |
45+
apt-get install -y \
46+
build-essential autoconf automake pkg-config yasm git \
47+
meson ninja-build cmake \
48+
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
49+
libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev \
50+
gstreamer1.0-tools \
51+
gstreamer1.0-plugins-base \
52+
gstreamer1.0-plugins-good \
53+
gstreamer1.0-plugins-bad \
54+
gstreamer1.0-libav \
55+
gnulib autopoint gperf gtk-doc-tools nettle-dev \
56+
clang libtasn1-bin libtasn1-6-dev libunistring-dev \
57+
libp11-kit-dev libunbound-dev wget gtk-doc-tools libswscale-dev libswresample-dev
58+
59+
- name: Build GnuTLS with wolfSSL provider
60+
run: |
61+
GNUTLS_INSTALL=/opt/gnutls WOLFSSL_INSTALL=/opt/wolfssl ./setup.sh
62+
63+
- name: Verify GnuTLS install
64+
run: |
65+
test -d /opt/gnutls/lib || (echo "/opt/gnutls/lib missing" && exit 1)
66+
67+
- name: Build FFmpeg with GnuTLS & MPEG-4 encoder
68+
run: |
69+
cd $RUNNER_WORKSPACE
70+
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg-gnutls
71+
cd ffmpeg-gnutls
72+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig"
73+
export CPPFLAGS="-I/opt/gnutls/include"
74+
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib"
75+
export LD_LIBRARY_PATH="/opt/gnutls/lib:$LD_LIBRARY_PATH"
76+
./configure \
77+
--prefix=/opt/ffmpeg-gnutls \
78+
--disable-openssl \
79+
--enable-gnutls \
80+
--enable-encoder=mpeg4 \
81+
--disable-x86asm \
82+
--enable-shared
83+
make -j"$(nproc)" && make install
84+
85+
- name: Verify libav* link against custom GnuTLS
86+
run: |
87+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
88+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
89+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
90+
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
91+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
92+
for lib in libavformat.so.62 libavfilter.so.11; do
93+
echo ">>> ldd for $lib:"
94+
ldd /opt/ffmpeg-gnutls/lib/$lib
95+
if ! ldd /opt/ffmpeg-gnutls/lib/$lib \
96+
| grep -q '/opt/gnutls/lib/libgnutls.so.30'; then
97+
echo "✖ $lib is NOT using custom GnuTLS"
98+
exit 1
99+
fi
100+
echo "✔ $lib is using custom GnuTLS"
101+
done
102+
103+
- name: Clone & checkout gst-libav1.0 @ ${{ matrix.gst_ref }}
104+
run: |
105+
git clone https://salsa.debian.org/gstreamer-team/gst-libav1.0.git gst-libav
106+
cd gst-libav
107+
git fetch --tags
108+
git checkout ${{ matrix.gst_ref }}
109+
110+
- name: Build gst-libav1.0 (${{ matrix.gst_ref }})
111+
working-directory: gst-libav
112+
run: |
113+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
114+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
115+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
116+
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
117+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
118+
rm -rf build
119+
meson setup build --prefix=/usr -Ddoc=disabled -Dtests=enabled
120+
ninja -C build
121+
122+
- name: Smoke-test plugin with gst-inspect & playbin
123+
working-directory: gst-libav
124+
run: |
125+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
126+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
127+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
128+
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
129+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
130+
PAGER=cat \
131+
GST_PLUGIN_PATH=$(pwd)/build \
132+
GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \
133+
gst-inspect-1.0 libav
134+
timeout 30s env \
135+
GST_PLUGIN_PATH=$(pwd)/build \
136+
GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \
137+
gst-launch-1.0 -v playbin \
138+
uri=https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 || test $? -eq 124
139+
140+
- name: Run upstream gst-libav tests
141+
working-directory: gst-libav
142+
run: |
143+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
144+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
145+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
146+
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
147+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
148+
meson test -C build --print-errorlogs

0 commit comments

Comments
 (0)