aboutsummaryrefslogblamecommitdiff
path: root/aux/ci/ci-build.sh
blob: 1e3af4a8f0631bdc5d8bc6a681a40aa9af6d52bf (plain) (tree)





















                                                   
 


                                                                    






                                                         




                                                                                        


                       

                                                
                                            
                   


                                            
                  



                  
                                   


                                                     
#!/bin/sh
set -eux

PACKAGE="$1"
LOGS_DIR="$2"
read -r _ SHA _ # oldrev newrev refname
FILENAME="$(date -Is)-$SHA.log"
LOGFILE="$LOGS_DIR/$FILENAME"

{
  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 -
    if [ -f ./aux/ci/report.sh ]; then
      sh aux/ci/report.sh "$PACKAGE"
      rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
    fi

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

  unset GIT_DIR
  REMOTE="$PWD"
  cd "$(mktemp -d)"
  git clone "$REMOTE" .
  git config --global user.email git@euandre.org
  git config --global user.name 'EuAndreh CI'
  git fetch origin refs/notes/*:refs/notes/*
  git annex get ||:

  if [ -f aux/guix/with-container.sh ]; then
    RUNNER='./aux/guix/with-container.sh'
    guix describle
  else
    RUNNER='sh -c'
  fi

  $RUNNER 'make clean check public'

  rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
} | tee "$LOGFILE" 2>&1