#!/usr/bin/env bash # # A simple ci that saves its results in a git note, formatted according to # RFC-2822, more or less. # # To run this manually, exec the script. It will by default run the tests for # HEAD, whatever you currently have checked out. # # It would be cool to use a zero-knowledge proof mechanism here to prove that # so-and-so ran the tests, but I'll have to research how to do that. # # ensure we don't exit on bild failure, only on CI script error set +e set -u ## [[ -n $(git status -s) ]] && { echo fail: dirty worktree; exit 1; } ## at=$(date -R) user=$(git config --get user.name) mail=$(git config --get user.email) ## commit=$(git notes --ref=ci show HEAD || true) if [[ -n "$commit" ]] then if grep -q "Lint-is: good" <<< "$commit" then exit 0 fi if grep -q "Test-is: good" <<< "$commit" then exit 0 fi fi ## runlint="$CODEROOT"/_/bin/lint [[ ! -f "$runlint" ]] && bild "${BILD_ARGS:-""}" "${CODEROOT:?}"/Biz/Lint.hs if "$runlint" "${CODEROOT:?}"/**/* then lint_result="good" else lint_result="fail" fi ## if bild "${BILD_ARGS:-""}" --test "${CODEROOT:?}"/**/* then test_result="good" else test_result="fail" fi ## read -r -d '' note < Test-at: $at EOF ## git notes --ref=ci append -m "$note" ## # exit 1 if failure [[ ! "$lint_result" == "fail" && ! "$test_result" == "fail" ]] ##