3 BASEDIR
="/build/nightly"
4 LOCKFILE
="/tmp/.nightly-builds.lock"
6 UPLOAD_DIR
="${BASEDIR}/upload"
7 UPLOAD_TO
="pakfire@fs01.haj.ipfire.org:/pub/nightly"
10 extract_installer_from_iso
() {
13 local tmpdir
="$(mktemp -d)"
14 mkdir
-p "${dir}/images"
17 for file in ${dir}/*.iso
; do
18 if mount
-o loop
,ro
"${file}" "${tmpdir}"; then
20 for f
in vmlinuz instroot
; do
21 cp -f "${tmpdir}/boot/isolinux/${f}" "${dir}/images"
26 for ext
in "" ".md5"; do
27 ln -s --relative "${file}${ext}" \
28 "${dir}/images/installer.iso${ext}"
41 # Check if this actually source of IPFire 2
42 [ -x "${dir}/make.sh" ] ||
return 1
46 local branch
="$(git config build.branch)"
47 [ -z "${branch}" ] && branch
="master"
49 local commit_old
="$(git rev-parse HEAD)"
52 # Search for the latest core branch
53 if [ "${branch}" = "core" ]; then
54 branch
=$
(git branch
-r |
awk -F/ '{ print $NF }' |
grep ^core |
sort --version-sort |
tail -n1)
57 # If the branch was not updated, we won't build
58 local commit_new
="$(git rev-parse origin/${branch})"
59 [ "${commit_old}" = "${commit_new}" ] && return 2
61 # Checkout the latest commit
62 git
reset --hard "${commit_new}"
64 local now
="$(git log --format="%ci
" -1 "${commit_new}")"
66 local targets
="$(git config build.targets)"
67 [ -z "${targets}" ] && targets
="i586"
70 for target
in ${targets}; do
71 local build_path
="${UPLOAD_DIR}/${branch}/${now}-${commit_new:0:8}"
72 local build
="${build_path}/${target}"
75 .
/make.sh
--target="${target}" clean
77 # Download the toolchain if required
78 .
/make.sh
--target="${target}" gettoolchain ||
continue
80 # Download all sources
81 .
/make.sh
--target="${target}" downloadsrc ||
continue
85 .
/make.sh
--target="${target}" build |
tee "${build}/build.log"
86 local ret
=${PIPESTATUS[0]}
89 git log
-50 > "${build}/changelog.txt"
92 if [ "${ret}" = "0" ]; then
93 mv -v *.iso
*.img.gz
*.img.xz
*.
tar.bz2
*.md5 packages
/ "${build}"
94 extract_installer_from_iso
"${build}"
95 touch "${build}/.success"
99 # Cleanup the build environment
100 .
/make.sh
--target="${target}" clean
103 # If that failed, we will keep the result and it will
104 # be retried with the next build. If that succeeded, the
105 # build will be removed from disk.
107 rm -rf "${UPLOAD_DIR}"
115 mkdir
-p "${UPLOAD_DIR}"
117 # Acquire a Kerberos ticket for authentication
118 if ! klist
&>/dev
/null
; then
119 kinit
-k -t /etc
/krb5.keytab
"host/${HOSTNAME}"
122 rsync
-avHz --progress ${RSYNC_ARGS} \
123 "${UPLOAD_DIR}/" "${UPLOAD_TO}"
138 # Don't start again if the script is already running
139 # or if an other build script is running
140 if is_locked || pgrep
make.sh
>/dev
/null
; then
148 for repo
in $
(find ${BASEDIR} -maxdepth 3 -type d
-name ".git"); do
149 [ -d "${repo}" ] ||
continue
151 build
"$(dirname ${repo})"
154 # Try to sync even nothing was built for retrying failed uploads