Tenha seu canário (o processo procurando por alterações) escreva um arquivo de estado em e. g. /var/run/build-needed
.
Configure um cron job para ser executado a cada minuto (ou a cada cinco minutos, ou qualquer frequência que você julgue adequada ao seu caso de uso) seu script de compilação automatizado que:
- verifique
/var/run/build-needed
e, se não for mais recente que/var/run/last-build
, anule. - verifique
/var/run/build-in-progress
e, se estiver presente, cancele. - crie
/var/run/build/in-progress
- execute a compilação.
- remova
/var/run/in-progress
etouch
/var/run/last-build
.
Exemplo de implementação de esqueleto:
O processo canário:
pyinotify -r -a -e IN_CLOSE_WRITE -c 'touch /var/run/build-needed' src/
O trabalho cron
:
*/5 * * * * /path/to/autobuilder.sh
O script do construtor:
#!/bin/bash
canaryfile="/var/run/build-needed"
lastbuild="/var/run/last-build"
inprogress="/var/run/build-in-progress"
needbuild="no"
if [[ -f "$canaryfile" ]]; then
if [[ -f "$lastbuild" ]] && [[ "$canaryfile" -nt "$lastbuild" ]]; then
needbuild="yes"
elif ! [[ -f "$lastbuild" ]]; then
needbuild="yes"
fi
fi
if ! [[ -f "$inprogress" && "yes" == "$needbuild" ]]; then
cd /path/to/src
touch "$inprogress"
if make build; then
rm "$inprogress"
touch "$lastbuild"
fi
fi