Skip to content

Commit bdef7e9

Browse files
authored
Update release.yml
1 parent 7ac815e commit bdef7e9

File tree

1 file changed

+60
-22
lines changed

1 file changed

+60
-22
lines changed

.github/workflows/release.yml

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
branches:
66
- main
77
schedule:
8-
- cron: '0 0 1 * *'
8+
- cron: '0 0 1 * *' # chạy đầu tháng
99
workflow_dispatch:
1010

1111
jobs:
@@ -17,36 +17,74 @@ jobs:
1717
uses: actions/checkout@v4
1818

1919
- name: Check and build Packages
20+
shell: bash
2021
run: |
21-
set -e
22-
rm -f Packages Packages.gz scan.log
23-
24-
# 1. Lọc bỏ .deb bị hỏng (dpkg-deb không đọc được control)
25-
for f in *.deb; do
22+
set -euo pipefail
23+
rm -f Packages Packages.gz scan.log tmp.log removed.list
24+
25+
echo "🔎 Pre-check: remove .deb that dpkg-deb cannot read"
26+
# dùng find -print0 để an toàn với tên có dấu cách
27+
while IFS= read -r -d '' f; do
2628
echo "Checking $f ..."
2729
if ! dpkg-deb -I "$f" >/dev/null 2>&1; then
28-
echo "❌ Error in $f → removing"
29-
rm -rf "$f"
30+
echo "❌ dpkg-deb failed: removing $f"
31+
rm -f -- "$f"
3032
else
3133
echo "✅ OK: $f"
3234
fi
33-
done
34-
35-
# 2. Build Packages, nếu fail thì xoá .deb lỗi rồi retry
36-
until dpkg-scanpackages -m . /dev/null > Packages 2> scan.log; do
37-
echo "⚠️ dpkg-scanpackages failed, removing broken .deb ..."
38-
grep '\.deb' scan.log | while read -r line; do
39-
BAD_DEB=$(echo "$line" | grep -o '[^ ]*\.deb' || true)
40-
if [ -n "$BAD_DEB" ]; then
41-
echo "❌ Removing invalid package: $BAD_DEB"
42-
rm -f "$BAD_DEB"
35+
done < <(find . -maxdepth 1 -type f -name "*.deb" -print0)
36+
37+
echo "📦 Build Packages with iterative per-file checks (safe)"
38+
MAX_ROUNDS=10
39+
round=0
40+
41+
while true; do
42+
round=$((round+1))
43+
echo "Attempt #$round: running dpkg-scanpackages..."
44+
# thử build toàn bộ
45+
if dpkg-scanpackages -m . /dev/null > Packages 2> scan.log; then
46+
echo "✅ dpkg-scanpackages succeeded"
47+
break
48+
fi
49+
50+
echo "⚠️ dpkg-scanpackages failed on attempt #$round. Inspecting packages to find culprits..."
51+
# nếu vượt quá giới hạn vòng lặp -> in log và fail để debug
52+
if [ "$round" -gt "$MAX_ROUNDS" ]; then
53+
echo "❌ Reached max rounds ($MAX_ROUNDS). Dumping scan.log and failing."
54+
sed -n '1,200p' scan.log || true
55+
exit 1
56+
fi
57+
58+
# tìm từng .deb gây lỗi bằng cách thử dpkg-scanpackages trên từng file riêng
59+
# => sẽ catch chính xác file gây lỗi (với tên có space vẫn ok)
60+
removed_any=0
61+
while IFS= read -r -d '' debfile; do
62+
# chạy dpkg-scanpackages trên 1 file (stdout ignore). Nếu fail => xóa file
63+
if ! dpkg-scanpackages -m "$debfile" /dev/null > /dev/null 2> tmp.log; then
64+
echo "❌ Removing broken package: $debfile"
65+
rm -f -- "$debfile"
66+
echo "$debfile" >> removed.list
67+
removed_any=1
4368
fi
44-
done
69+
done < <(find . -maxdepth 1 -type f -name "*.deb" -print0)
70+
71+
if [ "$removed_any" -eq 0 ]; then
72+
echo "❌ No broken package detected by per-file check, but dpkg-scanpackages still fails."
73+
echo "---- scan.log ----"
74+
sed -n '1,200p' scan.log || true
75+
echo "---- tmp.log (last per-file test) ----"
76+
sed -n '1,200p' tmp.log || true
77+
exit 1
78+
fi
79+
80+
echo "Removed packages listed in removed.list:"
81+
sed -n '1,200p' removed.list || true
82+
echo "Retrying dpkg-scanpackages..."
4583
done
46-
47-
# 3. Tạo Packages.gz cho apt
84+
85+
# nén Packages cho apt
4886
gzip -c9 Packages > Packages.gz
49-
echo "✅ Packages build done"
87+
echo "✅ Packages.gz created"
5088
5189
- name: Upload GitHub Pages artifact
5290
uses: actions/upload-pages-artifact@v3

0 commit comments

Comments
 (0)