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
1111jobs :
@@ -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