Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 27 additions & 18 deletions .github/actions/environment-check/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -283,9 +283,12 @@ runs:
- name: Verify FFmpeg MTL plugin
shell: bash
run: |
set -euo pipefail
echo "===== FFmpeg MTL Plugin Verification ====="

# Locate the binary first
# Locate the binary first. The cached ffmpeg executable can be less stable
# across runner image updates than the shared libraries used by the build,
# so treat it as diagnostic-only rather than the authoritative check.
FFMPEG_PATH=$(which ffmpeg 2>/dev/null || true)
if [ -z "$FFMPEG_PATH" ]; then
echo "ERROR: ffmpeg not found in PATH (which ffmpeg returned nothing)."
Expand All @@ -294,30 +297,36 @@ runs:
fi
echo " [OK] ffmpeg binary: $FFMPEG_PATH"

# Run ffmpeg -version and print full output
echo " --- ffmpeg -version output ---"
FFMPEG_VERSION_OUT=$(ffmpeg -version 2>&1)
echo "$FFMPEG_VERSION_OUT"
FFMPEG_VER=$(echo "$FFMPEG_VERSION_OUT" | head -1)
if [ -z "$FFMPEG_VER" ]; then
echo "ERROR: ffmpeg -version returned no output."
LIBAVDEVICE_PATH=$(ldconfig -p | awk '/libavdevice\.so/{print $NF; exit}')
if [ -z "$LIBAVDEVICE_PATH" ] || [ ! -f "$LIBAVDEVICE_PATH" ]; then
echo "ERROR: libavdevice shared library not found via ldconfig."
exit 1
fi
echo " [OK] ffmpeg version: $FFMPEG_VER"
echo " [OK] libavdevice: $LIBAVDEVICE_PATH"

# Check MTL device is registered
echo " --- ffmpeg -devices output ---"
DEVICES=$(ffmpeg -devices 2>&1)
echo "$DEVICES"
if echo "$DEVICES" | grep -qi "mtl"; then
MTL_DEVICES=$(echo "$DEVICES" | grep -i "mtl")
echo " [OK] MTL device(s) registered in FFmpeg avdevices:"
echo "$MTL_DEVICES" | sed 's/^/ /'
echo " --- libavdevice symbol/string probe ---"
if strings "$LIBAVDEVICE_PATH" | grep -q "mtl_st20p"; then
echo " [OK] Found mtl_st20p registration markers in libavdevice"
else
echo "ERROR: FFmpeg MTL plugin not found after build."
echo "ERROR: FFmpeg MTL plugin markers not found in libavdevice."
exit 1
fi

# Best-effort diagnostics only. Some cached ffmpeg binaries can trap on
# runner CPU/image changes even when the shared libraries remain usable.
echo " --- ffmpeg -version output (non-fatal diagnostic) ---"
set +e
FFMPEG_VERSION_OUT=$(ffmpeg -version 2>&1)
FFMPEG_VERSION_RC=$?
set -e
echo "$FFMPEG_VERSION_OUT"
if [ "$FFMPEG_VERSION_RC" -eq 0 ]; then
FFMPEG_VER=$(echo "$FFMPEG_VERSION_OUT" | head -1)
echo " [OK] ffmpeg version: $FFMPEG_VER"
else
echo " [WARN] ffmpeg -version exited with $FFMPEG_VERSION_RC; continuing because libavdevice validation passed"
fi

- name: Report cache size
if: steps.env-cache.outputs.cache-hit != 'true'
shell: bash
Expand Down
74 changes: 69 additions & 5 deletions .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,85 @@ jobs:
COVERITY_URL: ${{ secrets.COVERITY_URL }}
COVERITY_USER: ${{ secrets.COVERITY_ARTIFACTORY_USER }}
COVERITY_PASSWORD: ${{ secrets.COVERITY_ARTIFACTORY_PASSWORD }}
COVERITY_TOKEN: ${{ secrets.COVERITY_TOKEN }}
COVERITY_PROJECT: ${{ secrets.COVERITY_PROJECT }}
COVERITY_SCAN_USER: ${{ secrets.COVERITY_SCAN_USER }}
COVERITY_SCAN_PASSWORD: ${{ secrets.COVERITY_SCAN_PASSWORD }}
run: |
set -euo pipefail
echo "===== Coverity Setup ====="
COVERITY_DIR="$HOME/coverity"
COVERITY_TARBALL="/tmp/coverity.tar.gz"
if [ -x "$COVERITY_DIR/bin/cov-build" ]; then
echo " [OK] Coverity already installed at $COVERITY_DIR"
"$COVERITY_DIR/bin/cov-build" --ident | head -1 || true
exit 0
fi
echo " Downloading Coverity..."

