Skip to content

Commit 6bf421a

Browse files
committed
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.
1 parent edea8a9 commit 6bf421a

File tree

1 file changed

+74
-34
lines changed

1 file changed

+74
-34
lines changed

.github/workflows/build.yml

Lines changed: 74 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,53 @@ env:
5656
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
5757
ubuntu_image: "ubuntu:22.04"
5858
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
59+
# Reusable shell function for robust apt setup
60+
SETUP_APT_FUNCTION: |
61+
setup_robust_apt() {
62+
set -e
63+
export DEBIAN_FRONTEND=noninteractive
64+
65+
# Configure apt retry logic and timeouts
66+
echo "Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries
67+
echo "Acquire::http::Timeout \"10\";" > /etc/apt/apt.conf.d/80-timeout
68+
echo "Acquire::https::Timeout \"10\";" >> /etc/apt/apt.conf.d/80-timeout
69+
70+
# Try multiple mirrors with fallback
71+
for mirror in "mirrors.kernel.org" "mirror.pit.teraswitch.com" "archive.ubuntu.com"; do
72+
echo "Trying mirror: $mirror"
73+
sed -i "s|archive.ubuntu.com|$mirror|g" /etc/apt/sources.list
74+
sed -i "s|security.ubuntu.com|$mirror|g" /etc/apt/sources.list
75+
if apt-get update; then
76+
echo "Successfully using mirror: $mirror"
77+
break
78+
else
79+
echo "Mirror $mirror failed, trying next..."
80+
sed -i "s|$mirror|archive.ubuntu.com|g" /etc/apt/sources.list
81+
fi
82+
done
83+
84+
apt-get install -y ca-certificates
85+
86+
# For ARM architectures, try multiple port mirrors with fallback
87+
if echo "${1:-}" | grep -q "arm"; then
88+
for port_mirror in "mirrors.kernel.org" "mirror.pit.teraswitch.com" "ports.ubuntu.com"; do
89+
if [ "$port_mirror" = "ports.ubuntu.com" ]; then
90+
port_mirror_url="http://$port_mirror"
91+
else
92+
port_mirror_url="http://$port_mirror"
93+
fi
94+
echo "Trying ports mirror: $port_mirror_url"
95+
sed -i "s|http://ports.ubuntu.com|$port_mirror_url|g" /etc/apt/sources.list
96+
if apt-get update; then
97+
echo "Successfully using ports mirror: $port_mirror_url"
98+
break
99+
else
100+
echo "Ports mirror $port_mirror_url failed, trying next..."
101+
sed -i "s|$port_mirror_url|http://ports.ubuntu.com|g" /etc/apt/sources.list
102+
fi
103+
done
104+
fi
105+
}
59106
60107
jobs:
61108
determine-tag:
@@ -136,12 +183,13 @@ jobs:
136183
docker run --platform ${{ matrix.arch }} --rm \
137184
-v ${{ github.workspace }}:/workspace \
138185
-w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
139-
set -e
140-
export DEBIAN_FRONTEND=noninteractive
141-
sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
142-
sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
186+
# Source the robust apt setup function
187+
eval "${{ env.SETUP_APT_FUNCTION }}"
143188
144-
apt update
189+
# Setup apt with robust mirror handling
190+
setup_robust_apt "${{ matrix.arch }}"
191+
192+
# Install packages and build
145193
apt install -y build-essential libsdl2-dev cmake git
146194
cmake -B build
147195
cmake --build build --config Release -j $(nproc)'
@@ -168,16 +216,13 @@ jobs:
168216
docker run --platform ${{ matrix.arch }} --rm \
169217
-v ${{ github.workspace }}:/workspace \
170218
-w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
171-
set -e
172-
export DEBIAN_FRONTEND=noninteractive
173-
sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
174-
sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
219+
# Source the robust apt setup function
220+
eval "${{ env.SETUP_APT_FUNCTION }}"
175221
176-
apt-get update
177-
apt-get install -y ca-certificates
178-
sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list
222+
# Setup apt with robust mirror handling
223+
setup_robust_apt "${{ matrix.arch }}"
179224
180-
apt update
225+
# Install packages and build
181226
apt install -y build-essential libsdl2-dev cmake git
182227
cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8-a
183228
cmake --build build --config Release -j $(nproc)'
@@ -204,16 +249,13 @@ jobs:
204249
docker run --platform ${{ matrix.arch }} --rm \
205250
-v ${{ github.workspace }}:/workspace \
206251
-w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
207-
set -e
208-
export DEBIAN_FRONTEND=noninteractive
209-
sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
210-
sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
252+
# Source the robust apt setup function
253+
eval "${{ env.SETUP_APT_FUNCTION }}"
211254
212-
apt-get update
213-
apt-get install -y ca-certificates
214-
sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list
255+
# Setup apt with robust mirror handling
256+
setup_robust_apt "${{ matrix.arch }}"
215257
216-
apt update
258+
# Install packages and build
217259
apt install -y build-essential libsdl2-dev cmake git
218260
cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv7-a+fp
219261
cmake --build build --config Release -j $(nproc)'
@@ -411,16 +453,13 @@ jobs:
411453
docker run --platform ${{ matrix.arch }} --rm \
412454
-v ${{ github.workspace }}:/workspace \
413455
-w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
414-
set -e
415-
export DEBIAN_FRONTEND=noninteractive
416-
sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
417-
sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
456+
# Source the robust apt setup function
457+
eval "${{ env.SETUP_APT_FUNCTION }}"
418458
419-
apt-get update
420-
apt-get install -y ca-certificates
421-
sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list
459+
# Setup apt with robust mirror handling
460+
setup_robust_apt "${{ matrix.arch }}"
422461
423-
apt update
462+
# Install packages and build
424463
apt install -y clang build-essential cmake libsdl2-dev git
425464
cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
426465
make
@@ -449,12 +488,13 @@ jobs:
449488
docker run --platform ${{ matrix.arch }} --rm \
450489
-v ${{ github.workspace }}:/workspace \
451490
-w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
452-
set -e
453-
export DEBIAN_FRONTEND=noninteractive
454-
sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
455-
sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list
491+
# Source the robust apt setup function
492+
eval "${{ env.SETUP_APT_FUNCTION }}"
456493
457-
apt update
494+
# Setup apt with robust mirror handling
495+
setup_robust_apt "${{ matrix.arch }}"
496+
497+
# Install packages and build
458498
apt install -y build-essential cmake git
459499
cmake . -DCMAKE_BUILD_TYPE=Debug \
460500
-DWHISPER_SANITIZE_${{ matrix.sanitizer }}=ON \

0 commit comments

Comments
 (0)