#!/bin/bash
XIBUILD=./xibuild
fetch () {
git clone https://git.davidovski.xyz/xilinux/xipkgs
mkdir dist
}
build () {
for REPO in $(du -h xipkgs/repo/* | awk '{print $2}' | sort -r); do
REPO_NAME=$(echo $REPO | cut -d"/" -f2-)
REPO_INDEX=dist/$REPO_NAME/index.html
REPO_LIST=dist/$REPO_NAME/packages.txt
start-index $REPO_NAME $REPO_INDEX
printf "" > xibuild.report.log
for BUILD_FILE in $REPO/*; do
DEST=dist/$REPO_NAME
$XIBUILD -o $DEST $BUILD_FILE
extend-index $BUILD_FILE $REPO_INDEX
done;
rm xibuild.report.log
conclude-index $REPO_INDEX
generate-package-list
add-additional
done;
}
start-index () {
echo "
packages for $1
Packages in $1
name |
xibuild |
build log |
description |
file |
info file |
" > $2
}
extend-index () {
PKG_NAME=$(basename $1 .xibuild)
DESC=$(grep $PKG_NAME xibuild.report.log | cut -d" " -f3-)
COLOR="none"
if grep $PKG_NAME xibuild.report.log | grep -q new; then
COLOR="pass"
fi
if grep $PKG_NAME xibuild.report.log | grep -q fail; then
if [ -f $DEST ]; then
COLOR="warning"
else
COLOR="fail"
fi
fi
echo "
$PKG_NAME |
src |
log |
$DESC |
$PKG_NAME.xipkg |
.info |
" >> $2
}
conclude-index () {
echo "
Latest builds: $(date)
Legend:
- build skipped; no updates
- build failed; no previous version
- build failed; previous version exists
- build passed: new update
" >> $1
}
generate-package-list () {
cd dist/$REPO_NAME
ls -1 *.xipkg.info > packages.txt
cd -
}
add-additional () {
# move logs and sources
mv logs/* dist/$REPO_NAME/logs
mkdir -p dist/$REPO_NAME/src
mv $REPO/* dist/$REPO_NAME/src/
# add key for whole repo
cp keychain/xi.pub dist/repo/
}
clean () {
rm -rf xipkgs
rm -rf logs
rm -rf tmp
rm -rf xibuild.log
}
sync () {
[[ $# = 0 ]] || rsync -vLta --no-perms --no-owner --no-group --delete -z -e ssh ./dist/ $1
}
# update the repository
fetch
build
clean
sync $@