Skip to content

update registry test results #16

update registry test results

update registry test results #16

Workflow file for this run

name: Test Registry
on:
push:
schedule:
- cron: '0 0 */1 * *'
workflow_dispatch:
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Test Registries and Update README
run: |
# 读取 README.md 中的 registry 列表
registries=$(awk '/\| Registry \| Description \| Status \| Speed \| Time \|/,/^$/' README.md | tail -n +3 | sed '/^$/d' | awk -F'|' '{print $2 "|" $3}' | sed 's/^ *//;s/ *$//')
# 更新 README.md 的函数
update_readme() {
local registry="$1"
local description="$2"
local status="$3"
local speed="$4"
local time="$5"
sed -i "s#| $registry | $description |.*#| $registry | $description | $status | $speed | $time |#" README.md
}
# 测试 registry 的函数,包含重试逻辑
test_registry() {
local registry="$1"
local description="$2"
local image="$3"
local max_attempts=3
local attempt=1
local output=$(mktemp)
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt of $max_attempts for $registry"
if timeout 60s bash -c "time docker pull $registry/$image" > "$output" 2>&1; then
status="✅ Good"
pull_time=$(grep real "$output" | awk '{print $2}' | sed 's/0m//;s/s//')
image_size=$(docker image inspect "$registry/$image" --format='{{.Size}}' | awk '{print $1/1024/1024}')
speed=$(echo "scale=2; $image_size / $pull_time" | bc)
echo "$registry is good, Speed: ${speed} MB/s, Time: ${pull_time}s"
update_readme "$registry" "$description" "$status" "${speed} MB/s" "${pull_time}s"
rm "$output"
return 0
else
echo "$registry failed on attempt $attempt"
attempt=$((attempt + 1))
sleep 5 # 等待5秒后重试
fi
done
status="❌ Failed"
update_readme "$registry" "$description" "$status" "-" "-"
rm "$output"
return 1
}
# 测试每个 registry
image="library/nginx:alpine"
while IFS='|' read -r registry description; do
registry=$(echo "$registry" | xargs) # 去除前后空格
description=$(echo "$description" | xargs) # 去除前后空格
echo "Testing $registry"
# 清理可能存在的镜像
docker rmi "$registry/$image" > /dev/null 2>&1 || true
# 使用子shell隔离每个registry的执行
(
test_registry "$registry" "$description" "$image"
docker rmi "$registry/$image" > /dev/null 2>&1 || true
) || true # 即使子shell失败,也继续执行下一个registry
done <<< "$registries"
- name: Commit and push if changed
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
git add README.md
git diff --quiet && git diff --staged --quiet || (git commit -m "update registry test results"; git push)