aboutsummaryrefslogblamecommitdiff
path: root/aux/ci/ci-build.sh
blob: 8d1825255f650955a8dc2c575f8f155c077dc036 (plain) (tree)
1
2
3
4
5
6
7
8
9


         
            
             
        


                               
           

                                                              




                     
 







                                                               
                 

                                                    
   
 




                                                                                
                                                          
                                                           
                                                       
 


                                                                       

                                                                                                     




                        
                       


                                                      
 

                                              



                              
                                      
                       
#!/bin/sh
set -eux

PROJECT="$1"
LOGS_DIR="$2"
SHA="$3"
FILENAME="$(date -Is)-$SHA.log"
LOGFILE="$LOGS_DIR/$FILENAME"

mkdtemp() {
	name="$(echo 'mkstemp(template)' |
		m4 -D template="${TMPDIR:-/tmp}/m4-tmpname.")"
	rm -f "$name"
	mkdir "$name"
	echo "$name"
}

{
	echo "Starting CI job at: $(date -Is)"

	finish() {
		STATUS="$?"
		printf "\n\n>>> exit status was %s\n" "$STATUS"
		echo "Finishing CI job at: $(date -Is)"
		cd -
		NOTE=$(cat <<EOF
See CI logs with:
	git notes --ref=refs/notes/ci-logs show $SHA
	git notes --ref=refs/notes/ci-data show $SHA
EOF
)
		git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME"
		git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE"
		git notes append -m "$NOTE"

		cd -
		git fetch origin refs/notes/*:refs/notes/*
		sh aux/ci/report.sh -n "$PROJECT" -o public
		rsync -av public/ "/srv/http/$PROJECT/"

		tar -C /srv/http -cf /srv/http/"$PROJECT"/repo.tar.gz \
			"$PROJECT".git

		printf '\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s\n>>>\n\n' \
			"$STATUS"
	}
	trap finish EXIT

	unset GIT_DIR
	REMOTE="$PWD"
	cd "$(mkdtemp)"
	git clone "$REMOTE" .
	git config --global user.email git@euandre.org
	git config --global user.name 'EuAndreh CI'

	if [ -e aux/with-container ]; then
		RUNNER='sh aux/with-container'
	else
		RUNNER='sh -c'
	fi

	$RUNNER 'make clean dev-check'
} 2>&1 | tee "$LOGFILE"