From 959cfe80c4924aa04a7c3def388038990733832c Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 18 Sep 2025 07:52:09 +0200 Subject: [PATCH 1/2] ci : improve mirror handling github workflow This commit contains changes to build.yml to enhance the robustness of apt package installation by implementing retries and fallback mechanisms when accessing Ubuntu package mirrors. --- .github/workflows/build.yml | 136 ++++++++++++++++++++++++++++-------- 1 file changed, 107 insertions(+), 29 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dd4eff2c7fb..33bad2325a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -136,12 +136,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done + apt-get install -y ca-certificates + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi + + # Install packages and build apt install -y build-essential libsdl2-dev cmake git cmake -B build cmake --build build --config Release -j $(nproc)' @@ -168,16 +186,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt-get update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done apt-get install -y ca-certificates - sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list - - apt update + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi + + # Install packages and build apt install -y build-essential libsdl2-dev cmake git cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8-a cmake --build build --config Release -j $(nproc)' @@ -204,16 +236,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt-get update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done apt-get install -y ca-certificates - sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list - - apt update + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi + + # Install packages and build apt install -y build-essential libsdl2-dev cmake git cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv7-a+fp cmake --build build --config Release -j $(nproc)' @@ -411,16 +457,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt-get update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done apt-get install -y ca-certificates - sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list - - apt update + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi + + # Install packages and build apt install -y clang build-essential cmake libsdl2-dev git cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang make @@ -449,12 +509,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done + apt-get install -y ca-certificates + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi + + # Install packages and build apt install -y build-essential cmake git cmake . -DCMAKE_BUILD_TYPE=Debug \ -DWHISPER_SANITIZE_${{ matrix.sanitizer }}=ON \ From dd526231feca588c3316ee0d9b35c1fbbeb1d5e0 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 18 Sep 2025 11:13:47 +0200 Subject: [PATCH 2/2] add missed ubuntu-22-gcc-{arm64,arm-v7} jobs --- .github/workflows/build.yml | 52 ++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 33bad2325a2..7802efa17e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -378,16 +378,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt-get update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done apt-get install -y ca-certificates - sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi - apt update + # Install packages and build apt install -y build-essential cmake libsdl2-dev git cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8-a make @@ -416,16 +430,30 @@ jobs: docker run --platform ${{ matrix.arch }} --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' + # Robust apt setup with mirror fallback set -e export DEBIAN_FRONTEND=noninteractive - sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list - - apt-get update + echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout + echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout + for mirror in mirrors.kernel.org mirror.pit.teraswitch.com archive.ubuntu.com; do + echo "Trying mirror: $mirror" + sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list + sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list + if apt-get update; then echo "Using: $mirror"; break; else + echo "Failed: $mirror"; sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list; fi + done apt-get install -y ca-certificates - sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list + if echo "${{ matrix.arch }}" | grep -q arm; then + for pm in mirrors.kernel.org mirror.pit.teraswitch.com ports.ubuntu.com; do + url="http://$pm"; echo "Trying ports: $url" + sed -i "s|http://ports.ubuntu.com|$url|g" /etc/apt/sources.list + if apt-get update; then echo "Using ports: $url"; break; else + sed -i "s|$url|http://ports.ubuntu.com|g" /etc/apt/sources.list; fi + done + fi - apt update + # Install packages and build apt install -y build-essential cmake libsdl2-dev git cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv7-a+fp make