rm -f "$COVERITY_TARBALL"
mkdir -p "$COVERITY_DIR"
wget --no-proxy -q --user="$COVERITY_USER" --password="$COVERITY_PASSWORD" \
-O /tmp/coverity.tar.gz "$COVERITY_URL"

DOWNLOAD_OK=0

if [ -n "${COVERITY_TOKEN:-}" ]; then
echo " Downloading Coverity from scan.coverity.com (token/project mode)..."
PROJECT_RAW="${COVERITY_PROJECT:-OpenVisualCloud/directview-led-software-toolkit}"
if [ -z "$PROJECT_RAW" ]; then
echo " [WARN] No project provided via COVERITY_PROJECT or GITHUB_REPOSITORY"
else
PROJECT_ENCODED="${PROJECT_RAW//\//%2F}"
if wget -q --post-data "token=${COVERITY_TOKEN}&project=${PROJECT_ENCODED}" \
-O "$COVERITY_TARBALL" "https://scan.coverity.com/download/linux64"; then
DOWNLOAD_OK=1
echo " [OK] Downloaded from scan.coverity.com for project ${PROJECT_RAW}"
else
echo " [WARN] scan.coverity.com token/project download failed, trying fallback source"
rm -f "$COVERITY_TARBALL"
fi
fi
else
echo " [INFO] COVERITY_TOKEN not set, skipping scan.coverity.com token/project download"
fi

if [ "$DOWNLOAD_OK" -eq 0 ] && [ -n "${COVERITY_SCAN_USER:-}" ] && [ -n "${COVERITY_SCAN_PASSWORD:-}" ]; then
echo " Downloading Coverity from scan.coverity.com (user/password mode)..."
if wget -q --user="$COVERITY_SCAN_USER" --password="$COVERITY_SCAN_PASSWORD" \
-O "$COVERITY_TARBALL" "https://scan.coverity.com/download/cxx/linux64"; then
DOWNLOAD_OK=1
echo " [OK] Downloaded from scan.coverity.com"
else
echo " [WARN] scan.coverity.com user/password download failed, trying fallback source"
rm -f "$COVERITY_TARBALL"
fi
fi

if [ "$DOWNLOAD_OK" -eq 0 ]; then
if [ -n "${COVERITY_URL:-}" ] && [ -n "${COVERITY_USER:-}" ] && [ -n "${COVERITY_PASSWORD:-}" ]; then
echo " Downloading Coverity from configured COVERITY_URL..."
wget --no-proxy -q --user="$COVERITY_USER" --password="$COVERITY_PASSWORD" \
-O "$COVERITY_TARBALL" "$COVERITY_URL"
DOWNLOAD_OK=1
echo " [OK] Downloaded from COVERITY_URL"
fi
fi

if [ "$DOWNLOAD_OK" -eq 0 ] || [ ! -s "$COVERITY_TARBALL" ]; then
echo "ERROR: Coverity download failed."
echo "Set either COVERITY_TOKEN (and optionally COVERITY_PROJECT),"
echo "or COVERITY_SCAN_USER/COVERITY_SCAN_PASSWORD,"
echo "or COVERITY_URL/COVERITY_ARTIFACTORY_USER/COVERITY_ARTIFACTORY_PASSWORD secrets."
exit 1
fi

echo " Extracting Coverity..."
tar xzf /tmp/coverity.tar.gz --strip-components=1 -C "$COVERITY_DIR"
rm -f /tmp/coverity.tar.gz
tar xzf "$COVERITY_TARBALL" --strip-components=1 -C "$COVERITY_DIR"
rm -f "$COVERITY_TARBALL"

if [ ! -x "$COVERITY_DIR/bin/cov-build" ] || [ ! -x "$COVERITY_DIR/bin/cov-configure" ]; then
echo "ERROR: Coverity install incomplete (missing cov-build/cov-configure)."
exit 1
fi

echo " Coverity installed:"
"$COVERITY_DIR/bin/cov-build" --ident | head -1 || true

Expand Down
Loading