@@ -17,41 +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- echo "🔎 Checking all .deb files..."
25- find . -type f -name "*.deb" -print0 | while IFS= read -r -d '' f; 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 "❌ Invalid package: $f → removing "
29- rm -f "$f"
30+ echo "❌ dpkg-deb failed: removing $f "
31+ rm -f -- "$f"
3032 else
3133 echo "✅ OK: $f"
3234 fi
33- done
34-
35- echo "📦 Building Packages..."
36- # Loop cho đến khi dpkg-scanpackages thành công
37- until dpkg-scanpackages -m . /dev/null > Packages 2> scan.log; do
38- echo "⚠️ dpkg-scanpackages failed, removing broken .deb ..."
39- BAD_DEBS=$(grep -oE '\./.*\.deb' scan.log | sort -u)
40- if [ -z "$BAD_DEBS" ]; then
41- echo "❌ No specific .deb found in scan.log, aborting"
42- cat scan.log
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
4355 exit 1
4456 fi
45- for BAD_DEB in $BAD_DEBS; do
46- if [ -f "$BAD_DEB" ]; then
47- echo "❌ Removing invalid package: $BAD_DEB"
48- rm -f "$BAD_DEB"
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
4968 fi
50- 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..."
5183 done
52-
84+
85+ # nén Packages cho apt
5386 gzip -c9 Packages > Packages.gz
54- echo "✅ Packages build done "
87+ echo "✅ Packages.gz created "
5588
5689 - name : Upload GitHub Pages artifact
5790 uses : actions/upload-pages-artifact@v3
0 commit comments