#!/bin/sh -eux
BASE_URL="https://builds.sr.ht"
MANIFEST=$(mktemp)
trap "rm -f ${MANIFEST}" EXIT

# construct the sourcehut build manifest
cat > "${MANIFEST}" <<- EOF
image: ${IMAGE}
packages:
  - cmake
  - llvm
EOF

case "${IMAGE}" in
	freebsd*)
cat >> "${MANIFEST}" <<- EOF
  - libcbor
  - pkgconf
EOF
	;;
esac

cat >> "${MANIFEST}" <<- EOF
sources:
  - ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}#$(git rev-parse HEAD)
tasks:
  - build: |
      if [ "\$(uname)" = "OpenBSD" ]; then
        SUDO="doas -u root"
      else
        SUDO=sudo
      fi
      SCAN="/usr/local/bin/scan-build --use-cc=/usr/bin/cc --status-bugs"
      cd libfido2
      for T in Debug Release; do
        mkdir build-\$T
        (cd build-\$T && \${SCAN} cmake -DCMAKE_BUILD_TYPE=\$T ..)
        \${SCAN} make -j"\$(sysctl -n hw.ncpu)" -C build-\$T
        \${SUDO} make -C build-\$T install
      done
EOF

# start the build via POST to the build server
JOB_INFO=$(curl -s -X POST \
    -H Authorization:"token ${SOURCEHUT_TOKEN}" \
    --data-urlencode "manifest@${MANIFEST}" \
    "${BASE_URL}/api/jobs"
)

# extract required build information
JOB_OWNER=$(echo "${JOB_INFO}" | jq -e -r '.owner.canonical_name')
JOB_ID=$(echo "${JOB_INFO}" | jq -e -r '.id')
echo "Job '${JOB_ID}' running at ${BASE_URL}/${JOB_OWNER}/job/${JOB_ID}"

while true; do
	# fetch current build status
	JOB_STATUS=$(curl -s -X GET \
	    -H Authorization:"token ${SOURCEHUT_TOKEN}" \
	    "${BASE_URL}/api/jobs/${JOB_ID}" | \
	    jq -e -r '.status')

	case "${JOB_STATUS}" in
		success) exit 0;;
		failed) exit 1;;
		pending|queued|running) ;;
		*) exit 1;;
	esac
	sleep 60
done
