11name : gst-libav1.0 Build and Test
2-
32on :
43 push :
54 branches : [ 'master', 'main', 'release/**' ]
87concurrency :
98 group : ${{ github.workflow }}-${{ github.ref }}
109 cancel-in-progress : true
11-
1210jobs :
1311 build_and_test :
1412 name : Build & Test gst-libav1.0
1513 runs-on : ubuntu-latest
1614 container :
17- image : ubuntu:25.04
15+ image : debian:bookworm
1816 options : --user root
1917 timeout-minutes : 60
20-
2118 strategy :
2219 matrix :
2320 gst_ref : [ 'master', 'debian/1.26.2-1', 'debian/1.26.3-1' ]
2421 fail-fast : false
25-
2622 steps :
2723 - name : Checkout gnutls-wolfssl repository
2824 uses : actions/checkout@v4
29-
3025 - name : Install Meson and ninja
3126 run : |
3227 apt-get update
3328 apt-get install -y sudo meson ninja-build
34-
3529 - name : Install GStreamer ≥1.26 dev-packages
3630 run : |
3731 apt-get update
3832 apt-get install -y \
3933 libgstreamer1.0-dev \
4034 libgstreamer-plugins-base1.0-dev \
4135 gstreamer1.0-tools
42-
4336 - name : Install build tools & dependencies
4437 run : |
4538 apt-get install -y \
@@ -54,10 +47,10 @@ jobs:
5447 gstreamer1.0-libav \
5548 gnulib autopoint gperf gtk-doc-tools nettle-dev \
5649 clang libtasn1-bin libtasn1-6-dev libunistring-dev \
57- libp11-kit-dev libunbound-dev wget gtk-doc-tools libswscale-dev libswresample-dev \
58- nasm
50+ libp11-kit-dev libunbound-dev wget gtk-doc-tools libswscale-dev libswresample-dev nasm \
51+ python3-pip flex bison libgirepository1.0-dev python3-dev
52+ pip3 install --break-system-packages --upgrade meson
5953
60- # ───────────── cache the wolfssl/gnutls tool-chain ─────────────
6154 - name : Restore cached gnutls-wolfssl
6255 id : cache-gnutls
6356 uses : actions/cache@v4
@@ -74,35 +67,67 @@ jobs:
7467 if : steps.cache-gnutls.outputs.cache-hit != 'true'
7568 run : |
7669 GNUTLS_INSTALL=/opt/gnutls WOLFSSL_INSTALL=/opt/wolfssl ./setup.sh
77-
7870 - name : Verify GnuTLS install
7971 run : |
8072 test -d /opt/gnutls/lib || (echo "/opt/gnutls/lib missing" && exit 1)
8173
74+ - name : Restore cached GStreamer
75+ id : cache-gstreamer
76+ uses : actions/cache@v4
77+ with :
78+ path : /opt/gstreamer
79+ key : gstreamer-1.26.2-${{ runner.os }}-bookworm
80+ restore-keys : |
81+ gstreamer-1.26.2-${{ runner.os }}-
82+
83+ - name : Build GStreamer 1.26.2 from source
84+ if : steps.cache-gstreamer.outputs.cache-hit != 'true'
85+ run : |
86+ pip3 install --break-system-packages meson ninja
87+ git clone https://github.com/GStreamer/gstreamer.git gstreamer-source
88+ cd gstreamer-source
89+ git checkout 1.26.2
90+ meson setup build \
91+ --prefix=/opt/gstreamer \
92+ --libdir=lib \
93+ -Dgood=enabled \
94+ -Dbad=enabled \
95+ -Dugly=enabled \
96+ -Dlibav=disabled \
97+ -Ddevtools=disabled \
98+ -Dsharp=disabled \
99+ -Dpython=disabled \
100+ -Drs=disabled \
101+ -Dgst-plugins-bad:vulkan=disabled \
102+ -Dgst-plugins-bad:nvcodec=disabled \
103+ -Dgst-plugins-bad:qsv=disabled
104+ ninja -C build
105+ ninja -C build install
106+ cd ..
107+ rm -rf gstreamer-source
82108 - name : Build FFmpeg with GnuTLS & MPEG-4 encoder
83109 run : |
84110 cd $RUNNER_WORKSPACE
85111 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg-gnutls
86112 cd ffmpeg-gnutls
87- export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig"
88- export CPPFLAGS="-I/opt/gnutls/include"
89- export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib"
90- export LD_LIBRARY_PATH="/opt/gnutls/lib:$LD_LIBRARY_PATH"
113+ export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/gstreamer/lib/pkgconfig "
114+ export CPPFLAGS="-I/opt/gnutls/include -I/opt/gstreamer/include "
115+ export LDFLAGS="-L/opt/gnutls/lib -L/opt/gstreamer/lib - Wl,-rpath,/opt/gnutls/lib -Wl,-rpath,/opt/gstreamer /lib"
116+ export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/gstreamer/lib: $LD_LIBRARY_PATH"
91117 ./configure \
92118 --prefix=/opt/ffmpeg-gnutls \
93119 --disable-openssl \
94120 --enable-gnutls \
95121 --enable-encoder=mpeg4 \
96122 --enable-shared
97123 make -j"$(nproc)" && make install
98-
99124 - name : Verify libav* link against custom GnuTLS
100125 run : |
101- export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
102- export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
103- export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
104- -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
105- export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
126+ export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:/opt/gstreamer/lib/pkgconfig: $PKG_CONFIG_PATH"
127+ export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include -I/opt/gstreamer/include $CPPFLAGS"
128+ export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib -L/opt/gstreamer/lib \
129+ -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib -Wl,-rpath,/opt/gstreamer/lib $LDFLAGS"
130+ export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:/opt/gstreamer/lib: $LD_LIBRARY_PATH"
106131 for lib in libavformat.so.62 libavfilter.so.11; do
107132 echo ">>> ldd for $lib:"
108133 ldd /opt/ffmpeg-gnutls/lib/$lib
@@ -113,50 +138,46 @@ jobs:
113138 fi
114139 echo "✔ $lib is using custom GnuTLS"
115140 done
116-
117141 - name : Clone & checkout gst-libav1.0 @ ${{ matrix.gst_ref }}
118142 run : |
119143 git clone https://salsa.debian.org/gstreamer-team/gst-libav1.0.git gst-libav
120144 cd gst-libav
121145 git fetch --tags
122146 git checkout ${{ matrix.gst_ref }}
123-
124147 - name : Build gst-libav1.0 (${{ matrix.gst_ref }})
125148 working-directory : gst-libav
126149 run : |
127- export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
128- export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
129- export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
130- -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
131- export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
150+ export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:/opt/gstreamer/lib/pkgconfig: $PKG_CONFIG_PATH"
151+ export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include -I/opt/gstreamer/include $CPPFLAGS"
152+ export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib -L/opt/gstreamer/lib \
153+ -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib -Wl,-rpath,/opt/gstreamer/lib $LDFLAGS"
154+ export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:/opt/gstreamer/lib: $LD_LIBRARY_PATH"
132155 rm -rf build
133156 meson setup build --prefix=/usr -Ddoc=disabled -Dtests=enabled
134157 ninja -C build
135-
136158 - name : Smoke-test plugin with gst-inspect & playbin
137159 working-directory : gst-libav
138160 run : |
139- export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
140- export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
141- export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
142- -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
143- export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
161+ export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:/opt/gstreamer/lib/pkgconfig: $PKG_CONFIG_PATH"
162+ export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include -I/opt/gstreamer/include $CPPFLAGS"
163+ export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib -L/opt/gstreamer/lib \
164+ -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib -Wl,-rpath,/opt/gstreamer/lib $LDFLAGS"
165+ export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:/opt/gstreamer/lib: $LD_LIBRARY_PATH"
144166 PAGER=cat \
145167 GST_PLUGIN_PATH=$(pwd)/build \
146- GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu /gstreamer-1.0 \
147- gst-inspect-1.0 libav
168+ GST_PLUGIN_SYSTEM_PATH_1_0=/opt/gstreamer/lib /gstreamer-1.0 \
169+ /opt/gstreamer/bin/ gst-inspect-1.0 libav
148170 timeout 30s env \
149171 GST_PLUGIN_PATH=$(pwd)/build \
150- GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu /gstreamer-1.0 \
151- gst-launch-1.0 -v playbin \
172+ GST_PLUGIN_SYSTEM_PATH_1_0=/opt/gstreamer/lib /gstreamer-1.0 \
173+ /opt/gstreamer/bin/ gst-launch-1.0 -v playbin \
152174 uri=https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 || test $? -eq 124
153-
154175 - name : Run upstream gst-libav tests
155176 working-directory : gst-libav
156177 run : |
157- export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
158- export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
159- export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
160- -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
161- export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
178+ export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:/opt/gstreamer/lib/pkgconfig: $PKG_CONFIG_PATH"
179+ export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include -I/opt/gstreamer/include $CPPFLAGS"
180+ export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib -L/opt/gstreamer/lib \
181+ -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib -Wl,-rpath,/opt/gstreamer/lib $LDFLAGS"
182+ export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:/opt/gstreamer/lib: $LD_LIBRARY_PATH"
162183 meson test -C build --print-errorlogs
0 commit comments