blob: 16b895b568a050129976a810eaa878a4ec245349 (
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
|
#!/bin/bash
# build packages one by one, then upload the binary package to the repository server
# Details:
# https://github.com/archlinux32/builder/wiki/Build-system#build-packages
# TODOs:
# include package customizations
# handle failed builds
# actually upload the package
# use different build commands for different repositories
# sign packages
. "${0%/*}/../conf/default.conf"
while true; do
package="$(
ssh \
-i "${master_build_server_identity}" \
-p "${master_build_server_port}" \
"${master_build_server_user}@${master_build_server}" \
'get-assignment'
)"
case $? in
# 0: ok, I gave you an assignment
0)
repository="${package##* }"
package="${package% *}"
git_revision="${package##* }"
package="${package% *}"
# Update git repositories (official packages, community packages and the repository of package customizations).
for repo in "${repo_paths[@]}"; do
git -C "${repo}" clean -df
git -C "${repo}" checkout master
git -C "${repo}" pull
git -C "${repo}" checkout "${git_revision}" &> /dev/null || true
done
PKGBUILD="$(find_pkgbuild "${package}" "${repository}")"
if [ ! -r "${PKGBUILD}" ]; then
echo "can't find PKGBUILD to package '${package}' from repository '${repository}': '${PKGBUILD}'"
exit 1
fi
(
cd "${PKGBUILD%/*}"
extra-i686-build
)
# imagine a blinking cursor here
>&2 echo 'whoops, end of program reached.'
exit 42
;;
# 1: come back (shortly) later - I was running already
1)
sleep $[15+$RANDOM%30]
continue
;;
# 2: come back later - there are still packages to be built,
# but currently none has all its dependencies ready
2)
sleep $[60+$RANDOM%30]
continue
;;
# 3: come back after the next run of get-package-updates - currently
# there are no pending packages
3)
>&2 echo 'Done. No more packages left to build.'
exit 0
;;
# 4: come back, when you've done your work - you hit the limit on
# maximum allowed parallel jobs per ip
4)
>&2 echo 'ERROR: There are too many parallel builds running on this machine.'
exit 1
;;
*)
>&2 echo "ERROR: Unknown exit code $?."
exit 1
;;
esac
done
|