video_decoders: Fix FEC #1165
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: C/C++ CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
tags: | |
- v[0-9]+.* | |
paths: | |
- '.github/scripts/**' | |
- '.github/workflows/ccpp.yml' | |
- '**.c' | |
- '**.cpp' | |
- '**.cu' | |
- '**.h' | |
- '**.hpp' | |
- '**.m' | |
- '**.mm' | |
- 'autogen.sh' | |
- 'configure.ac' | |
- 'data/**' | |
- 'Makefile.in' | |
workflow_dispatch: | |
jobs: | |
prepare: | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, we do not need to create own token. | |
steps: | |
- uses: actions/checkout@v3 | |
id: checkout | |
with: | |
persist-credentials: true | |
- name: Init environment variables | |
run: . .github/scripts/environment.sh | |
- name: Retag continuous | |
if: github.repository == 'CESNET/UltraGrid' && github.ref == 'refs/heads/master' | |
run: | | |
git fetch --prune --unshallow --tags | |
git tag -f $TAG | |
git push -f origin refs/tags/$TAG:refs/tags/$TAG | |
- name: Update Release | |
if: (github.repository == 'CESNET/UltraGrid' && github.ref == 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') | |
run: .github/scripts/create_release.sh | |
- name: Create continuous release # ensure continuous release is present for AppImage zsync | |
if: startsWith(github.ref, 'refs/tags/') | |
run: .github/scripts/create_continuous_release.sh | |
Ubuntu: | |
name: run Ubuntu | |
needs: prepare | |
runs-on: ubuntu-20.04 | |
env: | |
appimage_key: ${{ secrets.appimage_key }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SDK_URL: ${{ secrets.SDK_URL }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Fetch SDKs ETags | |
id: etags | |
run: | | |
echo "ndi=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v5_Linux.tar.gz)" >> $GITHUB_OUTPUT | |
- name: Cache NDI | |
id: cache-ndi | |
uses: actions/cache@v3 | |
with: | |
path: /var/tmp/Install_NDI_SDK_Linux.tar.gz | |
key: cache-ndi-${{ runner.os }}-${{ steps.etags.outputs.ndi }} | |
- name: Download NDI | |
if: steps.cache-ndi.outputs.cache-hit != 'true' | |
run: curl -L https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v5_Linux.tar.gz -o /var/tmp/Install_NDI_SDK_Linux.tar.gz | |
- name: bootstrap | |
run: | | |
. .github/scripts/environment.sh | |
.github/scripts/Linux/prepare.sh | |
- name: Cache rav1e | |
id: cache-rav1e | |
uses: actions/cache@v3 | |
with: | |
path: rav1e | |
key: cache-rav1e-${{ runner.os }}-${{ hashFiles('.github/scripts/Linux/rav1e.sh') }} | |
- name: Build rav1e | |
if: steps.cache-rav1e.outputs.cache-hit != 'true' | |
run: .github/scripts/Linux/rav1e.sh | |
- name: Install rav1e | |
run: | | |
sudo cp -r rav1e/install/* / | |
sudo ldconfig | |
- name: Cache FFmpeg | |
id: cache-ffmpeg | |
uses: actions/cache@v3 | |
with: | |
path: '/var/tmp/ffmpeg' | |
key: cache-ffmpeg-${{ runner.os }}-${{ hashFiles( '.github/scripts/Linux/prepare.sh', '.github/scripts/Linux/download_build_ffmpeg.sh', '.github/scripts/Linux/ffmpeg-patches/*') }} | |
- name: Build FFmpeg | |
if: steps.cache-ffmpeg.outputs.cache-hit != 'true' | |
run: .github/scripts/Linux/download_build_ffmpeg.sh | |
- name: Install Cached FFmpeg | |
if: steps.cache-ffmpeg.outputs.cache-hit == 'true' | |
run: .github/scripts/Linux/install_ffmpeg.sh | |
- name: configure | |
run: "./autogen.sh $FEATURES || { RC=$?; cat config.log; exit $RC; }" | |
- name: make | |
run: make -j4 | |
- name: make check | |
run: make check | |
- name: make distcheck | |
run: make distcheck | |
- name: check libc/libstdc++ ABI | |
run: .github/scripts/Linux/check_abi.sh 2.31 3.4.28 1.3.12 bin/* lib/ultragrid/* | |
- name: Create AppImage | |
run: data/scripts/Linux-AppImage/create-appimage.sh https://github.com/$GITHUB_REPOSITORY/releases/download/continuous/UltraGrid-$CHANNEL-x86_64.AppImage.zsync | |
- name: Check AppImage | |
run: | | |
mkdir aitest-context # empty build context | |
docker build -f .github/scripts/Linux/utils/Dockerfile.ubuntu -t aitest-ubuntu aitest-context | |
docker build -f .github/scripts/Linux/utils/Dockerfile.arch -t aitest-arch aitest-context | |
curl -LS -O https://raw.githubusercontent.com/AppImage/pkg2appimage/master/appdir-lint.sh -O https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist | |
sudo apt install desktop-file-utils libfile-mimeinfo-perl # desktop-file-validate, mimetype | |
./UltraGrid-$VERSION-x86_64.AppImage --appimage-extract | |
docker run --rm -v $PWD/squashfs-root/:/AppImage aitest-ubuntu /AppImage/AppRun -v | |
docker run --rm -v $PWD/squashfs-root/:/AppImage aitest-ubuntu /AppImage/AppRun --tool uv-qt -h | |
docker run --rm -v $PWD/squashfs-root/:/AppImage aitest-ubuntu sh -c 'xvfb-run /AppImage/AppRun --tool uv-qt & { sleep 10; kill $!; }' | |
docker run --rm -v $PWD/squashfs-root/:/AppImage aitest-ubuntu /AppImage/AppRun --list-modules | |
docker run --rm -v $PWD/squashfs-root:/AppImage aitest-arch /AppImage/AppRun --capabilities | |
bash appdir-lint.sh squashfs-root | |
- name: Upload Release Asset | |
id: upload-release | |
if: (github.repository == 'CESNET/UltraGrid' && github.ref == 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') | |
run: | | |
sudo apt install jq zsync | |
zsyncmake -C -u https://github.com/$GITHUB_REPOSITORY/releases/download/$TAG/UltraGrid-$VERSION-x86_64.AppImage -o UltraGrid-$CHANNEL-x86_64.AppImage.zsync UltraGrid-$VERSION-x86_64.AppImage | |
.github/scripts/replace-asset.sh continuous UltraGrid-$CHANNEL-x86_64.AppImage.zsync application/x-zsync AppImage%20${CHANNEL}%20zsync | |
.github/scripts/replace-asset.sh $TAG UltraGrid-$VERSION-x86_64.AppImage application/x-appimage Linux%20build | |
- name: Upload Build | |
if: steps.upload-release.conclusion == 'skipped' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: UltraGrid-Linux | |
path: UltraGrid-${{ env.VERSION }}-x86_64.AppImage | |
macOS: | |
name: run macOS | |
needs: prepare | |
runs-on: macos-11 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SDK_NONFREE_PATH: /private/var/tmp/sdks-nonfree | |
notarytool_credentials: ${{ secrets.notarytool_credentials }} | |
apple_key_p12_b64: ${{ secrets.apple_key_p12_b64 }} | |
SDK_URL: ${{ secrets.SDK_URL }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Fetch SDKs ETags | |
id: etags | |
run: | | |
echo "nonfree=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh $SDK_URL/VideoMaster_SDK_MacOSX.zip)" >> $GITHUB_OUTPUT | |
echo "ndi=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh https://downloads.ndi.tv/SDK/NDI_SDK_Mac/Install_NDI_SDK_v5_Apple.pkg)" >> $GITHUB_OUTPUT | |
echo "ximea=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh https://www.ximea.com/downloads/recent/XIMEA_OSX_SP.dmg)" >> $GITHUB_OUTPUT | |
- name: Cache Non-Free SDKs | |
id: cache-macos-nonfree-sdks | |
uses: actions/cache@v3 | |
with: | |
path: ${{ env.SDK_NONFREE_PATH }} | |
key: cache-nonfree-sdks-${{ runner.os }}-${{ hashFiles('.github/scripts/macOS/prepare_nonfree_sdks.sh') }}-${{ steps.etags.outputs.nonfree }} | |
- name: Download Non-Free SDKs | |
if: steps.cache-macos-nonfree-sdks.outputs.cache-hit != 'true' && env.SDK_URL != null | |
run: | | |
rm -rf ${{ env.SDK_NONFREE_PATH }} | |
mkdir -p ${{ env.SDK_NONFREE_PATH }} | |
cd ${{ env.SDK_NONFREE_PATH }} | |
curl -S -f -O $SDK_URL/VideoMaster_SDK_MacOSX.zip || true | |
$GITHUB_WORKSPACE/.github/scripts/macOS/prepare_nonfree_sdks.sh | |
- name: Cache XIMEA | |
id: cache-macos-ximea | |
uses: actions/cache@v3 | |
with: | |
path: /var/tmp/XIMEA_OSX_SP.dmg | |
key: cache-ximea-${{ runner.os }}-${{ steps.etags.outputs.ximea }} | |
- name: Download XIMEA | |
if: steps.cache-macos-ximea.outputs.cache-hit != 'true' | |
run: curl -S -L https://www.ximea.com/downloads/recent/XIMEA_OSX_SP.dmg -o /private/var/tmp/XIMEA_OSX_SP.dmg | |
- name: Cache NDI | |
id: cache-ndi | |
uses: actions/cache@v3 | |
with: | |
path: /private/var/tmp/Install_NDI_SDK_Apple.pkg | |
key: cache-ndi-${{ runner.os }}-${{ steps.etags.outputs.ndi }} | |
- name: Download NDI | |
if: steps.cache-ndi.outputs.cache-hit != 'true' | |
run: curl -L https://downloads.ndi.tv/SDK/NDI_SDK_Mac/Install_NDI_SDK_v5_Apple.pkg -o /private/var/tmp/Install_NDI_SDK_Apple.pkg | |
- name: bootstrap | |
run: | | |
. .github/scripts/environment.sh | |
.github/scripts/macOS/prepare.sh | |
- name: configure | |
run: "export ARCH=-msse4.2; ./autogen.sh $FEATURES || { RC=$?; cat config.log; exit $RC; }" | |
- name: make bundle | |
run: make -j4 gui-bundle | |
- name: make check | |
run: make check | |
- name: make distcheck | |
run: | | |
for n in lib opt; do sudo mv /usr/local/$n /usr/local/$n-; done # hide local libs | |
sudo mv $(xcrun --show-sdk-path)/System/Library/Frameworks /tmp/FRMWK | |
make distcheck TARGET=uv-qt.app/Contents/MacOS/uv REFLECTOR_TARGET=uv-qt.app/Contents/MacOS/hd-rum-transcode GUI_EXE=uv-qt.app/Contents/MacOS/uv-qt | |
for n in lib opt; do sudo mv /usr/local/$n- /usr/local/$n; done # return back | |
sudo mv /tmp/FRMWK $(xcrun --show-sdk-path)/System/Library/Frameworks | |
- name: sign+notarize | |
run: .github/scripts/macOS/sign.sh uv-qt.app | |
- name: make dmg | |
run: | | |
make osx-gui-dmg | |
mv UltraGrid.dmg UltraGrid-$VERSION.dmg | |
- name: Upload Release Asset | |
id: upload-release | |
if: (github.repository == 'CESNET/UltraGrid' && github.ref == 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') | |
run: | | |
brew install jq | |
.github/scripts/replace-asset.sh $TAG UltraGrid-$VERSION.dmg application/x-apple-diskimage macOS%20build | |
- name: Upload Build | |
if: steps.upload-release.conclusion == 'skipped' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: UltraGrid-macOS | |
path: UltraGrid-${{ env.VERSION }}.dmg | |
Windows: | |
name: run Windows | |
needs: prepare | |
runs-on: windows-latest | |
defaults: | |
run: | |
shell: C:\shells\msys2bash.cmd {0} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
MSYS2_PATH_TYPE: inherit | |
SDK_URL: ${{ secrets.SDK_URL }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Fetch SDKs ETags | |
id: etags | |
run: | | |
echo "ndi=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh https://downloads.ndi.tv/SDK/NDI_SDK/NDI%205%20SDK.exe)" >> $GITHUB_OUTPUT | |
echo "ximea=$($GITHUB_WORKSPACE/.github/scripts/get-etags.sh https://www.ximea.com/support/attachments/download/37/XIMEA_API_Installer.exe)" >> $GITHUB_OUTPUT | |
- name: Set environment | |
run: .github/scripts/environment.sh | |
- name: Find MSVC | |
run: .github/scripts/Windows/find_msvc.ps1 | |
shell: pwsh -command ". '{0}'" | |
- name: Cache NDI | |
id: cache-ndi | |
uses: actions/cache@v3 | |
with: | |
path: 'C:\ndi.exe' | |
key: cache-ndi-${{ runner.os }}-${{ steps.etags.outputs.ndi }} | |
- name: Download NDI | |
if: steps.cache-ndi.outputs.cache-hit != 'true' | |
run: curl 'https://downloads.ndi.tv/SDK/NDI_SDK/NDI%205%20SDK.exe' -o 'C:\ndi.exe' | |
- name: Cache XIMEA | |
id: cache-macos-ximea | |
uses: actions/cache@v3 | |
with: | |
path: 'C:\XIMEA_API_Installer.exe' | |
key: cache-ximea-${{ runner.os }}-${{ steps.etags.outputs.ximea }} | |
- name: Download XIMEA | |
if: steps.cache-macos-ximea.outputs.cache-hit != 'true' | |
run: curl 'https://www.ximea.com/support/attachments/download/37/XIMEA_API_Installer.exe' -o 'C:\XIMEA_API_Installer.exe' | |
- name: bootsrap | |
run: .github/scripts/Windows/prepare.ps1 | |
shell: pwsh -command ". '{0}'" | |
- name: Cache JACK | |
id: cache-jack | |
uses: actions/cache@v3 | |
with: | |
path: 'C:\Program Files\JACK2' | |
key: cache-jack-${{ runner.os }}-${{ hashFiles('.github/scripts/Windows/install_jack.ps1') }} | |
- name: Install JACK | |
if: steps.cache-jack.outputs.cache-hit != 'true' | |
run: .github/scripts/Windows/install_jack.ps1 | |
shell: pwsh -command ". '{0}'" | |
- name: bootsrap MSYS2 | |
run: $GITHUB_WORKSPACE/.github/scripts/Windows/prepare_msys.sh | |
- name: Cache live555 | |
id: cache-live555 | |
uses: actions/cache@v3 | |
with: | |
path: 'C:\live555' | |
key: cache-live555-${{ runner.os }}-${{ hashFiles('.github/scripts/Windows/build_live555.sh') }} | |
- name: Build live555 | |
if: steps.cache-live555.outputs.cache-hit != 'true' | |
run: $GITHUB_WORKSPACE/.github/scripts/Windows/build_live555.sh | |
- name: Install live555 | |
run: make -C /c/live555 install | |
- name: configure | |
run: ./autogen.sh --prefix=/ --bindir=/ --docdir=/doc $FEATURES || { RC=$?; cat config.log; exit $RC; } | |
- name: make | |
run: make -j4 | |
- name: make check | |
run: make check | |
- name: make bundle | |
run: | | |
cp gui/QT/uv-qt.exe bin | |
rm bin/run_tests.exe | |
export DESTDIR=build/UltraGrid-$VERSION-win64 | |
make install | |
for exe in "$DESTDIR"/*exe; do data/scripts/get_dll_depends.sh "$exe" | while read -r n; do cp "$n" "$DESTDIR"; done; done | |
if command -v windeployqt-qt6 >/dev/null; then windeployqt-qt6 "$DESTDIR/uv-qt.exe"; else windeployqt "$DESTDIR/uv-qt.exe"; fi | |
cp -r data/Windows/* "$DESTDIR" | |
- name: make dist-check | |
run: PATH= /usr/bin/make distcheck TARGET=build/UltraGrid-$VERSION-win64/uv.exe REFLECTOR_TARGET=build/UltraGrid-$VERSION-win64/hd-rum-transcode.exe GUI_EXE=build/UltraGrid-$VERSION-win64/uv-qt.exe | |
- name: Upload Release Asset | |
id: upload-release | |
if: (github.repository == 'CESNET/UltraGrid' && github.ref == 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') | |
run: | | |
cd build; zip -9 -r UltraGrid-$VERSION-win64.zip UltraGrid-$VERSION-win64 | |
PATH=/usr/bin:$PATH # TOREMOVE when not needed (see git commit message) | |
$GITHUB_WORKSPACE/.github/scripts/replace-asset.sh $TAG UltraGrid-$VERSION-win64.zip application/zip Windows%20build | |
- name: Upload Build | |
if: steps.upload-release.conclusion == 'skipped' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: UltraGrid-Windows | |
path: build | |
# vi: set expandtab sw=2: |