3 BASEDIR
="/build/nightly"
4 LOCKFILE
="/tmp/.nightly-builds.lock"
6 UPLOAD_DIR
="${BASEDIR}/upload"
7 UPLOAD_TO
="pakfire@git.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="$(date -u +"%Y-%m-%d-%H:%M")"
65 local now
="$(git log --format="%cI
" -1 "${commit_new}")"
67 local targets
="$(git config build.targets)"
68 [ -z "${targets}" ] && targets
="i586"
71 for target
in ${targets}; do
72 local build_path
="${UPLOAD_DIR}/${branch}/${now}-${commit_new:0:8}"
73 local build
="${build_path}/${target}"
76 .
/make.sh
--target="${target}" clean
78 # Download the toolchain if required
79 .
/make.sh
--target="${target}" gettoolchain ||
continue
81 # Download all sources
82 .
/make.sh
--target="${target}" downloadsrc ||
continue
86 .
/make.sh
--target="${target}" build |
tee "${build}/build.log"
87 local ret
=${PIPESTATUS[0]}
90 git log
-50 > "${build}/changelog.txt"
93 if [ "${ret}" = "0" ]; then
94 mv -v *.iso
*.img.gz
*.
tar.bz2
*.md5 packages
/ "${build}"
95 extract_installer_from_iso
"${build}"
96 touch "${build}/.success"
100 # Cleanup the build environment
101 .
/make.sh
--target="${target}" clean
104 # If that failed, we will keep the result and it will
105 # be retried with the next build. If that succeeded, the
106 # build will be removed from disk.
108 rm -rf "${build_path}"
116 mkdir
-p "${UPLOAD_DIR}"
118 rsync
-avHz --progress ${RSYNC_ARGS} \
119 "${UPLOAD_DIR}/" "${UPLOAD_TO}"
135 # Don't start again if the script is already running
136 # or if an other build script is running
137 if is_locked || pgrep
make.sh
>/dev
/null
; then
145 for repo
in $
(find ${BASEDIR} -maxdepth 3 -type d
-name ".git"); do
146 [ -d "${repo}" ] ||
continue
148 build
"$(dirname ${repo})"