aboutsummaryrefslogtreecommitdiffstats
path: root/rebuild-alpine.sh
blob: 0b79eeb9df094b64ea15d690d96b15073ab898c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
rootdir=$(pwd -P)
pkglist="$rootdir/acceptable-package-list.txt"

distclean () {
    echo "Removing traces of previous builds from $rootdir"
    local allpkgs=$(find $rootdir -maxdepth 3 -name APKBUILD -print | sed -e 's/\/APKBUILD//g' | sort)
    for p in $allpkgs ; do
        cd $p
        pwd
        abuild clean            2>&1
        abuild cleanoldpkg      2>&1
        abuild cleanpkg         2>&1
        abuild cleancache       2>&1
    done
}

pkgcheck () {
    local installed
    installed=$(apk info)
    for q in $installed ; do
        if [ -z "$(grep $q $pkglist)" ] ; then
            echo "Removing unwanted installed package $q"
            sudo apk del $q
        fi
    done
}

build () {
    local pkgs
    local maintainer
    local pkgno
    local failed
    pkgs=$($rootdir/aport.lua deplist $rootdir $1)
    pktcnt=$(echo $pkgs | wc -w)
    pkgno=0
    failed=0
    for p in $pkgs ; do
        if [ ! -d "$rootdir/$1/$p" ] ; then
            continue
        fi
        
        pkgcheck
        pkgno=$(expr "$pkgno" + 1)
        echo "Building $p ($pkgno of $pktcnt in $1 - $failed failed)"
        cd $rootdir/$1/$p
        if [ -n "$debug" ] ; then
            apk info | sort > $rootdir/packages.$1.$pkgno.$p.before
        fi
        abuild -rm > $rootdir/$1_$p.txt 2>&1
        if [ "$?" = "0" ] ; then
    	    if [ -z "$debug" ] ; then
                rm $rootdir/$1_$p.txt
            fi
        else
            echo "Package $1/$p failed to build (output in $rootdir/$1_$p.txt)"
            if [ -n "$mail" ] ; then
                maintainer=$(grep Maintainer APKBUILD | cut -d " " -f 3- | sed 's/.*< *//;s/ *>.*//;' )
                if [ -n "$maintainer" ] ; then
                    recipients="$maintainer,alpine-devel@lists.alpinelinux.org"
                else
                    recipients="alpine-devel@lists.alpinelinux.org"
                fi
                echo "$1/$p: sending mail to [$recipients]" >> $rootdir/mail.lst
                if [ $(wc -l $rootdir/$1_$p.txt | cut -f 1 -d ' ') -gt 400 ]; then
                    TMPFILE="$(mktemp $1_$p.XXXXXX).txt" || exit 1
                    head -n 200 $rootdir/$1_$p.txt >> $TMPFILE
                    echo "-------" >> $TMPFILE
                    echo "snip..." >> $TMPFILE
                    echo "-------" >> $TMPFILE
                    tail -n 200 $rootdir/$1_$p.txt >> $TMPFILE
                    BUILDLOG="$TMPFILE"
                else
                    BUILDLOG="$rootdir/$1_$p.txt"
                fi

                echo "Package $1/$p failed to build. Build output is attached" | \
                    email -s "NOT SPAM $p build report" -n "AlpineBuildBot" -f "buildbot@alpinelinux.org" -a "$BUILDLOG" "$recipients"
                if [ "$BUILDLOG" = "$TMPFILE" ]; then
                    rm $BUILDLOG
                fi
            fi
            failed=$(expr "$failed" + 1)
        fi
        if [ -n "$debug" ] ; then
            apk info | sort > $rootdir/packages.$1.$pkgno.$p.after
        fi
    done
    
    if [ "$failed" = "0" ] ; then
        echo "All $pktcnt packages in $1 built successfully" >> aport-build-log.txt
    fi
    
    cd $rootdir
}

touch START_OF_BUILD.txt
rm -f mail.lst

unset clean
unset mail
while getopts "cmd" opt; do
	case $opt in
		'c') clean="--clean";;
		'm') mail="--mail";;
		'd') debug="--debug";;
	esac
done

if [ -n "$clean" ] ; then
    echo "Invoked with 'clean' option. This will take a while ..."
    tmp=$(distclean)
    echo "Done"
fi

echo "Refresh aports tree"
git pull

sudo apk -U upgrade

for s in main testing unstable ; do
    echo "Building packages in $s"
    pkgcheck
    build $s
done

touch END_OF_BUILD.txt

echo "Done"