diff --git a/ci/docker/fedora/create-subprojects-cache.sh b/ci/docker/fedora/create-subprojects-cache.sh new file mode 100644 index 0000000000..711299fb1b --- /dev/null +++ b/ci/docker/fedora/create-subprojects-cache.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +set -eux + +# get gstreamer and make all subprojects available +git clone -b "${GIT_BRANCH}" "${GIT_URL}" /gstreamer +git -C /gstreamer submodule update --init --depth=1 +meson subprojects download --sourcedir /gstreamer +./ci/scripts/handle-subprojects-cache.py --build --cache-dir /subprojects /gstreamer/subprojects/ + +# Run git gc to prune unwanted refs and reduce the size of the image +for i in $(find /subprojects/ -mindepth 1 -maxdepth 1 -type d); +do + git -C $i gc --aggressive || true; +done + +# Now remove the gstreamer clone +rm -rf /gstreamer diff --git a/ci/docker/fedora/install-deps.sh b/ci/docker/fedora/install-deps.sh new file mode 100644 index 0000000000..5bb71c430a --- /dev/null +++ b/ci/docker/fedora/install-deps.sh @@ -0,0 +1,249 @@ +#! /bin/bash + +set -eux + +# Fedora base image disable installing documentation files. See https://pagure.io/atomic-wg/issue/308 +# We need them to cleanly build our doc. +sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf +dnf -y swap coreutils-single coreutils-full + +dnf install -y git-core dnf-plugins-core python3-pip toolbox-experience + +# Add rpm fusion repositories in order to access all of the gst plugins +sudo dnf install -y \ + "https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" \ + "https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm" + +dnf upgrade -y && dnf distro-sync -y + +# install rest of the extra deps +dnf install -y \ + aalib-devel \ + aom \ + bat \ + busybox \ + intel-mediasdk-devel \ + libaom \ + libaom-devel \ + libcaca-devel \ + libcurl-devel \ + libdav1d \ + libdav1d-devel \ + libdrm-devel \ + ccache \ + cmake \ + clang-devel \ + curl \ + elfutils \ + elfutils-libs \ + elfutils-devel \ + gcc \ + gcc-c++ \ + gdb \ + git-lfs \ + glslc \ + gtk-doc \ + gtk3 \ + gtk3-devel \ + gtk4 \ + gtk4-devel \ + gtest \ + gtest-devel \ + graphene \ + graphene-devel \ + gsl \ + gsl-devel \ + gupnp \ + gupnp-devel \ + gupnp-igd \ + gupnp-igd-devel \ + gssdp \ + gssdp-devel \ + iproute \ + faac-devel \ + ffmpeg \ + ffmpeg-libs \ + ffmpeg-devel \ + flex \ + flite \ + flite-devel \ + libsoup \ + libsoup-devel \ + mono-devel \ + procps-ng \ + patch \ + qconf \ + qt5-linguist \ + qt5-qtbase-devel \ + qt5-qtbase-private-devel \ + qt5-qtdeclarative-devel \ + qt5-qtquickcontrols2-devel \ + qt5-qttools-common \ + qt5-qtwayland-devel \ + qt5-qtx11extras-devel \ + redhat-rpm-config \ + json-glib \ + json-glib-devel \ + libnice \ + libnice-devel \ + libsodium-devel \ + libunwind \ + libunwind-devel \ + libva-devel \ + libyaml-devel \ + libxml2-devel \ + libxslt-devel \ + llvm-devel \ + log4c-devel \ + libxcb-devel \ + libxkbcommon-devel \ + libxkbcommon-x11-devel \ + make \ + nasm \ + neon \ + neon-devel \ + ninja-build \ + nunit \ + npm \ + opencv \ + opencv-devel \ + openjpeg2 \ + openjpeg2-devel \ + qemu-system-x86 \ + SDL2 \ + SDL2-devel \ + sbc \ + sbc-devel \ + x264 \ + x264-libs \ + x264-devel \ + python3 \ + python3-devel \ + python3-libs \ + python3-wheel \ + python3-gobject \ + python3-cairo \ + python3-cairo-devel \ + valgrind \ + vulkan \ + vulkan-devel \ + vulkan-loader \ + mesa-libGL \ + mesa-libGL-devel \ + mesa-libGLU \ + mesa-libGLU-devel \ + mesa-libGLES \ + mesa-libGLES-devel \ + mesa-libOpenCL \ + mesa-libOpenCL-devel \ + mesa-libgbm \ + mesa-libgbm-devel \ + mesa-libd3d \ + mesa-libd3d-devel \ + mesa-libOSMesa \ + mesa-libOSMesa-devel \ + mesa-dri-drivers \ + mesa-vulkan-drivers \ + xset \ + xorg-x11-server-utils \ + xorg-x11-server-Xvfb + +# Install common debug symbols +dnf debuginfo-install -y gtk3 \ + glib2 \ + glibc \ + gupnp \ + gupnp-igd \ + gssdp \ + freetype \ + openjpeg \ + gobject-introspection \ + python3 \ + python3-libs \ + python3-gobject \ + libappstream-glib-devel \ + libjpeg-turbo \ + glib-networking \ + libcurl \ + libdrm \ + libsoup \ + libxcb \ + libxkbcommon \ + libxkbcommon-x11 \ + nss \ + nss-softokn \ + nss-softokn-freebl \ + nss-sysinit \ + nss-util \ + openssl \ + openssl-libs \ + openssl-pkcs11 \ + brotli \ + bzip2-libs \ + gpm-libs \ + harfbuzz \ + harfbuzz-icu \ + json-c \ + json-glib \ + libbabeltrace \ + libffi \ + libsrtp \ + libunwind \ + libdvdread \ + mpg123-libs \ + neon \ + orc-compiler \ + orc \ + pixman \ + pulseaudio-libs \ + pulseaudio-libs-glib2 \ + wavpack \ + "libwayland-*" \ + "wayland-*" \ + webrtc-audio-processing \ + ffmpeg \ + ffmpeg-libs \ + faad2-libs \ + libavdevice \ + libmpeg2 \ + faac \ + fdk-aac \ + vulkan-loader \ + x264 \ + x264-libs \ + x265 \ + x265-libs \ + xz \ + xz-libs \ + zip \ + zlib + +# Install the dependencies of gstreamer +dnf builddep -y gstreamer1 \ + gstreamer1-plugins-base \ + gstreamer1-plugins-good \ + gstreamer1-plugins-good-extras \ + gstreamer1-plugins-good-qt \ + gstreamer1-plugins-ugly \ + gstreamer1-plugins-ugly-free \ + gstreamer1-plugins-bad-free \ + gstreamer1-plugins-bad-free-extras \ + gstreamer1-plugins-bad-freeworld \ + gstreamer1-libav \ + gstreamer1-rtsp-server \ + gstreamer1-vaapi \ + python3-gstreamer1 + +dnf remove -y meson -x ninja-build +pip3 install meson==1.2.3 hotdoc==0.16 python-gitlab tomli junitparser + +# Remove gst-devel packages installed by builddep above +dnf remove -y "gstreamer1*devel" + +dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc + +echo "Removing DNF cache" +dnf clean all + +rm -R /root/* +rm -rf /var/cache/dnf /var/log/dnf* diff --git a/ci/docker/fedora/install-gdk-pixbuf.sh b/ci/docker/fedora/install-gdk-pixbuf.sh new file mode 100644 index 0000000000..b9c513d4be --- /dev/null +++ b/ci/docker/fedora/install-gdk-pixbuf.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +set -eux + +# Install gdk-pixbuf manually as fedora 34 doesn't build the docs/.devhelp2 +git clone --branch gdk-pixbuf-2-40 https://gitlab.gnome.org/GNOME/gdk-pixbuf.git +cd gdk-pixbuf +meson setup _build --prefix=/usr -Ddocs=true +meson install -C _build +cd .. +rm -rf gdk-pixbuf diff --git a/ci/docker/fedora/install-rust.sh b/ci/docker/fedora/install-rust.sh new file mode 100644 index 0000000000..fe38a3fe92 --- /dev/null +++ b/ci/docker/fedora/install-rust.sh @@ -0,0 +1,27 @@ +#! /bin/bash + +set -eux + +# Install Rust +RUSTUP_VERSION=1.26.0 +RUST_VERSION=1.73.0 +RUST_ARCH="x86_64-unknown-linux-gnu" + +RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init +curl -o rustup-init $RUSTUP_URL + +export RUSTUP_HOME="/usr/local/rustup" +export CARGO_HOME="/usr/local/cargo" +export PATH="/usr/local/cargo/bin:$PATH" + +chmod +x rustup-init; +./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; +rm rustup-init; +chmod -R a+w $RUSTUP_HOME $CARGO_HOME + +# Apparently rustup did not do that, and it fails now +cargo install cargo-c --version 0.9.27+cargo-0.74.0 + +rustup --version +cargo --version +rustc --version diff --git a/ci/docker/fedora/install-wayland-protocols.sh b/ci/docker/fedora/install-wayland-protocols.sh new file mode 100644 index 0000000000..8109a69d4a --- /dev/null +++ b/ci/docker/fedora/install-wayland-protocols.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +set -eux + +# Install a more up to date wayland-protocols +git clone --branch 1.32 https://gitlab.freedesktop.org/wayland/wayland-protocols.git +cd wayland-protocols +meson setup _build --prefix=/usr -Dtests=false +meson install -C _build +cd .. +rm -rf wayland-protocols diff --git a/ci/docker/fedora/prepare.sh b/ci/docker/fedora/prepare.sh index 058ed3ed51..8fa3fa6799 100644 --- a/ci/docker/fedora/prepare.sh +++ b/ci/docker/fedora/prepare.sh @@ -2,334 +2,18 @@ set -eux -# Fedora base image disable installing documentation files. See https://pagure.io/atomic-wg/issue/308 -# We need them to cleanly build our doc. -sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf -dnf -y swap coreutils-single coreutils-full - -dnf install -y git-core dnf-plugins-core python3-pip toolbox-experience - # Configure git for various usage git config --global user.email "gstreamer@gstreamer.net" git config --global user.name "Gstbuild Runner" -# Add rpm fusion repositories in order to access all of the gst plugins -sudo dnf install -y \ - "https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" \ - "https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm" +bash ./ci/docker/fedora/install-deps.sh -dnf upgrade -y && dnf distro-sync -y +bash ./ci/docker/fedora/install-gdk-pixbuf.sh -# install rest of the extra deps -dnf install -y \ - aalib-devel \ - aom \ - bat \ - busybox \ - intel-mediasdk-devel \ - libaom \ - libaom-devel \ - libcaca-devel \ - libcurl-devel \ - libdav1d \ - libdav1d-devel \ - libdrm-devel \ - ccache \ - cmake \ - clang-devel \ - curl \ - elfutils \ - elfutils-libs \ - elfutils-devel \ - gcc \ - gcc-c++ \ - gdb \ - git-lfs \ - glslc \ - gtk-doc \ - gtk3 \ - gtk3-devel \ - gtk4 \ - gtk4-devel \ - gtest \ - gtest-devel \ - graphene \ - graphene-devel \ - gsl \ - gsl-devel \ - gupnp \ - gupnp-devel \ - gupnp-igd \ - gupnp-igd-devel \ - gssdp \ - gssdp-devel \ - iproute \ - faac-devel \ - ffmpeg \ - ffmpeg-libs \ - ffmpeg-devel \ - flex \ - flite \ - flite-devel \ - libsoup \ - libsoup-devel \ - mono-devel \ - procps-ng \ - patch \ - qconf \ - qt5-linguist \ - qt5-qtbase-devel \ - qt5-qtbase-private-devel \ - qt5-qtdeclarative-devel \ - qt5-qtquickcontrols2-devel \ - qt5-qttools-common \ - qt5-qtwayland-devel \ - qt5-qtx11extras-devel \ - redhat-rpm-config \ - json-glib \ - json-glib-devel \ - libnice \ - libnice-devel \ - libsodium-devel \ - libunwind \ - libunwind-devel \ - libva-devel \ - libyaml-devel \ - libxml2-devel \ - libxslt-devel \ - llvm-devel \ - log4c-devel \ - libxcb-devel \ - libxkbcommon-devel \ - libxkbcommon-x11-devel \ - make \ - nasm \ - neon \ - neon-devel \ - ninja-build \ - nunit \ - npm \ - opencv \ - opencv-devel \ - openjpeg2 \ - openjpeg2-devel \ - qemu-system-x86 \ - SDL2 \ - SDL2-devel \ - sbc \ - sbc-devel \ - x264 \ - x264-libs \ - x264-devel \ - python3 \ - python3-devel \ - python3-libs \ - python3-wheel \ - python3-gobject \ - python3-cairo \ - python3-cairo-devel \ - valgrind \ - vulkan \ - vulkan-devel \ - vulkan-loader \ - mesa-libGL \ - mesa-libGL-devel \ - mesa-libGLU \ - mesa-libGLU-devel \ - mesa-libGLES \ - mesa-libGLES-devel \ - mesa-libOpenCL \ - mesa-libOpenCL-devel \ - mesa-libgbm \ - mesa-libgbm-devel \ - mesa-libd3d \ - mesa-libd3d-devel \ - mesa-libOSMesa \ - mesa-libOSMesa-devel \ - mesa-dri-drivers \ - mesa-vulkan-drivers \ - xset \ - xorg-x11-server-utils \ - xorg-x11-server-Xvfb +bash ./ci/docker/fedora/install-wayland-protocols.sh -# Install common debug symbols -dnf debuginfo-install -y gtk3 \ - glib2 \ - glibc \ - gupnp \ - gupnp-igd \ - gssdp \ - freetype \ - openjpeg \ - gobject-introspection \ - python3 \ - python3-libs \ - python3-gobject \ - libappstream-glib-devel \ - libjpeg-turbo \ - glib-networking \ - libcurl \ - libdrm \ - libsoup \ - libxcb \ - libxkbcommon \ - libxkbcommon-x11 \ - nss \ - nss-softokn \ - nss-softokn-freebl \ - nss-sysinit \ - nss-util \ - openssl \ - openssl-libs \ - openssl-pkcs11 \ - brotli \ - bzip2-libs \ - gpm-libs \ - harfbuzz \ - harfbuzz-icu \ - json-c \ - json-glib \ - libbabeltrace \ - libffi \ - libsrtp \ - libunwind \ - libdvdread \ - mpg123-libs \ - neon \ - orc-compiler \ - orc \ - pixman \ - pulseaudio-libs \ - pulseaudio-libs-glib2 \ - wavpack \ - "libwayland-*" \ - "wayland-*" \ - webrtc-audio-processing \ - ffmpeg \ - ffmpeg-libs \ - faad2-libs \ - libavdevice \ - libmpeg2 \ - faac \ - fdk-aac \ - vulkan-loader \ - x264 \ - x264-libs \ - x265 \ - x265-libs \ - xz \ - xz-libs \ - zip \ - zlib +bash ./ci/docker/fedora/install-rust.sh -# Install the dependencies of gstreamer -dnf builddep -y gstreamer1 \ - gstreamer1-plugins-base \ - gstreamer1-plugins-good \ - gstreamer1-plugins-good-extras \ - gstreamer1-plugins-good-qt \ - gstreamer1-plugins-ugly \ - gstreamer1-plugins-ugly-free \ - gstreamer1-plugins-bad-free \ - gstreamer1-plugins-bad-free-extras \ - gstreamer1-plugins-bad-freeworld \ - gstreamer1-libav \ - gstreamer1-rtsp-server \ - gstreamer1-vaapi \ - python3-gstreamer1 +bash ./ci/docker/fedora/virtme-fluster-setup.sh -dnf remove -y meson -x ninja-build -pip3 install meson==1.2.3 hotdoc==0.16 python-gitlab tomli junitparser - -# Remove gst-devel packages installed by builddep above -dnf remove -y "gstreamer1*devel" - -dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc - -# Install gdk-pixbuf manually as fedora 34 doesn't build the docs/.devhelp2 -git clone --branch gdk-pixbuf-2-40 https://gitlab.gnome.org/GNOME/gdk-pixbuf.git -cd gdk-pixbuf -meson setup _build --prefix=/usr -Ddocs=true -meson install -C _build -cd .. -rm -rf gdk-pixbuf - -# Install a more up to date wayland-protocols -git clone --branch 1.32 https://gitlab.freedesktop.org/wayland/wayland-protocols.git -cd wayland-protocols -meson setup _build --prefix=/usr -Dtests=false -meson install -C _build -cd .. -rm -rf wayland-protocols - -# Install Rust -RUSTUP_VERSION=1.26.0 -RUST_VERSION=1.73.0 -RUST_ARCH="x86_64-unknown-linux-gnu" - -RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init -curl -o rustup-init $RUSTUP_URL - -export RUSTUP_HOME="/usr/local/rustup" -export CARGO_HOME="/usr/local/cargo" -export PATH="/usr/local/cargo/bin:$PATH" - -chmod +x rustup-init; -./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; -rm rustup-init; -chmod -R a+w $RUSTUP_HOME $CARGO_HOME - -# Apparently rustup did not do that, and it fails now -cargo install cargo-c --version 0.9.27+cargo-0.74.0 - -rustup --version -cargo --version -rustc --version - -# Install virtme-ng -git clone https://github.com/arighi/virtme-ng.git -pushd virtme-ng -git fetch --tags -git checkout v1.8 -./setup.py install --prefix=/usr -popd - -# Install fluster -pushd /opt/ -git clone https://github.com/fluendo/fluster.git -pushd fluster -git checkout 303a6edfda1701c8bc351909fb1173a0958810c2 -./fluster.py download -popd -popd - -# get gstreamer and make all subprojects available -git clone -b ${GIT_BRANCH} ${GIT_URL} /gstreamer -git -C /gstreamer submodule update --init --depth=1 -meson subprojects download --sourcedir /gstreamer -/gstreamer/ci/scripts/handle-subprojects-cache.py --build --cache-dir /subprojects /gstreamer/subprojects/ - -# Build a linux image for virtme fluster tests -/gstreamer/ci/scripts/build-linux.sh \ - "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" \ - "v6.5.8" \ - /opt/linux/bzImage \ - 'MEDIA_SUPPORT' \ - 'MEDIA_TEST_SUPPORT' \ - 'V4L_TEST_DRIVERS' \ - 'CONFIG_VIDEO_VISL' - -# Run git gc to prune unwanted refs and reduce the size of the image -for i in $(find /subprojects/ -mindepth 1 -maxdepth 1 -type d); -do - git -C $i gc --aggressive || true; -done - -# Now remove the gstreamer clone -rm -rf /gstreamer - -echo "Removing DNF cache" -dnf clean all - -rm -R /root/* -rm -rf /var/cache/dnf /var/log/dnf* +bash ./ci/docker/fedora/create-subprojects-cache.sh diff --git a/ci/docker/fedora/virtme-fluster-setup.sh b/ci/docker/fedora/virtme-fluster-setup.sh new file mode 100644 index 0000000000..38743a73d4 --- /dev/null +++ b/ci/docker/fedora/virtme-fluster-setup.sh @@ -0,0 +1,30 @@ +#! /bin/bash + +set -eux + +# Install virtme-ng +git clone https://github.com/arighi/virtme-ng.git +pushd virtme-ng +git fetch --tags +git checkout v1.8 +./setup.py install --prefix=/usr +popd + +# Install fluster +pushd /opt/ +git clone https://github.com/fluendo/fluster.git +pushd fluster +git checkout 303a6edfda1701c8bc351909fb1173a0958810c2 +./fluster.py download +popd +popd + +# Build a linux image for virtme fluster tests +bash ./ci/scripts/build-linux.sh \ + "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" \ + "v6.5.8" \ + /opt/linux/bzImage \ + 'MEDIA_SUPPORT' \ + 'MEDIA_TEST_SUPPORT' \ + 'V4L_TEST_DRIVERS' \ + 'CONFIG_VIDEO_VISL' diff --git a/ci/scripts/build-linux.sh b/ci/scripts/build-linux.sh index b10a59d6cf..d1f2bd6c49 100755 --- a/ci/scripts/build-linux.sh +++ b/ci/scripts/build-linux.sh @@ -60,7 +60,7 @@ else fi # Apply visl patches until they are upstreamed -for patch in /gstreamer/ci/docker/fedora/patches/*.patch; do +for patch in ../ci/docker/fedora/patches/*.patch; do patch -p1 < "${patch}" done